淘宝用户行为分析实战

 
一、数据来源及说明
来源:天池数据—淘宝用户的行为数据 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、针对不同品类的购买转化率采取不同的策略,提高已购品类的转化率,一方面,对未被购买的品类进行分析,找出原因,促成购买。

 

posted @ 2019-03-20 15:43  平淡才是真~~  阅读(4849)  评论(0编辑  收藏  举报