1. 项目背景与数据准备
第一次接触天池用户行为数据集时,我对着100GB的原始数据倒吸一口凉气。这种规模的电商行为数据,包含了点击、加购、收藏、购买四种典型行为,时间跨度虽然只有9天(2017年11月25日至12月3日),但数据量足够考验分析师的抽样和预处理能力。
1.1 数据抽样策略
面对海量数据,我选择用Python的Pandas进行分层抽样。这里有个实用技巧:使用sample(frac=0.02)抽取2%数据时,一定要设置random_state保证可复现性。实际抽样代码比想象中简单:
python复制import pandas as pd
raw_data = pd.read_csv('UserBehavior.csv')
sample_data = raw_data.sample(frac=0.02, random_state=42)
抽样后数据量从1亿条缩减到200万条,我的16GB内存笔记本终于能跑动了。但要注意检查抽样后的数据分布——我对比了原始数据和样本中四种行为类型的比例,确保pv、buy、cart、fav的比例基本一致。
1.2 MySQL数据清洗实战
把CSV导入MySQL时遇到第一个坑:时间戳转换。原始数据使用Unix时间戳,需要用FROM_UNIXTIME()函数转换。但执行时发现有9条数据报错,排查发现是时间戳带负号:
sql复制-- 处理异常时间戳
UPDATE behavior_data
SET timestamp = ABS(timestamp)
WHERE timestamp LIKE '-%';
清洗阶段最耗时的部分是日期范围过滤。原始数据中存在1979年到2036年的异常记录,需要用BETWEEN语句精确限定分析周期:
sql复制DELETE FROM behavior_data
WHERE event_time NOT BETWEEN '2017-11-25' AND '2017-12-03';
2. 分析框架设计
2.1 指标体系搭建
我把分析维度划分为三大模块:
- 流量分析:PV/UV、时段分布
- 转化分析:漏斗模型(浏览->加购/收藏->购买)
- 用户价值:RFM模型简化版(行为频次F、最近行为R)
这里有个经验:电商数据一定要关注"最后一公里"转化。比如发现加购到购买的转化率明显低于收藏到购买,可能说明购物车功能需要优化。
2.2 可视化工具选型
对比Matplotlib和PyECharts后,我选择后者有三个原因:
- 交互式图表更适合演示
- 中文文档完善
- 支持链式调用写法更简洁
安装时要注意版本兼容性:
bash复制pip install pyecharts==1.7.1 # 指定稳定版本
3. 核心分析过程
3.1 流量波动洞察
通过每日PV/UV对比图,发现12月2-3日流量突增30%。进一步分析时段分布,发现这两个晚高峰比平日更陡峭:
python复制from pyecharts.charts import Line
line = (Line()
.add_xaxis(date_list)
.add_yaxis("PV", pv_data)
.add_yaxis("UV", uv_data))

图:促销日前后的流量对比
3.2 漏斗转化分析
用PyECharts的Funnel组件制作转化漏斗时,发现从浏览到购买的总体转化率仅2.26%。但细分后发现:
- 浏览->加购转化率:6.19%
- 浏览->收藏转化率:3.24%
- 收藏->购买转化率:69.7%
- 加购->购买转化率:36.5%
这说明收藏夹的商品"含金量"更高,建议运营可以针对收藏商品做精准促销。
3.3 用户分层研究
由于缺少消费金额数据,我用行为频次(F)和最近行为时间(R)做二维分析。发现两个有趣现象:
- 高质量用户(F≥4且R≥3)占比不足0.5%,但贡献了15%的购买量
- 新用户(R=4)的复购率比老用户高1.2个百分点
python复制# RF评分计算示例
def calculate_rf(row):
if row['last_buy_days'] <= 2: r_score = 4
elif row['last_buy_days'] <= 4: r_score = 3
else: r_score = 2
f_score = min(row['buy_count'], 5)
return r_score, f_score
4. 商品维度分析
4.1 商品热度榜单
通过交叉分析发现几个爆款特征:
- 同时进入浏览TOP10和购买TOP10的商品转化率超行业均值3倍
- 加购榜与购买榜重合度更高(40% vs 浏览榜的20%)
- 商品3031354表现突出,在三个榜单均位列前五
4.2 长尾效应验证
绘制商品销量分布图时,验证了经典的"二八定律":
- 头部5%商品贡献了65%销量
- 88.4%的商品销量仅为1件
python复制# 销量分布分析
sales_rank = df.groupby('item_id')['buy'].count()
sales_rank.describe(percentiles=[0.1,0.5,0.9])
5. 分析技巧总结
5.1 MySQL优化心得
处理时间类型数据时,我养成了三个好习惯:
- 始终使用
TIMESTAMP类型存储时间 - 建立复合索引
(user_id, event_time) - 复杂查询先用
EXPLAIN检查执行计划
5.2 PyECharts踩坑记录
遇到最头疼的问题是Jupyter Notebook中图表不显示,解决方法是在开头添加:
python复制from pyecharts.globals import CurrentConfig
CurrentConfig.NOTEBOOK_TYPE = 'jupyter'
5.3 分析思维培养
通过这个项目,我总结了电商数据分析的"三看原则":
- 看趋势:指标随时间的变化规律
- 看对比:维度间的差异(如新老用户)
- 看异常:偏离正常范围的数据点
最后分享一个实用技巧:在分析转化漏斗时,不妨试试把时间维度加进去,比如计算"加购后24小时内的购买转化率",往往能发现更有价值的洞察。