栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

某电商网站用户行为分析【已脱敏】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

某电商网站用户行为分析【已脱敏】

用户行为分析

final_data为脱敏后的数据

final_data.head()
user_iditem_idbehavior_typeuser_geohashitem_categorytime
054007195796335351NaN39402014-11-24 16
11369526423378002941NaN48302014-11-22 12
21212551581089267881NaN19702014-11-22 08
3722560731440907861NaN40082014-12-09 20
46564593325002918519t4qqgn28252014-11-25 17
data = final_data[['user_id', 'item_id', 'behavior_type', 'time']]
data.head()
user_iditem_idbehavior_typetime
0540071957963353512014-11-24 16
113695264233780029412014-11-22 12
212125515810892678812014-11-22 08
37225607314409078612014-12-09 20
46564593325002918512014-11-25 17
data.shape
(12256906, 4)
data['date'] = data['time'].map(lambda x:x.split(' ')[0])
data['hour'] = data['time'].map(lambda x:x.split(' ')[1])
data.head()
C:worksoftwareAnaconda5.3.0libsite-packagesipykernel_launcher.py:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a Dataframe.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  """Entry point for launching an IPython kernel.
user_iditem_idbehavior_typetimedatehour
0540071957963353512014-11-24 162014-11-2416
113695264233780029412014-11-22 122014-11-2212
212125515810892678812014-11-22 082014-11-2208
37225607314409078612014-12-09 202014-12-0920
46564593325002918512014-11-25 172014-11-2517
data.drop(['time'], axis=1, inplace=True)
data.head()
user_iditem_idbehavior_typedatehour
0540071957963353512014-11-2416
113695264233780029412014-11-2212
212125515810892678812014-11-2208
37225607314409078612014-12-0920
46564593325002918512014-11-2517
pandas中的map()、apply()、applymap()函数的区别

map函数是Series对象的一个函数,Dataframe中没有map(),map()的功能是将一个自定义函数作用于Series对象的每个元素。apply()函数的功能是将一个自定义函数作用于Dataframe的行或者列applymap()函数的功能是将自定义函数作用于Dataframe的所有元素

总结:三者区别在于应用对象的不同

data.shape
(12256906, 5)
data.dtypes
user_id           int64
item_id           int64
behavior_type     int64
date             object
hour             object
dtype: object
# 转换时间类型
data['date'] = pd.to_datetime(data['date'])
data['hour'] = data['hour'].astype('int32')
data.dtypes
user_id                   int64
item_id                   int64
behavior_type             int64
date             datetime64[ns]
hour                      int32
dtype: object
#  看下用户数
data['user_id'].nunique()
10000
# 是否有缺失值
data.isnull().sum()
user_id          0
item_id          0
behavior_type    0
date             0
hour             0
dtype: int64
流量指标分析

流量指标:用户在该网站操作的每一个步骤记录的量化指标

指标有浏览量PV,独立访客数UV

针对每一位访客,还可以用以下的指标衡量访客的质量

    平均在线时间:平均每个UV访问页面的停留时间平均访问深度:平均每个UV的PV数量跳失率:浏览某个页面后就离开的访问次数/该页面的全部访问次数
# 总pv值是什么,一定时间周期内(本次)的pv数也就是全部的记录数
total_pv = data.shape[0]
total_pv
12256906
# 计算日均pv
pv = data.groupby(['date'])['user_id'].count().reset_index()
pv
dateuser_id
02014-11-18366701
12014-11-19358823
22014-11-20353429
32014-11-21333104
42014-11-22361355
52014-11-23382702
62014-11-24378342
72014-11-25370239
82014-11-26360896
92014-11-27371384
102014-11-28340638
112014-11-29364697
122014-11-30401620
132014-12-01394611
142014-12-02405216
152014-12-03411606
162014-12-04399952
172014-12-05361878
182014-12-06389610
192014-12-07399751
202014-12-08386667
212014-12-09398025
222014-12-10421910
232014-12-11488508
242014-12-12691712
252014-12-13407160
262014-12-14402541
272014-12-15398356
282014-12-16395085
292014-12-17384791
302014-12-18375597
pv = pv.rename(columns={'user_id':'pv'})
pv.head()
datepv
02014-11-18366701
12014-11-19358823
22014-11-20353429
32014-11-21333104
42014-11-22361355
 
#日均uv的计算
uv = data.groupby(['date'])['user_id'].apply(lambda x:x.drop_duplicates().count())
uv.head()
date
2014-11-18    6343
2014-11-19    6420
2014-11-20    6333
2014-11-21    6276
2014-11-22    6187
Name: user_id, dtype: int64
uv = uv.reset_index().rename(columns={'user_id':'uv'})
uv.head()
dateuv
02014-11-186343
12014-11-196420
22014-11-206333
32014-11-216276
42014-11-226187
# 画图
import matplotlib.pyplot as plt
font = {'family':'SimHei', 'size':'20'}
plt.rc('font', **font)

plt.figure(figsize=(20,5))
plt.xticks(rotation=30)

plt.plot(pv['date'], pv['pv'])

plt.title('日均pv')

plt.show()

# 日均uv
plt.figure(figsize=(20,5))
plt.xticks(rotation=30)

plt.plot(uv['date'], uv['uv'])

plt.title('日均uv')

# 保存图片
plt.savefig('日UV.png')

plt.show()

pv和uv都是在12月12日达到峰值在双十二前后会有较高波动,而平常的波动比较平稳 每一个时刻的PV和UV值

data.head()
user_iditem_idbehavior_typedatehour
0540071957963353512014-11-2416
113695264233780029412014-11-2212
212125515810892678812014-11-228
37225607314409078612014-12-0920
46564593325002918512014-11-2517
pv_hour = data.groupby(['hour'])['user_id'].count()
pv_hour.head()
hour
0    517404
1    267682
2    147090
3     98516
4     80487
Name: user_id, dtype: int64
pv_hour = pv_hour.reset_index().rename(columns={'user_id':'pv'})
pv_hour.head()
hourpv
00517404
11267682
22147090
3398516
4480487
uv_hour = data.groupby(['hour'])['user_id'].apply(lambda x:x.drop_duplicates().count())
uv_hour = uv_hour.reset_index().rename(columns={'user_id':"uv"})
uv_hour.head()
houruv
005786
113780
222532
331937
441765
plt.figure(figsize=(20,5))
plt.plot(uv_hour['hour'],uv_hour['uv'])

plt.xticks(rotation=30)
plt.title('每小时UV')

# 保存图片
plt.savefig('每小时UV.png')

plt.show()

plt.figure(figsize=(20,5))
plt.plot(pv_hour['hour'],pv_hour['pv'])

plt.xticks(rotation=30)
plt.title('每小时PV')

# 保存图片
plt.savefig('每小时PV.png')

plt.show()

# 每个UV的平均访问深度
# 全部的PV除以用户数
round(data.shape[0] / data['user_id'].nunique(), 2)
1225.69
# 每个UV的日均访问深度
round(data['user_id'].shape[0] / data['user_id'].nunique() / data['date'].nunique(), 2)
39.54
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739647.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号