淘宝用户数据分析

一、数据来源及说明
来源:天池数据—淘宝用户的行为数据淘宝用户数据集

column description
user_id 用户身份,脱敏
item_id 商品id,脱敏
behavior_type 用户行为类型(包括点击,收藏,加购物车和付款四种行为,相应的值分别为1,2,3和4。)
user_geohash 地理位置
item_category 品类ID(商品所属的品类)
time 用户行为发生的时间

二、提出问题

  1. 每天的浏览量(PV)
  2. 每天的访客量(UV)
  3. 付费率和复购率如何
  4. 用户行为的转化漏斗
  5. 从时间的维度分析用户行为
  6. 利用RFM模型对用户进行分层分析

三、数据清洗
(1)导入数据

import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import re
data_user=pd.read_csv(r'C:\Users\Administrator\Desktop\tianchi_mobile_recommend_train_user.csv')

(2)缺失值处理

missingTotal=data_user.isnull().sum()
missingExist=missingTotal[missingTotal>0]
missingExist=missingExist.sort_values(ascending=False)
print(missingTotal)

输出结果
user_id 0
item_id 0
behavior_type 0
user_geohash 8334824
item_category 0
time 0
dtype: int64

存在缺失值的是User_geohash,有8334824条,不能删除缺失值,因为地理信息在数据集收集过程中做过加密转换,因此对数据集不做处理。
(3)一致化处理

#拆分数据集
data_user['date']=data_user['time'].map(lambda s:re.compile(' ').split(s)[0])
data_user['hour']=data_user['time'].map(lambda s:re.compile(' ').split(s)[1])
data_user.head()

将time类数据中的年月日与小时分开,方便后面处理。
淘宝用户数据分析_第1张图片

#查看数据类型
data_user.dtypes

淘宝用户数据分析_第2张图片
将time与date转换成日期数据类型,hour转换成字符串类型。

#转换数据类型
data_user['date']=pd.to_datetime(data_user['date'])
data_user['time']=pd.to_datetime(data_user['time'])
data_user['hour']=data_user['hour'].astype('int64')
data_user.dtypes

淘宝用户数据分析_第3张图片
(4)异常值处理

#异常值处理
data_user=data_user.sort_values(by='time',ascending=True)#排序处理 
data_user=data_user.reset_index(drop=True)#建立索引  
data_user.describe()

淘宝用户数据分析_第4张图片
四、pv和uv
pv(访问量):即Page View, 具体是指网站的是页面浏览量或者点击量,页面被刷新一次就计算一次。

uv(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。
(1)日pv和日uv

# pv_daily记录每天用户操作次数,uv_daily记录每天不同的上线用户数量
pv_daily=data_user.groupby('date')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
uv_daily=data_user.groupby('date')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
fig,axes=plt.subplots(2,1,sharex=True)
pv_daily.plot(x='date',y='pv',ax=axes[0])
uv_daily.plot(x='date',y='uv',ax=axes[1])
axes[0].set_title('pv_daily')
axes[1].set_title('uv_daily')

淘宝用户数据分析_第5张图片
pv_daily和uv_daily总体波动趋势大体相同,从7号开始pv和uv开始大幅度攀升,在12号到达顶峰,说明双十二活动效果明显
(2)每小时pv和uv

#pv_hour记录每小时用户操作次数,uv_hour记录每小时不同的上线用户数量
pv_hour=data_user.groupby('hour')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
uv_hour=data_user.groupby('hour')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
fig,axes=plt.subplots(2,1,sharex=True)
pv_hour.plot(x='hour',y='pv',ax=axes[0])
uv_hour.plot(x='hour',y='uv',ax=axes[1])
x=range(0,25,1)
plt.xticks(x)
axes[0].set_title('pv_hour')
axes[0].set_title('uv_hour')

淘宝用户数据分析_第6张图片
从凌晨0点到4点,pv和uv成下降趋势,这段时间正是休息时间,所以访问量比较少,pv在18点到21点有了明显的上升,而uv变化不大,想要分析,还需要进一步观察。
(3)用户不同行为类型的pv分析

pv_detail=data_user.groupby(['behavior_type','hour'])['user_id'].count().reset_index().rename(columns={'user_id':'total_pv'})
fig,axes=plt.subplots(2,1,sharex=True)
sns.pointplot(x='hour',y='total_pv',hue='behavior_type',data=pv_detail,ax=axes[0])
sns.pointplot(x='hour',y='total_pv',hue='behavior_type',data=pv_detail[pv_detail.behavior_type!=1],ax=axes[1])
axes[0].set_title('pv_different_behavior_type')
axes[1].set_title('pv_different_behavior_type_except1')

淘宝用户数据分析_第7张图片
在18到21点的时候,每小时behavior_type1的数量(点击量)上升幅度明显高于其他行为,说明这段时间内用户更有耐心,在表达购物意向(收藏或加入购物车)或进行购买行为之前愿意花更多的时间,所以要激发用户兴趣,有针对性的推广。

五、用户消费情况分析
(1)用户消费次数分析

data_user_buy=data_user[data_user.behavior_type==4].groupby('user_id').apply(lambda x:x.behavior_type.count()/len(x.drop_duplicates(subset='date').count()))
sns.distplot(data_user_buy,kde=False)
plt.title('daily_user_buy')

淘宝用户数据分析_第8张图片
大部分用户日均消费次数在10次以内,因此需要重点关注购买次数在10次以上的消费者用户群体。
(2)日ARPPU

ARPPU(average revenue per paying user)是指从每位付费用户身上获得的收入,它反映的是每个付费用户的平均付费额度。

ARPPU=总收入/活跃用户付费数量

因为本数据集中没有消费金额,因此在计算过程中用消费次数代替消费金额

人均消费次数=消费总次数/消费人数

data_use_buy1=data_user[data_user.behavior_type==4].groupby(['date','user_id'])['behavior_type'].count().reset_index().rename(columns={'behavior_type':'total'})
#total指的该日该用户消费次数
data_use_buy1.groupby('date').apply(lambda x:x.total.sum()/x.total.count()).plot()
plt.title('daily_ARPPU')

淘宝用户数据分析_第9张图片
图表显示用户平均每次消费次数在2-3次之间,双十二期间达到了高峰。
(3)日ARPU

ARPU(Average Revenue Per User) :平均每用户收入,可通过 总收入/活跃用户人数 计算得出。它可以衡量产品的盈利能力和发展活力。

活跃用户数平均消费次数=消费总次数/活跃用户人数(每天有操作行为的为活跃)

data_user['operation']=1
data_use_buy2=data_user.groupby(['date','user_id','behavior_type'])['operation'].count().reset_index().rename(columns={'operation':'total'})

data_use_buy2.groupby('date').apply(lambda x:x[x.behavior_type==4].total.sum()/len(x.user_id.unique())).plot()
plt.title('daily_ARPU')

淘宝用户数据分析_第10张图片
图表显示,淘宝活跃用户平均每天消费次数比较低,在0.6次左右,双十二期间达到最高值,有1.9次左右。
(4)付费率

付费率=消费人数/活跃用户人数

afford_rate="%0.2f%%"%(len(data_use_buy2[data_use_buy2.behavior_type==4].user_id.unique())/len(data_use_buy2.user_id.unique())*100)
afford_rate

输出结果:‘88.86%’

付费用户的比率为88.86%,说明用户付费转化率相当的高。
六、用户复购情况分析

复购情况,即两天以上有购买行为,一天多次购买算一次。
复购率=有复购行为的用户数/有购买行为的用户总数。
(1)复购率

date_rebuy=data_user[data_user.behavior_type==4].groupby('user_id')['date'].apply(lambda x:len(x.unique())).rename('rebuy_count')
print('复购率:',round(date_rebuy[date_rebuy>=2].count()/date_rebuy.count(),4))

输出结果:复购率: 87.17%
(2)所有复购时间间隔消费次数分布

data_day_buy=data_user[data_user.behavior_type==4].groupby(['user_id','date']).operation.count().reset_index()
data_user_buy4=data_day_buy.groupby('user_id').date.apply(lambda x:x.sort_values().diff(1).dropna())
data_user_buy4=data_user_buy4.map(lambda x:x.days)
data_user_buy4.value_counts().plot(kind='bar')
plt.title('time_gap')
plt.xlabel('gap_day')
plt.ylabel('gap_count')

淘宝用户数据分析_第11张图片
多数用户复购率为87.17%,消费次数随着消费时间间隔的增加而不断下降,在10天之内复购次数比较多,10天之后复购次数淘宝用户很少在进行复购,因此需要重视10天之内的淘宝用户复购行为,增加用户复购。

七、漏斗流失分析

漏斗分析是一套流程式数据分析,它能够科学反映用户行为状态以及从起点到终点各阶段用户转化率情况的重要分析模型。

#转化率
pv_count=data_user[data_user.behavior_type==1]['user_id'].count()
collect_count=data_user[data_user.behavior_type==2]['user_id'].count()
cart_count=data_user[data_user.behavior_type==3]['user_id'].count()
buy_count=data_user[data_user.behavior_type==4]['user_id'].count()

pv_to_buy="%0.2f%%"%((buy_count/pv_count)*100)
pv_to_coll_and_cart="%0.2f%%"%(((collect_count+cart_count)/pv_count)*100)
coll_and_cart_to_buy="%0.2f%%"%((buy_count/(collect_count+cart_count))*100)
conversion_rate=pd.Series([pv_to_buy,pv_to_coll_and_cart,coll_and_cart_to_buy],index=["pv_to_buy","pv_to_coll_and_cart","coll_and_cart_to_buy"])
conversion_rate

淘宝用户数据分析_第12张图片
由于收藏和加入购物车都为浏览和购买阶段之间确定购买意向的用户行为,且不分先后顺序,因此将其算作一个阶段。从上面图片,可以看到从浏览到有购买意向只有5.07%的转化率。当然有一部分用户是直接购买而未通过收藏和加入购物车,但也说明大多数用户浏览页面次数较多,而使用购物车和收藏功能较少,而购买次数占使用购物车和收藏功能的20.51%,说明从浏览到进行收藏和加入购物车的阶段是指标提升的重点环节。

八、不同商品id的用户行为
(1)不同商品id的购买次数

item_id_total=data_user[data_user.behavior_type==4].item_id.value_counts().reset_index().rename(columns={'index':"item_id",'item_id':'total'}).groupby('total').item_id.count()
item_id_total.plot(kind='bar')
matplotlib.rcParams['font.family']='SimHei'   #设置字体(设置之后中文不会乱码)
plt.title('不同商品的购买次数')
plt.xlabel('购买次数')
plt.ylabel('商品id的数量')
for a,b in zip(item_id_total.index,item_id_total.values):
    plt.text(a, b, b, ha='center', va= 'bottom',fontsize=9)

淘宝用户数据分析_第13张图片
购买一次的商品有77586种,购买两次的商品有9910种,占了销售总量的绝大部分,说明商品售卖主要依靠长尾商品的累积效应,而非爆款商品的带动。
(2)分别列出销量和浏览量前20的商品id

#销量前20
item_id_total_1=data_user[data_user.behavior_type==4].item_id.value_counts()
item_id_total_1.head(20)

输出结果:
淘宝用户数据分析_第14张图片

#列出浏览量前20的商品id
item_id_total_1=data_user[data_user.behavior_type==1].item_id.value_counts()
item_id_total_1.head(20)

淘宝用户数据分析_第15张图片
销量最高的商品303205878其浏览量为第20位,而浏览量排前20的商品,很多没有进入销量前20,说明这些很有吸引力的商品没有很好的将浏览量转化为购买量。

九、用户价值度RFM模型分析

RFM的含义:

R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。

F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。

M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。

RFM分析就是根据客户活跃程度和交易金额的贡献,进行客户价值细分的一种方法。

from datetime import datetime
datenow=datetime(2014,12,20)
#每位用户最近购买时间
recent_buy_time=data_user[data_user.behavior_type==4].groupby('user_id').date.apply(lambda x:datetime(2014,12,20)-x.sort_values().iloc[-1]).reset_index().rename(columns={'date':'recent'})
recent_buy_time.recent=recent_buy_time.recent.map(lambda x:x.days)
# #每个用户消费频数
buy_freq=data_user[data_user.behavior_type==4].groupby('user_id').date.count().reset_index().rename(columns={'date':'freq'})
rfm=pd.merge(recent_buy_time,buy_freq,left_on='user_id',right_on='user_id',how='outer')
# #将各维度分成两个程度,分数越高越好
rfm['recent_value']=pd.qcut(rfm.recent,2,labels=['2','1'])
rfm['freq_value']=pd.qcut(rfm.freq,2,labels=['1','2'])
rfm['rfm']=rfm['recent_value'].str.cat(rfm['freq_value'])
rfm.head()

淘宝用户数据分析_第16张图片
表格显示:因为本数据集没有提供消费金额,因此只能R和F进行用户价值分析,通过RF用户价值分析,对于22用户,为重点用户需要关注;对于21这类忠诚度高而购买能力不足的,可以可以适当给点折扣或捆绑销售来增加用户的购买频率。对于12这类忠诚度不高而购买能力强的,需要关注他们的购物习性做精准化营销。

总结:
1.从7号开始pv和uv大幅度攀升,在12号到达顶峰,而且12日用户平均消费次数是平时的三倍,说明双十二活动效果明显。

2.在18到21点的时候,每小时点击量大幅上升,是一天中浏览量高峰,这时段营销收益最好,但上升幅度明显高于其他行为,说明这段时间内用户更有耐心,在进行购买行为之前愿意花更多的时间浏览,所以要激发用户兴趣,有针对性的推广。

3.大部分用户日均消费次数在10次以内,因此需要重点关注购买次数在10次以上的消费者用户群体。

4.付费用户的比率为88.86%,说明用户付费转化率相当的高。

5.用户复购率为87.17%,消费次数随着消费时间间隔的增加而不断下降,在10天之内复购次数比较多,10天之后复购次数淘宝用户很少在进行复购,因此需要重视10天之内的淘宝用户复购行为,增加用户复购。

6.由于收藏和加入购物车都为浏览和购买阶段之间确定购买意向的用户行为,且不分先后顺序,因此将其算作一个阶段。从浏览到有购买意向只有5.07%的转化率。当然有一部分用户是直接购买而未通过收藏和加入购物车,但也说明大多数用户浏览页面次数较多,而使用购物车和收藏功能较少,而购买次数占使用购物车和收藏功能的20.51%,说明从浏览到进行收藏和加入购物车的阶段是指标提升的重点环节。

7.购买一次的商品有77586种,购买两次的商品有9910种,占了销售总量的90%以上,说明商品售卖主要依靠长尾商品的累积效应,而非爆款商品的带动。

8.销量最高的商品303205878,其浏览量为第20位,而浏览量排前20的商品,很多没有进入销量前20,说明这些很有吸引力的商品没有很好的将浏览量转化为购买量。

9.R和F评分都很高的用户是体系中的最有价值用户,需要重点关注。并且活动投放时需谨慎对待,不要引起用户反感。对于R值高而F值低的用户,用户粘性不强而消费时间间隔较短,运营活动可以重点针对这部分用户,提高用户使用产品的频率,可以通过拼团打折、积分兑换等活动唤起用户注意力。

你可能感兴趣的:(淘宝用户数据分析)