一、数据来源及说明
来源:天池数据—淘宝用户的行为数据淘宝用户数据集
column | description |
---|---|
user_id | 用户身份,脱敏 |
item_id | 商品id,脱敏 |
behavior_type | 用户行为类型(包括点击,收藏,加购物车和付款四种行为,相应的值分别为1,2,3和4。) |
user_geohash | 地理位置 |
item_category | 品类ID(商品所属的品类) |
time | 用户行为发生的时间 |
二、提出问题
- 每天的浏览量(PV)
- 每天的访客量(UV)
- 付费率和复购率如何
- 用户行为的转化漏斗
- 从时间的维度分析用户行为
- 利用RFM模型对用户进行分层分析
三、数据清洗
(1)导入数据
import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import re
data_user=pd.read_csv(r'C:\Users\Administrator\Desktop\tianchi_mobile_recommend_train_user.csv')
(2)缺失值处理
missingTotal=data_user.isnull().sum()
missingExist=missingTotal[missingTotal>0]
missingExist=missingExist.sort_values(ascending=False)
print(missingTotal)
输出结果
user_id 0
item_id 0
behavior_type 0
user_geohash 8334824
item_category 0
time 0
dtype: int64
存在缺失值的是User_geohash,有8334824条,不能删除缺失值,因为地理信息在数据集收集过程中做过加密转换,因此对数据集不做处理。
(3)一致化处理
#拆分数据集
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()
将time类数据中的年月日与小时分开,方便后面处理。
#查看数据类型
data_user.dtypes
将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
(4)异常值处理
#异常值处理
data_user=data_user.sort_values(by='time',ascending=True)#排序处理
data_user=data_user.reset_index(drop=True)#建立索引
data_user.describe()
四、pv和uv
pv(访问量):即Page View, 具体是指网站的是页面浏览量或者点击量,页面被刷新一次就计算一次。
uv(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。
(1)日pv和日uv
# 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