实战|淘宝用户行为分析案例

一、项目背景

本数据报告以淘宝app平台为数据集,通过行业的指标对淘宝用户行为进行分析,从而探索淘宝用户的行为模式,具体指标包括:日PV和日UV分析,付费率分析,复购行为分析,漏斗流失分析和用户价值RFM分析。

二、数据来源

https://tianchi.aliyun.com/dataset/dataDetail?dataId=46&userId=1

三、提出问题

1.日PV有多少

2.日UV有多少

3.付费率情况如何

4.复购率是多少

5漏斗流失情况如何

6.用户价值情况

四、理解数据

本数据集共有104万条左右数据,数据为淘宝APP2014年11月18日至2014年12月18日的用户行为数据,共计6列字段,列字段分别是:

user_id:用户身份,脱敏

item_id:商品ID,脱敏

behavior_type:用户行为类型(包含点击、收藏、加购物车、支付四种行为,分别用数字1、2、3、4表示)

user_geohash:地理位置

item_category:品类ID(商品所属的品类)

time:用户行为发生的时间

五、数据清洗

In [1]:

import pandas as pd

import numpy as py

%matplotlib inline

import matplotlib.pyplot as plt

import seaborn as sns

data_user = pd.read_csv('你的数据集位置')

In [2]:

#缺失值处理

missingTotal = data_user.isnull().sum()

missingExist = missingTotal[missingTotal>0]

missingExist = missingExist.sort_values(ascending=False)

In [3]:

print(missingExist)
user_geohash    8334824
dtype: int64

In [4]:

print(missingTotal)
user_id                0
item_id                0
behavior_type          0
user_geohash     8334824
item_category          0
time                   0
dtype: int64

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

In [5]:

data_user.head()

Out[5]:


user_iditem_idbehavior_typeuser_geohashitem_categorytime
0980478372324315621NaN42452014-12-06 02
1977261363835835901NaN58942014-12-09 20
298607707647497121NaN28832014-12-18 11
398662432320593836196nn52n65622014-12-06 10
4981459082902085201NaN139262014-12-16 21

In [6]:

#一致化处理

import re

#拆分数据集

data_user['date'] = data_user['time'].map(lambda s: re.compile(' ').split(s)[0])

In [7]:

data_user['hour']=data_user['time'].map(lambda s:re.compile(' ').split(s)[1])

data_user.head()

Out[7]:


user_iditem_idbehavior_typeuser_geohashitem_categorytimedatehour
0980478372324315621NaN42452014-12-06 022014-12-0602
1977261363835835901NaN58942014-12-09 202014-12-0920
298607707647497121NaN28832014-12-18 112014-12-1811
398662432320593836196nn52n65622014-12-06 102014-12-0610
4981459082902085201NaN139262014-12-16 212014-12-1621

In [8]:

#查看data_user数据集数据类型:

data_user.dtypes

Out[8]:

user_id           int64
item_id           int64
behavior_type     int64
user_geohash     object
item_category     int64
time             object
date             object
hour             object
dtype: object

In [9]:

#发现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

Out[9]:

user_id                   int64
item_id                   int64
behavior_type             int64
user_geohash             object
item_category             int64
time             datetime64[ns]
date             datetime64[ns]
hour                      int64
dtype: object

In [10]:

#异常值处理

data_user = data_user.sort_values(by='time',ascending=True)

data_user = data_user.reset_index(drop=True)

data_user.describe()

Out[10]:


user_iditem_idbehavior_typeitem_categoryhour
count1.225691e+071.225691e+071.225691e+071.225691e+071.225691e+07
mean7.170732e+072.023084e+081.105271e+006.846162e+031.481799e+01
std4.122920e+071.167397e+084.572662e-013.809922e+036.474778e+00
min4.913000e+036.400000e+011.000000e+002.000000e+000.000000e+00
25%3.584965e+071.014130e+081.000000e+003.721000e+031.000000e+01
50%7.292804e+072.021359e+081.000000e+006.209000e+031.600000e+01
75%1.073774e+083.035405e+081.000000e+001.029000e+042.000000e+01
max1.424559e+084.045625e+084.000000e+001.408000e+042.300000e+01

通过观察数据集的四分位数,总数,平均值,方差等,发现数据集并无异常值存在。

六、用户行为分析

(1)pv和uv分析

PV(访问量):即Page View, 具体是指网站的是页面浏览量或者点击量,页面被刷新一次就计算一次。

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

1)日访问量分析

In [11]:

#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')

Out[11]:

Text(0.5, 1.0, 'pv_daily')

9b7e97a6900a45b5f9ae10f70bf419ed.png

结果显示如上图所示,在双十二期间,pv和uv访问量达到峰值,并且可以发现,uv和pv两个访问量数值差距比较大,同时,因为数据集总人数大约是10000人左右,因此,通过nv值可以分析出双十二期间淘宝用户的日活跃大概是45%浮动。

In [12]:

#小时访问量分析#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])

axes[0].set_title('pv_hour')

axes[1].set_title('uv_hour')

Out[12]:

Text(0.5, 1.0, 'uv_hour')

2bfae21b126994d70657a4d7487e9416.png

图表显示:pv和uv在凌晨0-5点期间波动情况相同,都呈下降趋势,访问量都比较小,同时在晚上18:00左右,pv波动情况比较剧烈,相比来看uv不太明显,因此晚上18:00以后是淘宝用户访问app的活跃时间段。

In [13]:

#不同行为类型用户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')

Out[13]:

Text(0.5, 1.0, 'pv_different_behavior_type_except1')

2a1bee4212440af83a90124adbdeed52.png

有图表显示:点击这一用户行为相比较于其他三类用户行为,pv访问量较高,同时四种用户行为的波动情况基本一致,因此晚上这一时间段不管哪一种用户行为,pv访问量都是最高的。从图2可以看出,加入购物车这一用户行为的pv总量高于收藏的总量,因此在后续漏斗流失分析中,用户类型3应该在2之前分析。

七、用户消费行为分析

In [14]:

#(1)用户购买次数情况分析

data_user_buy=data_user[data_user.behavior_type==4].groupby('user_id')['behavior_type'].count()

sns.distplot(data_user_buy,kde=False)plt.title('daily_user_buy')

Out[14]:

Text(0.5, 1.0, 'daily_user_buy')

c754fad4c3c90933b9a2602cb4cd7543.png

图表显示:淘宝用户消费次数普遍在10次以内,因此需要重点关注购买次数在10次以上的消费者用户群体。

(2)日ARPPU

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

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

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

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

In [21]:

data_use_buy1=data_user[data_user.behavior_type==4].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')

Out[21]:

Text(0.5, 1.0, 'daily_ARPPU')

b3cc6d1a5903ed1090039216190a9ec4.png

图表显示:平均每天消费次数在1-2次之间波动,双十二期间消费次数达到最高值。

In [23]:

#(3)日ARPU#ARPU(Average Revenue Per User) :平均每用户收入,可通过 总收入/AU 计算得出。它可以衡量产品的盈利能力和发展活力。#活跃用户数平均消费次数=消费总次数/活跃用户人数(每天有操作行为的为活跃)

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')

Out[23]:

Text(0.5, 1.0, 'daily_ARPU')

1116eb70cf85b1c301b5375d0a3718a6.png

In [24]:

#(4)付费率#付费率=消费人数/活跃用户人数

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

plt.title('daily_afford_rate')

Out[24]:

Text(0.5, 1.0, 'daily_afford_rate')

0114f397e7174f96a69c38c099ae8ca3.png

In [25]:

#(5)同一时间段用户消费次数分布

data_user_buy3=data_user[data_user.behavior_type==4].groupby(['user_id','date','hour'])['operation'].sum().rename('buy_count')

sns.distplot(data_user_buy3)

print('大多数用户消费:{}次'.format(data_user_buy3.mode()[0]))

大多数用户消费:1次

10ff0a212fe1987aa2ea1f3879f53703.png

八、复购情况分析

In [26]:

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

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))

复购率: 0.8717

In [29]:

#所有复购时间间隔消费次数分布

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')

Out[29]:

Text(0, 0.5, 'gap_count')

c08c172eb868dc7422319b79df949ae8.png

多数用户复购率为0.4693,消费次数随着消费时间间隔的增加而不断下降,在1-10天之内复购次数比较多,10天之后复购次数淘宝用户很少在进行复购,因此需要重视10天之内的淘宝用户复购行为,增加用户复购。不同用户平均复购时间呈正态分布,但是总体来看,呈现逐渐下降趋势。多数淘宝用户平均复购时间集中在1-5天时间间隔内。

九、漏斗流失分析

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

In [30]:

data_user_count=data_user.groupby(['behavior_type']).count()data_user_count.head()

pv_all=data_user['user_id'].count()

print(pv_all)

12256906

In [31]:

#十、用户行为与商品种类关系分析#不同用户行为类别的转化率

data_category=data_user[data_user.behavior_type!=2].groupby(['item_category','behavior_type']).operation.count().unstack(1).rename(columns={1:'点击量',3:'加入购物车量',4:'购买量'}).fillna(0)

data_category.head()

Out[31]:

behavior_type点击量加入购物车量购买量
item_category


23.00.00.0
33.00.00.0
41.00.00.0
610.00.00.0
8976.04.04.0
  • 7
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,你的问题是关于单因素方差分析案例实战和详解。单因素方差分析是一种用于比较两个或多个组之间均值差异的统计方法。下面是一个关于单因素方差分析案例实战和详解。 案例实战: 假设你是一家公司的销售经理,想要确定不同销售员的销售额是否存在显著差异。你选取了5个销售员,记录了他们在过去3个月中的销售额。下面是数据: 销售员1:20,000,21,000,22,000 销售员2:22,000,23,000,24,000 销售员3:22,000,22,000,22,000 销售员4:18,000,19,000,20,000 销售员5:19,000,20,000,21,000 现在你需要进行单因素方差分析来比较这5个销售员的销售额是否存在显著差异。 详解: 第一步是计算每个销售员的平均销售额和总销售额: 销售员1:(20,000+21,000+22,000)/3=21,000,总销售额=63,000 销售员2:(22,000+23,000+24,000)/3=23,000,总销售额=69,000 销售员3:(22,000+22,000+22,000)/3=22,000,总销售额=66,000 销售员4:(18,000+19,000+20,000)/3=19,000,总销售额=57,000 销售员5:(19,000+20,000+21,000)/3=20,000,总销售额=60,000 第二步是计算总体平均销售额和总体平方和: 总体平均销售额=(63,000+69,000+66,000+57,000+60,000)/5=63,000 总体平方和=Σ(xi-xbar)²=141,000,000 第三步是计算组内平方和和组间平方和: 组内平方和=Σ(xi-xi_bar)²=32,000,000 组间平方和=Σ(ni(x_i_bar-x_bar)²)=109,000,000 其中ni为每个组的样本数。 第四步是计算均方: 均方组内=组内平方和/(总样本数-组数)=32,000,000/(15-5)=3,200,000 均方组间=组间平方和/(组数-1)=109,000,000/4=27,250,000 第五步是计算F值: F=均方组间/均方组内=27,250,000/3,200,000=8.52 第六步是查找F分布表并确定显著性水平。 在显著性水平为0.05和4个自由度的情况下,从F分布表可以得到临界值为3.10。 因为F值大于临界值,所以我们可以拒绝原假设,即认为销售员之间的销售额存在显著差异。 综上所述,通过单因素方差分析,我们可以得出结论:销售员之间的销售额存在显著差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值