一.背景
在上篇文章,基于Mysql的淘宝用户分析中,由于数据量太大,进行了部分数据抽取。但实际工作中,对这种行为数据应该全部分析的,因此用Python进行全部数据的分析。
二.数据预处理
读取并观察数据;
image.png
删除无价值字段,对进行时间处理;
del user_n['user_geohash']
user_n['daily'] = user_n.time.map(lambda x: x.split(' ')[1])
user_n['date'] = user_n.time.map(lambda x: x.split('-',1)[1].split(' ')[0])
import datetime as dt
user_n['time'] = pd.to_datetime(user_n['time'])
user_n['weekday'] = user_n['time'].dt.weekday
user_n['datetime'] = user_n['time'].dt.date
处理后的数据;
image.png
原数据中,将用户行为用特定行为名称描述,behavior ={1:'pv',2:'collect',3:'cart',4:'buy'},在此进行相关字段替换;
user_n['behavior_type'] = user_n['behavior_type'].map({1:'pv',2:'collect',3:'cart',4:'buy'})
三.时间维度分析
2.1 分时段流量
分时段统计各点击、收藏、加购、购买人数;
pv_num = user_n[user_n.behavior_type =='pv'].groupby('daily')['user_id'].count()
collect_num = user_n[user_n.behavior_type =='collect'].groupby('daily')['user_id'].count()
cart_num = user_n[user_n.behavior_type =='cart'].groupby('daily')['user_id'].count()
buy_num = user_n[user_n.behavior_type =='buy'].groupby('daily')['user_id'].count()
用图表展示其流量变化;
L0 = Line()
L0.add_xaxis(list(pv_num.index))
L0.add_yaxis('浏览人数',list(pv_num))
L0.add_yaxis('收藏人数',list(collect_num))
L0.add_yaxis('加购人数',list(cart_num))
L0.add_yaxis('购买人数',list(buy_num))
L0.set_global_opts(title_opts=opts.TitleOpts(title="分时段流量分布"),
tooltip_opts=opts.TooltipOpts(trigger="axis",axis_pointer_type='cross'))
L0.set_series_opts(label_opts=opts.LabelOpts(is_show = False))
L0.render_notebook()
图片如下:
image.png
可以看出,点击、收藏、加入购物车的数量都在晚上存在明显的提升,但是相对而言在购买上晚上的提升没有其他用户行为显著。
2.2 分日期流量
同理,分日期流量如下:
image.png
2.3 分周流量
image.png
从图中可以看出在工作日当中pv量高于周末时候,这与原本预想的不太一样。
从时间维度我们可以得出以下几点:
1.用户对商品的浏览,收藏,加入购物一般在晚上7点到11点最多,但是在这期间购买量并没有比白天有显著的提升;
2.双十二活动促销效果明显,短时间内提升了用户的浏览、收藏、加入购物车行为猛增,在双十二当天购买量成倍数增长。
3.非工作日的购买量低于工作日。 对工作日白天晚上进行观察。
四.行为路径转化率
p0 = user_n.groupby(['behavior_type']).size()
[list(z) for z in zip(p0.index.tolist(),p0.tolist())]
转化率数据可视化;
from pyecharts import options as opts
from pyecharts.charts import Funnel
F1 = Funnel(init_opts=opts.InitOpts(width="780px",height="350px"))
F1.add("行为转化",[list(z) for z in zip(p0.index.tolist(),p0.tolist())])
F1.set_global_opts(title_opts=opts.TitleOpts(title="Funnel-行为转化"))
F1.render_notebook()
行为转化如下:
image.png
总体来说,从上面的图片并不能明确判断用户的转化路径是哪一种,pv-cart-collect-buy,还是pv-collect-buy.因此需要细化去分析。
user_trans = user_n.groupby(['date','behavior_type']).size().unstack()
cart_to_buy = user_trans.apply(lambda x: x[0] / x[1], axis=1)
pv_to_collect = user_trans.apply(lambda x: x[2] / x[3], axis=1)
pv_to_cart = user_trans.apply(lambda x: x[1] / x[3], axis=1)
cart_to_collect = user_trans.apply(lambda x: x[2] / x[1], axis=1)
collect_to_buy = user_trans.apply(lambda x: x[0] / x[2], axis=1)
逐日对比两种路径的转化。
image.png
从路径转化的曲线来看,cart-to-collect这一路径与其他转化路径相比异常。
五.复购率
查看最受欢迎的商品类目。
image.png
计算复购率。
re_purchase = user_n.groupby(['item_id','user_id']).size()
for i in range(1,10):
repurchase_rate = len(re_purchase[re_purchase>i])/len(re_purchase)
print('重复',i,'次购买率:',repurchase_rate)
商品复购情况如下:
image.png
71%以上的商品都存在重复购买的现象,而用一用户能重复购买三次以上的商品不多。
同一用户的最高重复购买次数为128,要么这种商品是畅销消耗品,要么是销售环节的漏洞或风险。
六.留存率
留存率定义:某日的留存率为用户在当日后N天的仍然在线的用户。在此计算3日留存率,7日留存率。
3日留存率所需要查看的日期;
date = pd.Series(df.datetime.unique()).sort_values()[:-3]
遍历date里面的每个日期i,提取后三天仍然活跃的用户。user_n1 与new_user 里面共同的用户为留存用户。
user = []
for i in date:
new_user = set(df[df.datetime == i]['user_id'].unique()) - set(user)
user.extend(new_user)
user_n1 = df[df.datetime == i+timedelta(3)]['user_id'].unique()
最终留存率可视化。
image.png
网友评论