ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

电商用户行为分析

2021-06-06 18:31:28  阅读:140  来源: 互联网

标签:12 pv 行为 用户 user 电商 data id rfm


项目背景

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

理解数据

本数据集为某电商2014年11月18日至2014年12月18日的用户行为数据,共计6列字段,列字段分别是:

user_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
# 去除警告日志提醒的显示
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
#解决中文乱码等显示问题
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
%config InlineBackend.figure_format = 'svg'
data = pd.read_csv(r"D:\学习\数据分析项目\淘宝用户行为分析\tianchi_mobile_recommend_train_user\tianchi_mobile_recommend_train_user.csv")
data.head()
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

缺失值处理

data.isnull().sum()
user_id                0
item_id                0
behavior_type          0
user_geohash     8334824
item_category          0
time                   0
dtype: int64
data.fillna('miss',inplace=True)

标准化处理

#拆分数据集
import re
data['date'] = data['time'].map(lambda s: re.compile(' ').split(s)[0])
data['hour'] = data['time'].map(lambda s: re.compile(' ').split(s)[1])
data.head()
user_iditem_idbehavior_typeuser_geohashitem_categorytimedatehour
0980478372324315621miss42452014-12-06 022014-12-0602
1977261363835835901miss58942014-12-09 202014-12-0920
298607707647497121miss28832014-12-18 112014-12-1811
398662432320593836196nn52n65622014-12-06 102014-12-0610
4981459082902085201miss139262014-12-16 212014-12-1621
data.dtypes
user_id           int64
item_id           int64
behavior_type     int64
user_geohash     object
item_category     int64
time             object
date             object
hour             object
dtype: object
#将time列和date列转化为日期类数据类型,hour列应该是字符串数据类型。
#数据类型转化
data['date']=pd.to_datetime(data['date'])
data['time']=pd.to_datetime(data['time'])
data['hour']=data['hour'].astype('int64')
data.dtypes
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
data = data.sort_values(by='time',ascending=True)#排序处理
data = data.reset_index(drop=True)#建立索引
data
user_iditem_idbehavior_typeuser_geohashitem_categorytimedatehour
0734627153784852331miss91302014-11-18 00:00:002014-11-180
1360901372367481151miss105232014-11-18 00:00:002014-11-180
2404597331552181771miss85612014-11-18 00:00:002014-11-180
38141991498085241miss90532014-11-18 00:00:002014-11-180
411330998257308611miss37832014-11-18 00:00:002014-11-180
...........................
122569011326530971199460622miss60542014-12-18 23:00:002014-12-1823
122569021300825532961968191miss115322014-12-18 23:00:002014-12-1823
122569034359294535059483219rhhgph95412014-12-18 23:00:002014-12-1823
12256904128337991869939381954g37v37982014-12-18 23:00:002014-12-1823
1225690577522552692921911miss8892014-12-18 23:00:002014-12-1823

12256906 rows × 8 columns

用户行为分析

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

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

日访问量分析

#pv_daily记录每天用户操作次数,uv_daily记录每天不同的上线用户数量
pv_daily = data.groupby('date')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
uv_daily = data.groupby('date')['user_id'].apply(lambda x:x.drop_duplicates().count()).reset_index().rename(columns={'user_id':'uv'})
fig,axes=plt.subplots(2,1)
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')

plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zBAgcDfI-1622973943355)(output_20_0.svg)]

结果显示如上图所示,在双十二期间,pv和uv访问量达到峰值,并且可以发现,uv和pv两个访问量数值差距比较大。

小时访问量分析

#pv_hour记录每小时用户操作次数,uv_hour记录每小时不同的上线用户数量
pv_hour = data.groupby('hour')['user_id'].count().reset_index().rename(columns={'user_id':'pv'})
uv_hour = data.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')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X1j8lVeP-1622973943358)(output_24_0.svg)]

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

不同行为类型用户pv分析

pv_detail = data.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')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RqFfqC3G-1622973943359)(output_27_0.svg)]

图表显示:点击这一用户行为相比较于其他三类用户行为,pv访问量较高,同时四种用户行为的波动情况基本一致,因此晚上这一时间段不管哪一种用户行为,pv访问量都是最高的。

用户消费行为分析

用户购买次数情况分析

data_buy=data[data.behavior_type==4].groupby('user_id')['behavior_type'].count()
sns.displot(data_buy)
plt.title('daily_buy')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lyn1wHRu-1622973943361)(output_31_0.svg)]

data_buy=data[data.behavior_type==4].groupby('user_id')['behavior_type'].count().reset_index().rename(columns={'behavior_type':'buy_count'})
data_buy.describe()
user_idbuy_count
count8.886000e+038886.000000
mean7.152087e+0713.527459
std4.120719e+0719.698786
min4.913000e+031.000000
25%3.567731e+074.000000
50%7.238800e+078.000000
75%1.071945e+0817.000000
max1.424559e+08809.000000
bins = [1,10,20,50]
data_buy['buy_count_cut'] = pd.cut(data_buy['buy_count'],bins,labels = ['1-10','10-20','20-50'])
buy_count_cut = data_buy['buy_count_cut'].value_counts()
buy_count_cut
1-10     4472
10-20    1972
20-50    1417
Name: buy_count_cut, dtype: int64

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

付费率

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

data.groupby('date').apply(lambda x:x[x.behavior_type==4].count()/len(x.user_id.unique())).plot()
plt.title('付费率')
Text(0.5, 1.0, '付费率')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBCz9Ia0-1622973943363)(output_37_1.svg)]

每天活跃用户人群中,大概6%的用户具有消费行为,在双十二期间消费用户人数最多。

漏斗流失分析

浏览主页——点击商品——加入购物车&收藏——开始支付——完成购买

data_user = data.groupby(['behavior_type']).count()
data_user.head()
user_iditem_iduser_geohashitem_categorytimedatehour
behavior_type
111550581115505811155058111550581115505811155058111550581
2242556242556242556242556242556242556242556
3343564343564343564343564343564343564343564
4120205120205120205120205120205120205120205
pv_all=data['user_id'].count()
print(pv_all)
12256906

总浏览量:12256906
点击量:11550581
收藏量+加购量:242556+343564= 586120
购买量:120205

点击量-购买意向 流失率:94.93%

购买意向-购买量 流失率:79.49%

在本数据集中,缺少“下单”的用户行为数据,所以无法分析出用户下单到最终付款完后完成的流失率。
同时,因为收藏与加购两个用户行为并不存在上下级关系,所以合并为购买意向进行分析。

用户价值度RFM模型分析

RFM的含义:

R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。
from datetime import datetime
datenow=datetime(2014,12,20)
#每位用户最近购买时间
recent_buy_time=data[data.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'})
#每个用户消费频率
buy_freq=data[data.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()
user_idrecentfreqrecent_valuefreq_valuerfm
049134 days62121
161183 days12121
275287 days61111
375917 days211212
4126456 days82121
from datetime import datetime
datenow=datetime(2014,12,20)
#每位用户最近购买时间
recent_buy_time=data[data.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'})
#每个用户消费频率
buy_freq=data[data.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()
user_idrecentfreqrecent_valuefreq_valuerfm
049134 days62121
161183 days12121
275287 days61111
375917 days211212
4126456 days82121

因为本数据集没有提供消费金额,因此只能R和F进行用户价值分析。
通过RF用户价值分析,对于22用户,为重点用户需要关注;对于21这类忠诚度高而购买频率不足的,可以通过活动优惠券等方式提高用户的购买频率;对于12这类忠诚度不高而消费频率低的用户,需要关注他们的购物习性,多做推送,做精准化营销。

rfm.groupby(['rfm']).count()
user_idrecentfreqrecent_valuefreq_value
rfm
1127672767276727672767
1212191219121912191219
2117211721172117211721
2231793179317931793179
rfm_count = rfm['rfm'].value_counts()
plt.figure(figsize=(8,8))
plt.pie(rfm_count.values,labels=rfm_count.index,autopct='%.2f%%',
       wedgeprops={'linewidth':0.5,'edgecolor':'green'},
       textprops={'fontsize':30,'color':'#003371'}
       ) 
plt.title('RFM',size=30)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DjMuyIDt-1622973943364)(output_51_0.svg)]


标签:12,pv,行为,用户,user,电商,data,id,rfm
来源: https://blog.csdn.net/weixin_53029015/article/details/117633339

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有