背景
从阿里天池中获取淘宝用户行为数据UserBehavior.csv.zip,数据集下载解压后约9个G。以下是数据的5个特征,其中行为id包括浏览、加购、收藏、购买(pv、cart、fav、buy)
用户id | 商品id | 类目id | 行为id | 时间戳 |
---|---|---|---|---|
user_id | item_id | cate_id | act_id | time |
数据集约7千万条数据,选取了10万条数据进行了处理与分析。主要使用pandas,matplotlib。
分析目标
通过探索淘宝用户行为,发现可提升的部分,优化营销策略,最终提升GMV。
- 用户行为分析(pv、uv、cart、buy、dnu、复购率)
- 漏斗模型的各环节转化率(pv-cart&fav-buy)
- RFM用户价值模型(最近购买时间、购买次数)
- TOP商品分析(购买最多,点击最多等)
数据清洗
数据读取
导入numpy、pandas、matplotlib库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
数据地址、列名称准备
# 本地数据地址
path = '/Users/valkyrja/Documents/dataanalysis/taobao.csv'
# 准备列名称
col_na = ['user_id', 'item_id', 'cate_id', 'act_id', 'time']
data = pd.read_csv(path, header = None, names = col_na, encoding = 'utf8')
# 取前10万行数据
data = data.iloc[0:100000, :]
# 概览数据
data.info()
索引:0-99999,共10万行数据。
列数:共6列
空值:没有空值
类型:time为字符串类型,需要调整为datetime类型
数据预处理
# 调整时间戳格式
data['time'] = pd.to_datetime(data['time'], unit = 's')
# 查看是否有重复行,因为无空值所以不进行空值的查看
data.duplicated().sum()
data.duplicated().value_counts()
# 两种方法都可以,结果没有重复行,无须去重操作
# 新增日期、星期、小时列
data['date'] = pd.to_datetime(data['time'].dt.date)
data['week'] = data['time'].dt.dayofweek
data['hour'] = data['time'].dt.hour
# 概览处理后的数据
data.info()
时间、日期、星期、小时已经完成了调整。
数据分析
总体了解
days = data['date'].max() - data['date'].min()
print('数据横跨{}'.format(days))
print('起始日期{}'.format(data['date'].min()))
print('终止日期{}'.format(data['date'].max()))
大致为84天的数据,随着分析我发现这里其实是有问题的,往后看就知道了。
# 观察在这期间共有多少个用户、多少种商品、多少类目
user_item_cate = ['user_id', 'item_id', 'cate_id']
for i in user_item_cate:
r = data[i].nunique()
print('去重后共{} {}'.format(r, i))
总体观察:共983个用户,64467种商品,3128个商品类目。
# 对用户行为进行分类统计数量
p_c_f_b = data['act_id'].value_counts()
print(p_c_f_b)
# 简单作图观察
plt.bar(p_c_f_b.index, p_c_f_b.values, color = 'c')
for a,b in zip(p_c_f_b.index, p_c_f_b.values):
plt.text(a,b+0.1,'%.0f'%b,ha = 'center',va = 'bottom',fontsize=18)
每日行为数据统计
# 查看每日的pv
daily_data = data[data['act_id'] == 'pv'].groupby(by = ['date'], as_index = False).agg({
'act_id':'count'})