淘宝用户行为分析实战
一、数据来源及说明
来源:天池数据—淘宝用户的行为数据 https://tianchi.aliyun.com/dataset/dataDetail?dataId=46
该数据下载后包含12256906条数据,6个字段。
数据列字段介绍:
column | description |
user_id | 用户身份,脱敏 |
item_id | 商品id,脱敏 |
behavior_type | 用户行为类型 (包括点击,收藏,加购物车和付款四种行为,相应的值分别为1,2,3和4。) |
user_geohash | 地理位置 |
item_category | 品类ID(商品所属的品类) |
time | 用户行为发生的时间 |
二、提出问题(目标)
1、基础数据统计
总PV、总UV、有购买行为的用户数量、复购率、跳失率
2、用户行为转化漏斗
点击--收藏--加购物车--支付各环节转化率如何?
3、购买次数占前80%的品类有多少?
4、从时间维度了解用户的行为习惯
每天的PV、UV
三、数据探索及预处理
1、数据抽取
首先,由于数据较为庞大,进行抽样处理--随机抽样
抽取100万条数据
import pandas as pd data=pd.read_csv(r'K:\siren\data_taobao\tianchi_mobile_recommend_train_user.csv') data.head() data.info()
#随机、可放回抽样 data=data.sample(n=10000,replace=True,axis=0) data.to_csv(r"K:\siren\data_taobao\user.csv")
2、数据清洗
数据一致化处理
time字段的时间包含年-月-日和小时,为方便分析,将该字段分为2个字段:一个日期列,一个小时列
用Excel实现 将该字段的小时列删除,将数据名字保存为user_
格式处理
#将数据处理为时间格式 data=pd.read_csv(r'K:\siren\data_taobao\user_.csv') data['time']=pd.to_datetime(data['time'])
缺失值处理
user_geohash地理位置列,多数为NULL,且信息被加密处理,后面便不做地理位置的研究。
数据处理,将行为提取
#将behavior_type的四种行为类型分别用1,2,3,4代表,为方便查看现将数字转为pv,collect,cart,buy data.ix[data['behavior_type']==1,'behavior_type']='pv' data.ix[data['behavior_type']==2,'behavior_type']='collect' data.ix[data['behavior_type']==3,'behavior_type']='cart' data.ix[data['behavior_type']==4,'behavior_type']='buy' data.groupby(['behavior_type']).count()
四、整体用户购物情况
1、基础数据统计
1)pv(总访问量)为:942396 PV即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。
代码实现如下:
data.groupby(['behavior_type']).count()
2)UV(用户总数):9869 UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。
data.drop_duplicates('user_id').count()
3)有购买行为的用户数:3595
data2=data[data['behavior_type']=='buy'] data2.drop_duplicates('user_id').count()
4)复购率:65.7% 复购率=购买2次或以上的用户/购买用户总数
data3=data[data['behavior_type']=='buy'] df=data3.groupby('user_id').count() df[df['behavior_type']>=2].count() 2362/3595
2、从时间维度来了解用户行为习惯
1)每周的用户行为数量变化趋势
可以看到,周一到周二的用户行为逐渐增加,周二-周四达到一个稳定值,周四到-周六用户行为明显减少,周六为一周最低,周六后开始逐渐增加。
data['time1']=[i.weekday() for i in data['time']] df1=data.groupby('time1').count() df1.index=[1,2,3,4,5,6,7] import matplotlib.pyplot as plt %matplotlib inline import numpy as np import matplotlib.dates as mdate fig=plt.figure(figsize=(20,6)) plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签 plt.xticks(df1.index) ax=fig.add_subplot(111) ax.plot(df1.index,df1['user_id'])
2)日pv量
结论:在12月份开始,用户行为逐渐有增多趋势,尤其在12月9日开始,用户行为明显高于其他时期,这几天用户行为增多是因为淘宝的“双十二”活动。
代码实现:
data1=data[data['behavior_type']=='pv'] day_pv=data1.groupby(['time']).count() day_pv
#可视化 import matplotlib.pyplot as plt %matplotlib inline import numpy as np import matplotlib.dates as mdate data1=data[data['behavior_type']=='pv'] day_pv=data1.groupby(['time']).count() day_pv fig=plt.figure(figsize=(20,6)) plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签 plt.title(u'每天PV图') ax=fig.add_subplot(111) ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) plt.xticks(pd.date_range(day_pv.index[0],day_pv.index[-1],freq='D'),rotation=45) #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False ax.plot(day_pv.index,day_pv['user_id'])
3)每天的UV:
结论:用户总数变化趋势与PV量变化趋势类似,周末的数量逐渐增加,到工作日又逐渐降低。在双十二期间,用户总数明显上升,活动过后,人数明显下降至平稳状态。
代码实现:
day_uv=data.groupby('time')['user_id'].nunique() day_uv fig=plt.figure(figsize=(20,6)) plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] plt.title(u'每天UV量') ax=fig.add_subplot(111) ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d')) plt.xticks(pd.date_range(day_uv.index[0],day_uv.index[-1],freq='D'),rotation=45) #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False ax.plot(day_uv.index,day_uv)
4)一天当中不同时段,用户行为的数量
结论:可以看到,从22:00点-凌晨5点,用户数量逐渐降低,降为一天之中最低,因为此段时间大多数人处于休息之中。
从早上6点开始,用户行为数量逐渐增多,直至上午10点。
10点-18:00用户行为数量一直保持一个平稳的状态,因为此段时间,大部分人在工作或者处理事情,用户行为数量很稳定。
而18:00过后,很多人已经下班,有闲暇时间,用户行为数量逐渐增加,直至一天之中的最高值。如果运营人员采取活动,可以参考用户比较活跃的时间段。
data['day']=data['time'].dt.day data['hour']=data['time'].dt.hour df=data.groupby('hour')['user_id'].count() import matplotlib.pyplot as plt %matplotlib inline import matplotlib.dates as mdate fig=plt.figure(figsize=(20,6)) plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签 plt.xticks(np.arange(24),rotation=45) ax=fig.add_subplot(111) ax.plot(df.index,df['user_id'])
3、购买转化率:1.06% 用户行为转化漏斗
结论:用户点击后,收藏或者加购物车的概率在5%左右,而最后真正的购买率在1%,已经收藏或者加购物车到最终购买的转化率为21.03%,购买转化率很低,后面可以采取活动提高购买转化率。
代码实现:
pv_count=data[data['behavior_type']=='pv'].count() buy_count=data[data['behavior_type']=='buy'].count() pv_to_buy=buy_count/pv_count pv_to_buy
pv_num=data[data['behavior_type']=='pv']['user_id'].count() collect_num=data[data['behavior_type']=='collect']['user_id'].count() cart_num=data[data['behavior_type']=='cart']['user_id'].count() buy_num=data[data['behavior_type']=='buy']['user_id'].count() far_num=collect_num+cart_num data1={'环节':['pv','far','buy'], '人数':[pv_num,far_num,buy_num]} frame=pd.DataFrame(data1) frame #计算单环节转化率 temp1=np.array(frame['人数'][1:]) temp2=np.array(frame['人数'][0:-1]) temp1,temp2 single_convs=temp1/temp2 single_convs=list(single_convs) single_convs.insert(0,1) single_convs=[round(x,4) for x in single_convs] frame['单一环节转化率']=single_convs #求总体转化率 temp3=np.array(frame['人数']) temp4=np.ones(len(frame['人数']))*frame['人数'][0] total_convs=list(temp3/temp4) total_convs=[round(x,4) for x in total_convs] frame['总体转化率']=total_convs frame #绘制漏斗图 from pyecharts import Funnel attrs=frame['环节'].tolist() attr_value=(np.array(frame['总体转化率']*100)).tolist() funnel1=Funnel("总体转化漏斗图",width=400,height=200,title_pos='center') funnel1.add(name='商品交易环节', attr=attrs, value=attr_value, is_label_show=True, label_formatter='{d}%', label_pos="inside", legend_orient='vertical', legend_pos='left', is_legend_show=True) funnel1.render('文件路径')
4、销售次数前十的品类:6344
df=data[data['behavior_type']=='buy'] df.groupby('item_category').count().sort_values('user_id',ascending=False)
结论:购买次数最多的品类是6344,购买次数为162.
五、结论:
1、大部分用户的主要活跃时间段为9:00-22:00,其中18:00-22:00开始逐渐增加,达到一天之中的顶峰。每周的主要活跃时间为周二至周四,运营人员可根据活跃时间进行相关的活动。
2、收藏或者加购物车的概率在5%左右,而最后真正的购买率在1%,购买转化率与行业的标准进行比较,后面可以采取活动(用户细分,转化路径细查)提高购买转化率。
3、针对不同品类的购买转化率采取不同的策略,提高已购品类的转化率,一方面,对未被购买的品类进行分析,找出原因,促成购买。