淘宝用户行为分析实战
一、数据来源及说明
来源:天池数据—淘宝用户的行为数据 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、针对不同品类的购买转化率采取不同的策略,提高已购品类的转化率,一方面,对未被购买的品类进行分析,找出原因,促成购买。
版权声明:本文为dataAnalysis原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。