数据来自于天池
淘宝用户行为数据
有兴趣的小伙伴可以去下载动手分析
一、项目背景
网购已经成为人们生活不可或缺的一部分,本项目分析淘宝APP的用户行为数据作为,从uv、pv指标、最终付费转化率、复购行为分析、漏斗流失分析进行统计分析,从而探索用户相关行为模式。因为数据进行脱敏处理,一些数据的价值不大了。
二、数据介绍
本数据集共有1225万条左右数据,数据为淘宝APP2014年11月18日至2014年12月18日的用户行为数据,共计6列字段,列字段分别是:
user_id:用户身份,脱敏
item_id:商品ID,脱敏
behavior_type:用户行为类型(包含点击、收藏、加购物车、支付四种行为,分别用数字1、2、3、4表示)
user_geohash:地理位置
item_category:品类ID(商品所属的品类)
time:用户行为发生的时间
三、数据读取与清洗
3.1读数据
import pandas as pd
import numpy as py
import matplotlib.pyplot as plt
import seaborn as sns
import os
os.chdir('F:\ctrip')
data=pd.read_csv(r'tianchi_mobile_recommend_train_user.csv',encoding='gbk')
3.2查看数据情况
data.shape #查看数据的行数、列数
(12256906, 6)
data.info() #查看数据的行数、列数、列的数据类型、文件大小
<class ‘pandas.core.frame.DataFrame’>
RangeIndex: 12256906 entries, 0 to 12256905
Data columns (total 6 columns):
user_id int64
item_id int64
behavior_type int64
user_geohash object
item_category int64
time object
dtypes: int64(4), object(2)
memory usage: 561.1+ MB
data.head(5) #前5行数据
user_id item_id behavior_type user_geohash item_category time
0 98047837 232431562 1 NaN 4245 2014-12-06 02
1 97726136 383583590 1 NaN 5894 2014-12-09 20
2 98607707 64749712 1 NaN 2883 2014-12-18 11
3 98662432 320593836 1 96nn52n 6562 2014-12-06 10
4 98145908 290208520 1 NaN 13926 2014-12-16 21
3.3数据清洗
a.统计缺失率
data.apply(lambda x: sum(x.isnull())/len(x))
user_geohash已经不具备分析意义
b.日期格式处理
time的格式需要处理成我们需要的格式
data['date']=data['time'].str[0:10]
data['hour']=data['time'].str[11:]
data['time']=pd.to_datetime(data['time'])
data['date']=pd.to_datetime(data['date'])
data['hour']=data['hour'].astype(int)
data
c.按日期排序
data.sort_values(by='time',ascending=True,inplace=True)
data.reset_index(drop=True,inplace=True) #重置前面的序列号
四、数据分析
统计日pv、uv
pv=data.groupby('date').count()['user_id']
uv=data.groupby('date')['user_id'].apply(lambda x: x.drop_duplicates().count())
pv_uv=pd.concat([pv,uv],axis=1).rename(columns={0:'pv',"user_id":'uv'}) #将pv、uv整合到一起
日pv、uv可视化
sns.set(style='darkgrid',context='notebook',font_scale=1.2)
plt.rcParams["font.sans-serif"]=["SimHei"] #显示中文标签,防止出现中文不显示的情况
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(16,11)) #画布大小
plt.subplot(2,1,1) #布局2行1列 第一个
plt.plot(pv,color='blue')
plt.title('每日访问量')
plt.subplot(2,1,2) #布局2行1列 第二个
plt.plot(uv,color='red')
plt.title('每日用户访问量')
plt.suptitle('pv、uv变化',fontsize=23)
plt.show()
可以明显发现的是2014-12-12pv、uv达到了最高峰
统计每小时pv、uv
data.groupby('hour').count()['user_id'].rename(columns={'user_id':'pv_hour'})
uv_hour=data.groupby('hour')['user_id'].apply(lambda x: x.drop_duplicates().count())
pv_uv_hour=pd.concat([pv_hour,uv_hour],axis=1).rename(columns={0:'pv_hour','user_id':'uv_hour'})
plt.figure(figsize=(16,9))
pv_uv_hour['pv_hour'].plot(color='blue',label='每小时访问量')
plt.ylabel('每小时访问量')
plt.legend(loc='best')
pv_uv_hour['uv_hour'].plot(color='red',label='每小时独立用户访问量',secondary_y=True)
plt.ylabel('每小时独立用户访问量')
plt.xticks(range(0,24),pv_uv_hour.index)
plt.legend(loc='best')
plt.grid(True)
plt.show()
可以发现0到4点,pv、uv下降显著,在10点左右达到高峰;uv在10点以后趋于平稳,pv在18点后迅速上涨,幅度达1倍。由此说明用户活跃的时间是在18-22点之间。
用户行为分析
pt=pd.pivot_table(columns='behavior_type',index='hour',data=data,values='user_id',aggfunc=np.size)
pt.rename(columns={'1':'点击','2':'收藏','3':'加购物车','4':'支付'},inplace=True)
pt
#绘图
plt.figure(figsize=(12,10))
sns.lineplot(data=pt.iloc[:,1:])
plt.show()
#绘图
plt.figure(figsize=(12,10))
sns.lineplot(data=pt.iloc[:,:])
plt.show()
会发现点击这一行为的用户相比较于其他三类用户行为,pv访问量较高,去除点击这行为后可以看出加入购物车的pv高于收藏pv,后续的漏斗分析需要注意
漏斗流失率分析
data_userbehavior_count=data.groupby('behavior_type').size()
pv_all=data['user_id'].count()
(pv_all-data_userbehavior_count[0])/pv_all#浏览到点击的流失率
(data_userbehavior_count[0]-data_userbehavior_count[2])/data_userbehavior_count[0]#点击到添加购物车的流失率
(data_userbehavior_count[2]-data_userbehavior_count[1])/data_userbehavior_count[2]#添加购物车到收藏的流失率
(data_userbehavior_count[1]-data_userbehavior_count[3])/data_userbehavior_count[1]#收藏到购买的流失率
复购率
#复购率=复购行为用户/付费总人数
data_again_buy=data[data.behavior_type=='4'].groupby('user_id')['date'].apply(lambda x:len(x.unique()))
data_again_buy[data_again_buy>=2].count()/data_again_buy.count()
可得复购率为87.17%