一、数据来源及说明
来源:天池数据—淘宝用户的行为数据 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 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/dataAnalysis/p/10565004.html