前言
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
什么是数据分析
明确目的–获得数据(爬虫,现有,公开的数据)–数据预处理——数据可视化——结论
准备
环境使用:
在开始写我们的代码之前,我们要准备好运行代码的程序
-
Anaconda (python3.9)
–> 识别我们写的代码
开发工具:
-
jupyter notebook
–> 代码编辑功能敲代码的工具
不会安装的可以文末名片+我获取哦 😎
数据准备:
本数据集共收集了发生在一个月内的28010条数据,包含以下:
7个字段说明
订单编号:订单编号
总金额:订单总金额
买家实际支付金额:总金额 - 退款金额(在已付款的情况下)。金额为0(在未付款的情况下)
收货地址:各个省份
订单创建时间:下单时间
订单付款时间:付款时间
退款金额:付款后申请退款的金额。如无付过款,退款金额为0
分析目的
订单每个环节的转化转化率
订单成交的时间(按天)趋势(按实际成交)
订单数在地图上的分布
订单读取及处理
读取数据
import pandas as pd
df = pd.read_csv('tmall_order_report.csv',encoding='gbk')
df.head()
处理数据
缺失值
df.isnull().sum()
# 订单付款时间 有2923个缺失值,属于正常现象,说明这些单位付过款,无需处理
订单转化率-漏斗图
计算每个环节的数据
-
将得到如下的数据:
[[‘总订单数’, ‘28010’],
[‘付款订单数’, ‘24087’],
[‘到款订单数’, ‘18955’],
[‘全额到款订单数’, ‘18441’]]
买家实际支付金额:总金额 - 退款金额(在已付款的情况下)。金额为0(在未付款的情况下)
退款金额:付款后申请退款的金额。如无付过款,退款金额为0
订单总笔数
付过款的订单数
key = '付款订单数'
# 付款时间不为空的,表示付过款
df_payed = df[df['订单付款时间'].notnull()]
dict_convs[key] = len(df_payed)
len(df_payed)
到款订单数
key = '到款订单数'
# 买家实际支付金额:总金额 - 退款金额(在已付款的情况下)
# 买家实际支付金额不为0的,说明订单商家收到过款
df_trans = df_payed[df_payed['买家实际支付金额'] != 0]
dict_convs[key] = len(df_trans)
len(df_trans)
# 漏斗图 Funnel
from pyecharts.charts import Funnel
from pyecharts import options as opts
funnel = (
Funnel()
.add(
"总体转化率",
[list(z) for z in zip(df_convs.index,df_convs["总体转化率"])],
# 让外面的字体出现在图上面
label_opts = opts.LabelOpts(position = 'inside')
)
# 设置系列选项,格式化输出
.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%'))
# 设置全局选项,添加标题
.set_global_opts(title_opts = opts.TitleOpts(title = "总体转化率"))
)
funnel.render_notebook()
那么这个的话就是我们的一个漏斗图,我们可以看到天猫的一个总体转化率还是非常高的对吧
所以说像这个天猫他的一个对于商品的推荐还是做的非常不错的
单一环节转化率
# 添加单一环节转化率,每个环节除以上一环节
name = '单一环节转化率'
# shift(): 让整个列往下移动一个位置
# 那么移完位置之后就不可避免会出现第一个位置是空的
# 所以这里我们把第一个位置填数据
df_convs["单一环节转化率"] = df_convs['订单数'].shift().fillna(28010.0)
df_convs["单一环节转化率"] = round((df_convs['订单数']/df_convs["单一环节转化率"]*100),0)
df_convs
name = '单一环节转化率'
funnel = (
Funnel()
.add(
series_name = name,
data_pair = [list(z) for z in zip(df_convs.index,df_convs[name])],
label_opts = opts.LabelOpts(position = 'inside')
)
.set_series_opts(tooltip_opts = opts.TooltipOpts(formatter = '{a}<br/>{b}:{c}%'))
)
funnel.render_notebook()
整体订单数趋势
# 按到款订单统计
# 将订单创建时间这一字段改成时间类型的数据
df_trans['订单创建时间'] = df_trans['订单创建时间'].astype('datetime64')
# 然后让订单创建时间变成行标
df_trans=df_trans.set_index('订单创建时间')
# 最后看一下前5行
df_trans.head()
df_trans.resample('D')['订单编号'].count().index.day.astype('str').tolist()
# 重采样,时间序列的内容
# 统计每天的订单数量
se_trans_month = df_trans.resample('D')['订单编号'].count()
se_trans_month
结论:
2月上半个月,企业多数未复工,快递停运,无法发货
下半个月,随着企业复工逐渐增多,订单数开始上涨
#订单平均价格
df_trans['买家实际支付金额'].mean()
销量区域分布-地理图
se_trans_map = df_trans.groupby('收货地址')['订单编号'].count()
se_trans_map
import pyecharts.options as opts
from pyecharts.charts import Map
# 展示地理分布图
map1 = (
Map()
.add(
"订单数",
[list(i) for i in se_trans_map.items()],
'china'
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=max(se_trans_map)*0.6
)
)
)
map1.render_notebook()
尾语 💝
好了,今天的分享就差不多到这里了!
完整代码、更多资源、疑惑解答直接点击下方名片自取即可。
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!