使用python实现电商用户行为分析
描述:分析电商平台用户行为数据(点击、购买、收藏等),使用Pandas和Matplotlib统计用户活跃时段、热销商品类别,并用Seaborn绘制行为趋势图。
工具:Pandas, NumPy, Matplotlib/Seaborn
数据集:可从Kaggle获取用户行为日志(如ecommerce-behavior-data)
以下是一个完整的电商用户行为分析Python实现方案,使用Pandas处理数据、Matplotlib/Seaborn进行可视化:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.ticker import FuncFormatter
# 设置中文显示(如果需要显示中文)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取数据(假设数据文件名为user_behavior.csv)
try:
# 从Kaggle下载的数据集可能包含这些列:timestamp, user_id, product_id, category, behavior_type
df = pd.read_csv('user_behavior.csv', parse_dates=['timestamp'])
# 若时间列为其他名称(如event_time),需调整列名
# df = pd.read_csv('user_behavior.csv', parse_dates=['event_time'],
# names=['timestamp', 'user_id', 'product_id', 'category', 'behavior_type'])
except FileNotFoundError:
print("文件未找到!请从Kaggle下载数据集:https://www.kaggle.com/datasets/mkechinov/ecommerce-behavior-data")
exit()
# 1. 数据处理
# 添加时间字段
df['hour'] = df['timestamp'].dt.hour
df['date'] = df['timestamp'].dt.date
df['day_name'] = df['timestamp'].dt.day_name()
# 2. 用户活跃时段分析
hourly_activity = df.groupby('hour')['user_id'].count().reset_index(name='count')
# 3. 热销商品类别分析(假设'purchase'表示购买)
purchase_data = df[df['behavior_type'] == 'purchase']
top_categories = purchase_data.groupby('category')['product_id'] \
.count() \
.sort_values(ascending=False) \
.head(10) \
.reset_index(name='purchases')
# 4. 行为趋势分析
daily_trend = df.groupby('date')['behavior_type'] \
.value_counts() \
.unstack() \
.fillna(0)
# 5. 可视化
fig, axes = plt.subplots(3, 1, figsize=(15, 18))
# 用户活跃时段(小时)
sns.barplot(x='hour', y='count', data=hourly_activity,
palette='Blues_d', ax=axes[0])
axes[0].set_title('每小时用户活跃度')
axes[0].set_xlabel('小时')
axes[0].set_ylabel('行为计数')
# 热销商品类别
sns.barplot(x='purchases', y='category', data=top_categories,
palette='viridis', ax=axes[1])
axes[1].set_title('热门商品类别Top10')
axes[1].set_xlabel('购买次数')
axes[1].set_ylabel('商品类别')
# 行为趋势(按天)
sns.lineplot(data=daily_trend, dashes=False, ax=axes[2])
axes[2].set_title('用户行为趋势(每日)')
axes[2].set_xlabel('日期')
axes[2].set_ylabel('行为计数')
axes[2].legend(title='行为类型')
axes[2].xaxis.set_major_locator(plt.MaxNLocator(10))
plt.tight_layout()
plt.savefig('ecommerce_analysis.png', dpi=300)
plt.show()
# 6. 附加分析:按星期分析用户行为
weekday_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekday_activity = df.groupby(['day_name', 'behavior_type'])['user_id'] \
.count() \
.reset_index(name='count') \
.sort_values('count', ascending=False)
plt.figure(figsize=(12, 6))
sns.barplot(x='day_name', y='count', hue='behavior_type',
data=weekday_activity, order=weekday_order,
palette='Set2')
plt.title('每周用户行为分布')
plt.xlabel('星期')
plt.ylabel('行为计数')
plt.tight_layout()
plt.savefig('weekly_behavior.png', dpi=300)
使用说明:
1.数据集准备:
从Kaggle下载电商行为数据(如eCommerce Behavior Data)
确保包含以下列(列名可能需要调整):
timestamp
:行为时间戳user_id
:用户IDproduct_id
:商品IDcategory
:商品类别behavior_type
:行为类型(点击、购买、收藏等)
2.安装依赖:
pip install pandas numpy matplotlib seaborn
3.关键分析点:
- 用户活跃时段:展示一天中24小时内的用户行为分布
- 热销商品类别:统计购买次数最多的前10个商品类别
- 行为趋势:展示不同行为类型(点击/购买/收藏)随时间变化趋势
- 周行为分析:展示不同星期的用户行为分布(单独图表)
4.结果输出:
- 生成三合一图表:活跃时段、热销类别、行为趋势
- 单独输出每周行为分析图
- 图像保存为高清PNG格式(600dpi)
数据分析扩展建议:
1.用户分群分析:
# 区分新老用户(示例)
df['user_type'] = np.where(df.groupby('user_id')['timestamp'].transform('min') == df['timestamp'], '新用户', '老用户')
2.转化漏斗分析:
# 计算行为转化率
funnel = df.groupby('behavior_type')['user_id'].nunique().reset_index()
funnel['ratio'] = funnel['user_id'] / funnel['user_id'].max()
3.RFM模型(最近购买、购买频率、购买金额):
# 需有订单金额数据
rfm = purchase_data.groupby('user_id').agg({
'timestamp': 'max', # 最近购买时间
'product_id': 'count', # 购买次数
'price': 'sum' # 总金额(假设有价格列)
})
4.协同过滤推荐:
# 使用surprise库实现
from surprise import Dataset, Reader, SVD
# 创建用户-商品评分矩阵(基于行为次数)
interactions = df.groupby(['user_id', 'product_id']).size().reset_index(name='interactions')
这些扩展分析可以帮助构建个性化推荐系统和用户画像系统。