python开发跟淘宝有关联微_使用Python分析淘宝用户行为
一、项目背景
本数据分析报告以手机淘宝app订单数据作为数据集,通过行业常见指标对淘宝用户行为数据进行分析,并给出优化建议。本数据集包含了2014年11月18日至2014年12月18日之间,约八十万随机用户的所有行为(行为包括点击、购买、加购、喜欢)数据。
数据来源于阿里云天池:Tianchi:Data setstianchi.aliyun.com
二、提出问题和分析目标
(1)流量分析:PV、UV流量指标分析,用户使用的分时高峰在哪里
(2)用户消费行为分析:日ARPPU、ARPU,用户购买次数分布情况,同一时间段用户消费次数对比,消费二八理论分析
(3)行为转化分析:用户漏斗流失情况分析,复购率分析,留存率分析
(4)用户画像:用户生命周期,RFM用户价值分析
三、理解数据
本数据集共有80万条左右数据,数据为淘宝APP2014年11月18日至2014年12月18日的用户行为数据,共计6列字段,列字段分别是:
user_id:用户身份ID,脱敏
item_id:商品ID,脱敏
behavior_type:用户行为类型(包含点击、收藏、加购物车、支付四种行为,分别用数字1、2、3、4表示)
user_geohash:用户地理位置
item_category:品类ID(商品所属的品类)
time:用户行为发生的时间
四、数据清洗
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import re
%matplotlib inline
# 中文字符和正负号正常显示的设置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
data_user=pd.read_csv('tianchi_mobile_recommend_train_user.csv')
data_user.head()
观察数据各字段的具体信息,格式
data_user.info()
观察数据集各字段数据类型,缺失值信息
(1)缺失值处理
del data_user['user_geohash']
用户地理位置字段,本次不进行分析,将其删除
data_user.isnull().sum()
------------------------------
user_id 0
item_id 0
behavior_type 0
item_category 0
time 1
dtype: int64
------------------------------
data_user=data_user.dropna(how='any')
观察缺失值,发现用户行为时间字段含有一个缺失值,将其删除
(2)重复值处理
data_user=data_user.drop_duplicates(keep='first')
删除数据集中的重复值,去重后还有约70万条的数据
(3)一致化处理
data_user['date']=pd.to_datetime(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]).astype('int64')
将时间字段进行一致化处理,拆分成日期类型的date字段和整型的小时字段
def behavior_type(type):
if type == 1:
return 'pv'
elif type == 2:
return 'favor'
elif type == 3:
return 'cart'
else:
return 'buy'
data_user['behavior_type'] = data_user['behavior_type'].apply(behavior_type)
将用户行为类型一致化,将1、2、3、4 分别转化为 pv,favor,cart,buy 方便后续使用
(4)异常值处理
data_user.describe()
通过观察数据集的四分位数,总数,平均值,方差等,发现数据集并无异常值存在
五、构建模型与数据分析
(1) 流量分析
1. PV和UV分析
PV(页面访问量):即Page View,具体是指网站的页面浏览量或者点击量,页面被刷新一次就计算一次
UV(独立访客量):即Unique Visitor,访问网站的一台电脑IP做为一个访客日PV,UV分析
pv_daily=data_user[data_user.behavior_type=='pv'].groupby('date').user_id.count().reset_index().rename(columns={'user_id':'pv'})
uv_daily=data_user[data_user.behavior_type=='pv'].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('日访问量')
axes[1].set_title('日访客数量')
由上图可见,在双十二活动期间,pv和uv访问量达到峰值,并且可以发现,pv和uv两个访问量数值差距比较大,单个用户的页面点击量较高,在双十二期间淘宝用户的日活量大概有近一倍的提升,说明双十二活动引流明显小时PV,UV分析
pv_hour=data_user[data_user.behavior_type=='pv'].groupby('hour').user_id.count().reset_index().rename(columns={'user_id':'pv'})
uv_hour=data_user[data_user.behavior_type=='pv'].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])
axes[0].set_title('小时访问量')
axes[1].set_title('小时访客数')
pv和uv在凌晨0-5点期间波动情况相同,都呈下降趋势,访问量都比较小,用户流量在每天19-22时之间达到峰值,该时段是淘宝用户活跃量最高时段,商家应该集中资源,重点在该时段进行引流不同类型用户行为分析
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('hour','total_pv','behavior_type',data=pv_detail,ax=axes[0])
sns.pointplot('hour','total_pv','behavior_type',data=pv_detail[pv_detail.behavior_type!='pv'],ax=axes[1])
由上图可见,点击这一用户行为相比较于其他三类用户行为,行为占比最高,同时四种用户行为的波动情况基本一致。后续在用户漏斗流失分析中,在对这四种类型的用户行为的流失率进行深入分析
(2) 用户消费行为分析
1.日ARPPU
ARPPU(Average Revenue Per Paying User)是指从每位付费用户身上获得的收入,它反映的是每个付费用户的平均付费水平
ARPPU=总收入/付费用户数量
由于本数据集中没有消费金额,因此在计算过程中用消费次数代替消费金额
人均消费次数=消费总次数/消费人数
data_use_buy1=data_user[data_user.behavior_type=='buy'].groupby(['date','user_id'])['behavior_type'].count().reset_index().rename(columns={'behavior_type':'total'})
data_use_buy1.groupby('date').apply(lambda x:x.total.sum()/x.total.count()).plot()
plt.title('daily_ARPPU')
可以发现平均每天消费次数在1-2次之间波动,双十二期间用户消费次数达到峰值
2. 日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=='buy'].total.sum()/x.drop_duplicates('user_id').user_id.count()).plot()
plt.title('daily_ARPU')
从图中可以发现,活跃用户平均每天消费次数比较低,在0.075次左右,双十二期间达到最高值,接近0.225
3. 用户购买次数分布情况
data_amount=data_user[data_user.behavior_type=='buy'].groupby('user_id').user_id.count()
sns.distplot(data_amount)
可以发现一个月内用户消费次数普遍在10次以内,可以重点关注购买次数在20次以上的消费者用户群体,作为高价值用户进行具体分析
4. 同一时间段用户消费次数分布
data_user_buy3=data_user[data_user.behavior_type=='buy'].groupby(['user_id','date','hour'])['operation'].sum().rename('buy_count')
sns.distplot(data_user_buy3,kde=False)
可以发现,在同一小时时间段内,大部分的用户的购买次数都为1次,仅少数用户产生了多次购买行为
5. 二八理论分析
二八定律:在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的,因此又称二八定律。
data28['cusum']=data28['count'].cumsum()/data28['count'].sum()
data28.sort_values(by='cusum',ascending=True).reset_index().cusum.plot()
#data28.sort_values(by='cusum',ascending=True).reset_index()
plt.axhline(y=data28[data28.num<(data28.user_id.count()*0.2)]['count'].sum()/data28['count'].sum(),ls=":",c="orange")
plt.axvline(x=data28.user_id.count()*0.2,ls=":",c="green")
plt.ylim(0,1)
由图可见,绿色虚线表示20%用户所在位置,橙色虚线表示20%用户所对应的的销量占比,可见20%的用户贡献了接近50%的销量,趋近于二八定律
(3) 用户行为转化分析
1. 用户漏斗流失分析
漏斗分析方法是一种流程式的数据分析模型,它能够科学反映出用户不同行为状态以及其从起点到终点各阶段用户转化率情况的重要分析模型
data_liushi=data_user.pivot_table(index='behavior_type',values='user_id',aggfunc='count',margins=True).reset_index().rename(columns={'user_id':'amount'})
data_liushi=data_liushi.sort_values(by='amount',ascending=False)
data_liushi=data_liushi.set_index('behavior_type')
data_liushi['ratio']=data_liushi/data_liushi.loc['All']
data_liushi=data_liushi.reset_index()
data_liushi
求得各消费环节流失率,可以看出最后环节购买商品的人数仅占到了所有用户的1%,接下来使用pyecharts进行可视化
from pyecharts.charts import Funnel
from pyecharts import options as opts
list1=list(data_liushi.behavior_type)
list2=list(data_liushi.ratio*100)
list2=np.around(list2,0)
data=[(list1[i],list2[i]) for i in range(len(list1))]
funnel = (
Funnel()
.add(
series_name="",
data_pair=data,
gap=2,
label_opts=opts.LabelOpts(is_show=True, position="inside",formatter='{c}%')
)
.set_global_opts(title_opts=opts.TitleOpts(title="用户购买环节转化率"))
)
funnel.render_notebook()
2.复购率分析
复购,即用户有多次购买行为产生,如果一天内多次购买只算一次
复购率=有复购行为的用户数/有购买行为的用户总数
date_rebuy=data_user[data_user.behavior_type=='buy'].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))
--------------------------------------------------------------------------------
复购率: 0.4669
得知用户整体复购率为46.69%
sns.distplot(date_rebuy-1,kde=False)
plt.title('rebuy_user')
从图中可以发现,大部分用户复购次数都为0次,即大部分用户只产生了一次购买行为复购时间间隔次数情况分布
data_day_buy=data_user[data_user.behavior_type=='buy'].groupby(['user_id','date']).operation.count().reset_index()
data_user_buy4=data_day_buy.groupby('user_id').apply(lambda x:x.date.diff(1))
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')
从图中可以发现用户复购的概率随着消费时间间隔的增加而不断下降,在1-10天之内复购次数比较多,10天之后复购次数用户很少在进行复购,需要关注10天之内的用户复购行为,增加用户复购不同用户平均复购时间分析
sns.distplot(data_user_buy4.reset_index().dropna().groupby('user_id').date.mean())
不同用户平均复购时间呈现出正态分布,随着时间的增加整体呈现下降趋势,多数用户平均复购时间集中在1-5天的时间间隔内
3.留存率分析
留存率:n日后留存率 = 注册n日后还活跃的用户数/第一天新增用户数
我这里以2014年11月18日为基准,统计新增用户数,计算次日、3日、7日留存率
import datetime
first_user=data_user[data_user['date']==data_user.date.min()].groupby('user_id').date.count().reset_index()
first2_user=data_user[data_user['date']==data_user.date.min()+np.timedelta64(1,'D')].groupby('user_id').date.count().reset_index()
third_user=data_user[data_user['date']==data_user.date.min()+np.timedelta64(3,'D')].groupby('user_id').date.count().reset_index()
seven_user=data_user[data_user['date']==data_user.date.min()+np.timedelta64(7,'D')].groupby('user_id').date.count().reset_index()
first_user_count=first_user.user_id.count()
two_user_count=pd.merge(first_user,first2_user,how='left',on='user_id').dropna().user_id.count()
third_user_count=pd.merge(first_user,third_user,how='left',on='user_id').dropna().user_id.count()
seven_user_count=pd.merge(first_user,seven_user,how='left',on='user_id').dropna().user_id.count()
print('次日留存率:'+str(round(two_user_count/first_user_count,2)*100)+'%')
print('三日留存率:'+str(round(third_user_count/first_user_count,2)*100)+'%')
print('七日留存率:'+str(round(seven_user_count/first_user_count,2)*100)+'%')
---------------------------------------------------------------------------------
次日留存率:70.0%
三日留存率:65.0%
七日留存率:61.0%
可以看出用户留存率保持相对稳定,因数据局限性,无法准确定位第一天新增用户数,导致用户留存率表现过高。根据Facebook的40-20-10法则,次日留存、3日留存、七日留存能达到40%、20%、10%即为较佳水平。
(4)用户画像
1.用户生命周期
(data_user_buy4/np.timedelta64(1,'D')).hist()
plt.title('用户消费周期分布')
由图可见,绝大部分的用户都只消费过一次,消费周期为一天,消费周期在1~15天的用户较多,说明用户在1~15天内进行了复购
(data_user[data_user.behavior_type=='buy'].groupby('user_id')['date'].apply(lambda x: x.max()-x.min())/np.timedelta64(1,'D')).hist()
plt.title('用户生命周期分布')
(data_user[data_user.behavior_type=='buy'].groupby('user_id')['date'].apply(lambda x: x.max()-x.min())/np.timedelta64(1,'D')).describe()
由上图可知用户的生命周期受只购买一次的用户影响比较厉害,用户平均生命周期为6.36天,中位数仅0天,明显受到只购买一次用户的影响明显,接下来我们将只购买一次的用户刨除,再观察一下用户生命周期
从图中可以发现,随着时间的增加,用户的数量整体呈现出下降的趋势,在10~15天区间内呈现出一个反弹的上升趋势,在0~5天和10~15天区间段的用户较多
2.用户价值分析
RFM模型
RFM模型本质上是根据三个指标对用户进行分类,通过对用户价值的细分,进行差异化的精细运营,从而提升营运效率,深挖用户价值。R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低
用户分类表:
受数据集限制,本数据集没有用户成交金额数据,无法区分重要和一般客户。只能根据R、F两项进行简单分类,分别对价值用户、发展用户、保持用户、挽留用户这四类用户进行分析
rfm=data_user[data_user.behavior_type=='buy'].pivot_table(index='user_id',values=['date','operation'],aggfunc={'date':'max','operation':'sum'})
rfm=rfm.rename(columns={'date':'R','operation':'F'})
rfm['R'] = -(rfm.R - rfm.R.max()) / np.timedelta64(1,'D')
rfm=rfm [['R','F']].apply(lambda x:x-x.mean())
def rfm_func(x):
level = x.apply(lambda x:'1' if x>=0 else '0')
label = level.R +level.F
d = {
'11':'价值客户',
'10':'发展客户',
'01':'保持客户',
'00':'挽留客户',
}
result = d[label]
return result
rfm['label'] = rfm [['R','F']].apply(rfm_func,axis = 1)
rfm.loc[rfm.label == '价值客户','color'] = 'g'
rfm.loc[~(rfm.label == '价值客户'),'color'] = 'r'
rfm.plot.scatter('F','R',c=rfm.color)
rfm.groupby('label').R.count()
可以看到重要价值的用户比较少,但是却是一个比较优质的客户,所以可以有针对性地给这类客户提供 VIP服务,比如现在的淘宝VIP会员卡等等。
重要挽留客户占比也很大,对于这类客户,最近消费时间间隔较远,并且消费频次低,我们需要主动联系客户,调查清楚哪里出现了问题,比如通过短信,邮件,APP推送等唤醒客户。
对于重要发展客户,消费频次低,我们需要提升他的消费频率,可以通过优惠券叠加等活动来刺激消费。
而重要保持客户,消费时间间隔较远,但是消费频次高,有可能就是需要买东西的时候,就高频购买,不需要就不再购物,对于这类客户,需要主动联系,了解客户的需求,及时满足这类用户的需求。
六、结论与建议
1、流量分析:通过流量数据,我们可以发现日UV与PV在2014年11月18日至2014年12月18日期间呈现出小幅波动,在12月12日当天出现了明显的起伏,日UV与PV量均达到了平日的2~3倍,12月12日为天猫双12促销节,可以看出此次促销活动引流效果明显,吸引了极大一部分用户的购买商品的欲望。
根据分时流量数据,我们可以发现用户流量在每天19-22时之间达到峰值,该时段是淘宝用户活跃量最高时段。根据此发现,商家可以选择在晚上这个时间段内进行一些商品的促销活动,提高用户的购买转化率
2、用户消费行为分析在一个月内的时间里,大部分用户消费次数普遍都集中在10次以内,头部20%的用户贡献了接近50%的销量值,建议平台可以重点关注这20%的头部用户群体和其所购买的商品,找出其中受欢迎的商品,进行精准化定位营销,根据用户消费偏好,来选定不同营销活动的主题,并进行个性化的推荐
3、行为转化分析:点击量PV占总用户行为的比例为94%,添加转化率为3%,收藏转化率为2%,成交转化率为1%,可以发现在添加和收藏,以及用户最后购买阶段流失了很大一部分的潜在用户,说明在这两个环节里,存在明显的夹点。建议商家可以减少购买中不必要的交易流程,例如可以删除不必要的跳转页面、消费券的搭配系统可以默认选择为最大优惠、模糊购物车的按钮,凸显直接购买按钮,使用户可以直接购买商品等等举措,来减少交易过程中不必要的繁琐步骤,减少用户交易时间,使用户可以直接完成购买,增加购买率
一个月内用户复购率为46.69%,复购时间主要为1~10天,平均复购时间主要集中1~5天的时间区间内,用户留存率保持相对稳定,次日留存70%、3日留存65%、7日留存61%,因数据局限性,无法准确定第一天新增用户数,导致用户留存率表现过高。根据Facebook的40-20-10法则,次日留存、3日留存、七日留存能达到40%、20%、10%即为较佳水平。从整体数据集来看用户的复购率和留存率都表现较好,说明淘宝对用户的激活和留存处理是做的比较好的。在此基础上,如果想进一步提升留存率,增加付费率,可以通过一些用户喜好商品活动的APP消息推送,以及目前比较火的直播带货等,让用户可以通过不同渠道进入商品界面,并且延长用户在线时长,提高用户留存
4、用户画像
根据RFM模型,对成交用户进行了分类,并给出对应分类的运营建议。价值用户占比5%,其交易间隔短、交易频率高,是主要提供价值的用户,需要对该类用户提供VIP服务机制,提升用户的体验。比如加入成长值系统,到达一定等级,可以享受一些特权或优惠,提供专属客服服务,有问题可以得到更快速更准确的响应
发展用户占比36%,占比最多,其交易间隔较短,但交易频率低,需要通过促销活动等形式,挖掘用户需求,提高用户的消费频率。此类用户活跃度较高,但购买意愿欠佳,可以通过一些补贴优惠,培养用户的购买习惯
保持用户占比24%,其交易间隔长,但交易频率高,说明该用户拥有成为价值用户的潜力,需要构建与用户的联系,激活用户,可以根据用户信息画像,进行一些个性化的推荐,吸引用户注意力,提高用户的回购和复购率
挽留用户占比33%,其交易间隔长,交易频率低,说明用户存在流失可能,需要跟进获得用户反馈,比如调查问卷等形式,了解其不再购买商品的原因
python开发跟淘宝有关联微_使用Python分析淘宝用户行为相关推荐
- python开发跟淘宝有关联微_为什么微商和淘宝卖家不得不做公众号和小程序?
文/王爷 整理/叨叨 最近一个月,微信方面的动作比较多,尤其是有关微信小程序方面的动态,起码更新了4次.或许很多人还不知道什么是微信小程序,简单来说就是一个无需安装.即用即走的生长在微信上的一个应用. ...
- python开发跟淘宝有关联微_基于Python的Apriori和FP-growth关联分析算法分析淘宝用户购物关联度...
关联分析用于发现用户购买不同的商品之间存在关联和相关联系,比如A商品和B商品存在很强的相关性,常用于实体商店或在线电商的推荐系统,例如某一客户购买A商品,那么他很有可能会购买B商品,通过大量销售数据找 ...
- python开发跟淘宝有关联微_利用Python分析淘宝用户行为
目录 1.提出问题 2.理解数据 3.清理数据 4.建模分析 5.提出建议 1. 提出问题 每天淘宝都有大量的用户访问量,但最终完成交易的用户只是其中极少数: 为改善整个购物流程中的流失率,将通过研究 ...
- python开发跟淘宝有关联微_python - 爬取某淘宝店铺所有宝贝遇到的问题?
问 题 在爬一个淘宝店铺的信息时发现会通过jsonp去网站取回数据,url如下: https://tianziyujushangcheng.taobao.com/i/asynSearch.htm?ca ...
- python开发工程师面试题-超实用面试必看,Python工程师面试题
原标题:超实用面试必看,Python工程师面试题 面试是公司挑选职工的一种重要方法.它给公司和应招者提供了进行双向交流的机会,能使公司和应招者之间相互了解,从而双方都可更准确做出聘用与否.受聘与否的决 ...
- python开发工具排名-7款公认比较出色的Python IDE,你值得拥有!
Python作为一款比较"简洁"的编程语言,它拥有很多性价比高的性能,造就了它现在比较火热的局面,很多人都来学习Python.Python 的学习过程少不了 IDE 或者代码编辑器 ...
- vim配置python开发环境_GitHub - TTWShell/legolas-vim: Vim配置,为python、go开发者打造的IDE。...
legolas-vim 个人vim配置.支持python.go等自动提示,支持python.go的函数跳转(python支持虚拟环境). 最终效果图(函数列表的feature已移除,因为大项目会导致性 ...
- python开发基础戴歆第四章_第一阶段:Python开发基础 day04 课后练习
第一阶段:Python开发基础 day04 课后作业 1.简述python的五大数据类型的作用.定义方式.使用方法 数字类型 字符串类型 列表 字典 布尔型 答:数字类型分为整型(int)和浮点型(f ...
- python开发环境哪个好 博客园_我选用的Python开发环境
C#的开发, 首选工具自然是Visual Studio了, 你要不想花钱, Visual Studio Express 基本也够用了. 而Python的开发, 配置一个开发环境就是一个不小的问题, 首 ...
最新文章
- 简述ospf的工作原理_全方位了解OSPF的工作原理以及涉及到的重要技术
- C/Cpp / const 用法
- Oracle 绑定变量 详解 .
- Centos6.9部署ORTS5.0.22
- DEDECMS 5.6整合Discuz_X1.5的方法
- PHP中exec、system等函数调用linux命令问题
- 《从零开始走进FPGA》导读
- Selenium基础篇之5-第一个完整的自动化测试脚本
- 白话数字签名(1)——基本原理
- PE制作-004.UEFI和Legacy双启动之修改定制Win10PE
- 留几手是怎么火起来的?
- 计算机里pc是什么,什么是pc?pc是什么意思?
- Kafka工具--雅虎CMAK
- python中 r'', b'', u'', f'' 的含义
- 桃花院长:如何相亲找到对象结婚?你不知道的流程
- 渗透测试工程师面试题大全(三)
- 万字长文,图文并茂的给你讲清SpringBoot注解,自动装配原理!
- iPhone 13 哪便宜?拼多多百亿补贴!
- Java用普里姆算法(prim)解决修路最短路径问题
- 第一次 PCB 打样