一、项目概况
本项目以淘宝电商用户真实行为数据为数据源,运用python 进行数据预处理,运用MySQL并利用AARRR模型和RFM模型对其展开数据分析,利用Tableau制作可视化图像,最后给出利用Tableau制作的一张仪表盘。
1.1数据来源
虽然现在不能下载,但是可以申请获得下载链接,我申请了一天就通过了。
1.2数据集介绍
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、收藏)。数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
其中行为类型有四种
1.3分析思路
二、 数据清洗
2.1选择数据子集
在python中导入需要的库
import pandas as pd
from datetime import datetime,date
读取数据,并重命名列为['user_id','item_id','category_id', 'behaviortype','timestamp'] ,由于原始数据集太大,因此本次分析只选取了500万条数据。
tb = pd.read_csv('D:/文档/数据分析/淘宝电商用户推荐/UserBehavior.csv',iterator=True,header=None,names=['user_id','item_id','category_id',
'behaviortype','timestamp'])
try:
tb=tb.get_chunk(5000000)
except StopIteration:
print("Iteration is stopped.")
# 查看数据信息
tb.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5000000 entries, 0 to 4999999
Data columns (total 5 columns):
user_id int64
item_id int64
category_id int64
behaviortype object
timestamp int64
dtypes: int64(4), object(1)
memory usage: 190.7+ MB
tb.describe()
查看数据可知没有缺失值
2.2重复值处理
# 查看有多少个重复值
tb.duplicated().sum()
# 删除重复值
tb.drop_duplicates(inplace=True)
2.3时间戳数据类型转换
# 数据类型转换
tb["date"] = tb["timestamp"].apply(lambda x: datetime.fromtimestamp(x).date())
tb["time"] = tb["timestamp"].apply(lambda x: datetime.fromtimestamp(x).strftime('%H'))
tb.head()
data=tb.drop('timestamp',axis=1)
2.4异常值处理
根据数据集介绍,数据采集时间应该在2017年11月25日至2017年12月3日之间,检查是否存在超出时间范围的数据,作为异常值,并删除数据中存在的空值。
# 异常值处理
data['date'].value_counts()
data['date'] = data['date'][(data['date']>=date(2017,11,25)) & (data['date']<=date(2017,12,3))]
# 删除有空行的数据
# how='any'表示一行中只要有一个空值就删除这一行
data=data.dropna(axis=0,how='any')
data.shape
2.5保存清洗后的数据
data.to_csv('D:/文档/数据分析/淘宝电商用户推荐/tb.csv')
三、数据分析
接下来利用mysql进行数据分析,利用tableau进行数据可视化
3.1各字段的统计数据
# 字段统计分析
select count(distinct (user_id))用户数,count(distinct(item_id))商品数,count(distinct(category_id))种类数,
count(distinct(behaviortype))行为数 from tb
可以看到该数据子集包括48984个用户,1080286个商品,7352种商品数,用户的行为有点击浏览,收藏,加购和购买这四种行为。
3.2基于AARRR模型的整体情况分析
(1)用户获取(Acquisition)
模型中的用户获取一般考察渠道曝光率、渠道转换率、日新增用户数DNU、获客成本CAC等指标。由于文本字数限制,本篇分析主要考察日新增用户数DNU。
# 日新增用户数DNU
select a.date, count(b.user_id) 日新增用户数
from (select distinct date from tb) a
left join (select user_id, min(date) first_date from tb group by user_id) b
on
a.date=b.first_date
group by a.date
order by a.date
由下图可见,仅在11月25日-30日这六天有较多新增用户,且新增用户数在26日开始出现急剧下跌,虽然在25日当日的新增用户中有很大一部分是此前的活跃用户,而非当日新增,但在12月1日起新增用户数下降为个位数。
(2)用户激活(Activation)
首先考察PV(页面浏览量或者点击量),UV(独立访客数),人均浏览次数(PV/UV)
#计算PV,UV,人均浏览次数
select count(distinct user_id) UV,(select count(user_id) from tb where behaviortype='pv') PV,
(select count(user_id) from tb where behaviortype='pv')/count(distinct user_id) 人均浏览次数
from tb
这九天中独立访客数为48984,页面浏览量为4472600,人均浏览次数为91.3074。