第一次接触天池用户行为数据集时,我对着100GB的原始数据倒吸一口凉气。这种规模的电商行为数据,包含了点击、加购、收藏、购买四种典型行为,时间跨度虽然只有9天(2017年11月25日至12月3日),但数据量足够考验分析师的抽样和预处理能力。
面对海量数据,我选择用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的比例基本一致。
把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';
我把分析维度划分为三大模块:
这里有个经验:电商数据一定要关注"最后一公里"转化。比如发现加购到购买的转化率明显低于收藏到购买,可能说明购物车功能需要优化。
对比Matplotlib和PyECharts后,我选择后者有三个原因:
安装时要注意版本兼容性:
bash复制pip install pyecharts==1.7.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))

图:促销日前后的流量对比
用PyECharts的Funnel组件制作转化漏斗时,发现从浏览到购买的总体转化率仅2.26%。但细分后发现:
这说明收藏夹的商品"含金量"更高,建议运营可以针对收藏商品做精准促销。
由于缺少消费金额数据,我用行为频次(F)和最近行为时间(R)做二维分析。发现两个有趣现象:
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
通过交叉分析发现几个爆款特征:
绘制商品销量分布图时,验证了经典的"二八定律":
python复制# 销量分布分析
sales_rank = df.groupby('item_id')['buy'].count()
sales_rank.describe(percentiles=[0.1,0.5,0.9])
处理时间类型数据时,我养成了三个好习惯:
TIMESTAMP类型存储时间(user_id, event_time)EXPLAIN检查执行计划遇到最头疼的问题是Jupyter Notebook中图表不显示,解决方法是在开头添加:
python复制from pyecharts.globals import CurrentConfig
CurrentConfig.NOTEBOOK_TYPE = 'jupyter'
通过这个项目,我总结了电商数据分析的"三看原则":
最后分享一个实用技巧:在分析转化漏斗时,不妨试试把时间维度加进去,比如计算"加购后24小时内的购买转化率",往往能发现更有价值的洞察。