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

一、项目背景

本数据报告以淘宝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:用户行为发生的时间

需要完整代码,可以私聊

五、数据清洗

# coding:utf-8
import pandas as pd
import numpy as py
import matplotlib.pyplot as plt
import seaborn as sns
import re
#设置列数据全显示
pd.set_option('display.max_columns', None)
data_user = pd.read_csv(r'.\tianchi_mobile_recommend_train_user.csv')
missingTotal = data_user.isnull().sum()
missingExist = missingTotal[missingTotal > 0]
missingExist = missingExist.sort_values(ascending=False)
print(missingExist)
image.png
print(missingTotal)
image.png

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

data_user.head()
image.png
# 拆分数据集
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()
image.png
#查看data_user数据集数据类型:
data_user.dtypes
image.png
#发现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
image.png
#异常值处理

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

data_user = data_user.reset_index(drop=True)

data_user.describe()
image.png

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

六、用户行为分析

(1)pv和uv分析

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

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

1)日访问量分析

# 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')
image.png

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

#小时访问量分析#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')
image.png

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

#不同行为类型用户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('uv_different_behavior_type')
image.png

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

七、用户消费行为分析

(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')
image.png

图表显示:淘宝用户消费次数普遍在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'})

data_use_buy1.groupby('date').apply(lambda x:x.total.sum()/x.total.count()).plot()

plt.title('daily_ARPPU')
image.png

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

(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')
image.png

(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')
image.png

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

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

sns.distplot(data_user_buy3)

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

八、复购情况分析

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

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

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

data_day_buy=data_user[data_user.behavior_type==4].groupby(['user_id','date']).o
peration.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')
image.png

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

九、漏斗流失分析

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

behavior_data = data_user.groupby('behavior_type')['user_id'].count().reset_index().rename(columns = {'user_id':'pv'})
behavior_data.head()
image.png
click_to_collect_and_cart=(behavior_data.at[1, 'pv'] + behavior_data.at[2, 'pv']) / behavior_data.at[0, 'pv']
print("点击到收藏/购物车转化率: ",click_to_collect_and_cart)
collect_and_cart_to_buy=behavior_data.at[3, 'pv']/(behavior_data.at[1, 'pv'] + behavior_data.at[2, 'pv'])
print("收藏/购物车到购买转化率: ",collect_and_cart_to_buy)
image.png

希望本文的内容对大家的学习或者工作能带来一定的帮助,每天进步一点点,加油。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351