本数据集共收集了发生在一个月内的28010条数据,包含以下字段:
[‘订单编号’, ‘总金额’, ‘买家实际支付金额’, ‘收货地址’, ‘订单创建时间’, '订单付款时间 ', ‘退款金额’]
1.订单实际支付金额 = 订单总金额 - 退款金额
2.若付款时间为NAN,则此订单未支付。未支付订单则退款金额为0。
1、订单每个环节的转化情况
2、订单成交的时间特点
3、各区域订单情况
思维导图
import numpy as np import pandas as pd import pyecharts.options as opts from pyecharts.charts import Funnel,Line,Map
#导入数据
df=pd.read_csv('tmall_order_report.csv', encoding = 'utf8')
df.head()
#查看数据的基本情况 df.info()
#数据清洗 # 观察是否存在重复数据 df.duplicated().sum() # 不存在
#列名中可能存在空格,需要进行去空格处理
df.rename(columns = lambda x : x.replace(' ', ''), inplace = True)
#对时间列进行转换
# 转换时间格式
df['订单创建时间'] = pd.to_datetime(df['订单创建时间'])
df['订单付款时间'] = pd.to_datetime(df['订单付款时间'])
# 新增下单日期列、小时列
df['o_h'] = df['订单创建时间'].dt.hour
df['o_d'] = df['订单创建时间'].dt.day
转化情况
订单转化率-漏斗图
dict_df=dict() key='总订单' dict_df[key]=len(df) key='付款订单' df_payed=df[df['订单付款时间'].notnull()] dict_df[key]=len(df_payed) key='到款订单' dict_df[key]=len(df_payed[df_payed['买家实际支付金额']!=0]) key='全额到款' dict_df[key]=len(df_payed[df_payed['退款金额']==0]) dict_df=pd.Series(dict_df,name='订单数').to_frame() name= '总体转化率' total_rate=dict_df['订单数']/dict_df.loc['总订单','订单数']*100 dict_df[name]=total_rate.apply(lambda x:round(x,2)) dict_df
funnel=(
Funnel()
.add(
series_name='总体转化率',
data_pair=[list(z) for z in zip(dict_df.index, dict_df['总体转化率'])],
gap=2,#数据图形间距
label_opts=opts.LabelOpts(position='inside'), #标签内部显
tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a}
{b} : {c}%")
)
.set_global_opts(title_opts=opts.TitleOpts(title='总体转化率'))
)
funnel.render_notebook()
单一环节转化率
即下一环节站上一环节总量的比重
name='单一环节转化率'
single_rate=dict_df['订单数'].shift() #默认下移一位
dict_df[name]=single_rate.fillna(dict_df.loc['总订单','订单数']) #填充空白值
dict_df[name]=round((dict_df['订单数']/dict_df[name]*100),2)
funnel=Funnel().add(
series_name=name,
data_pair=[list(z) for z in zip(dict_df.index, dict_df[name])],
is_selected =True,
label_opts = opts.LabelOpts(position='inside'))
funnel.set_series_opts(tooltip_opts=opts.TooltipOpts(formatter='{a}
{b}:{c}%'))
funnel.set_global_opts(title_opts=opts.TitleOpts(title='单一环节转化率'))
funnel.render_notebook()
在总体转化率中,付款向到款的转化环节,转化率较低;在单一环节中,可以到同样的结论。此处说明收款的周期可能被拉长,有可能是客户的确认收货时间过长导致。
天
pay_df=df[df['买家实际支付金额']!=0]
day_order=pay_df['o_d'].value_counts().sort_index()
(Line()
.add_xaxis(xaxis_data=list(day_order.index.map(str))) #映射
.add_yaxis(series_name='天订单数',y_axis=day_order.values.tolist())
.set_global_opts(yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True))) #分割线配置顶
.render_notebook()
)
2月订单数,上半月偏小,后面快速攀升。猜测有如下原因:
1.受疫情影响,生产力和购买力都下降,下半月开始恢复,使数值快速上升。
2.上半个月为春节后的一段时间,企业多数未复工,快递多数停运。
3.2月或有优惠活动。
具体原因需要更多数据佐证
时
hour_order=pay_df['o_h'].value_counts().sort_index()
(Line()
.add_xaxis(xaxis_data=list(hour_order.index.map(str))) #映射
.add_yaxis(series_name='时订单数',y_axis=hour_order.values.tolist())
.set_global_opts(yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)))
.render_notebook()
)
10:00、15:00、20:00为用户下单的高峰期,可进行一些好物推广,促进用户下单。
下单、付款间隔时间
range_t1=range_t.value_counts().sort_index() range_t.describe([0.01,0.05,0.1,0.25,0.5,0.75,0.9,0.99])
75%的订单都是在15秒以内完成的,最短间隔1秒完成付款,最长间隔约24小时。
df['收货地址']=df['收货地址'].str.replace('省','').str.replace('自治区','').str.replace('回族','').str.replace('壮族','').str.replace('维吾尔','')
province_order=df['收货地址'].value_counts()
c=[list(z) for z in zip(province_order.index.tolist(),province_order.values.tolist())]
c
c = (
Map()
.add("",c, "china",is_map_symbol_show=False)
.set_global_opts(
title_opts=opts.TitleOpts(title="各省市订单分布"),
visualmap_opts=opts.VisualMapOpts(max_=4000,
)
)
)
c.render_notebook()
沿海和经济发达地区订单数比中西部,西部地区多
上海的订单数最多,其次是广东、江苏、浙江、北京等比较沿海的城市,四川省是内陆城市里交易数量比较高的城市。 内陆城市尤其是青海、西藏、新疆等西部地区订单交易数量最少。



