人工智能之数据分析 Pandas
第十一章 项目实践
文章目录
- [人工智能之数据分析 Pandas](#人工智能之数据分析 Pandas)
- 前言
- [🎯 项目名称:电商平台用户行为与销售分析(模拟数据)](#🎯 项目名称:电商平台用户行为与销售分析(模拟数据))
- [📁 一、数据说明(模拟)](#📁 一、数据说明(模拟))
- [1. `users.csv` --- 用户基本信息](#1.
users.csv— 用户基本信息)- [2. `orders.csv` --- 订单记录](#2.
orders.csv— 订单记录)- [🧪 二、完整代码实现(含注释)](#🧪 二、完整代码实现(含注释))
- [📊 三、关键 Pandas 技能点回顾](#📊 三、关键 Pandas 技能点回顾)
- [🧩 四、可扩展方向(进阶练习)](#🧩 四、可扩展方向(进阶练习))
- [📦 五、项目文件结构建议](#📦 五、项目文件结构建议)
- [✅ 六、项目价值](#✅ 六、项目价值)
- 后续
- 资料关注
前言
本文通过一个完整的 Pandas 项目实践案例 ,从 数据加载 → 清洗 → 探索 → 分析 → 可视化 → 输出结论,全流程掌握 Pandas 在真实场景中的应用。
🎯 项目名称:电商平台用户行为与销售分析(模拟数据)
目标:
- 理解用户购买行为
- 识别高价值用户
- 分析产品销售趋势
- 提出运营建议
📁 一、数据说明(模拟)
我们有两张表:
1. users.csv --- 用户基本信息
| user_id | gender | age | city |
|---|---|---|---|
| U001 | 男 | 28 | 北京 |
| U002 | 女 | 35 | 上海 |
2. orders.csv --- 订单记录
| order_id | user_id | product | category | price | quantity | order_date |
|---|---|---|---|---|---|---|
| O001 | U001 | 手机 | 电子产品 | 5999 | 1 | 2024-03-15 |
| O002 | U002 | 连衣裙 | 服装 | 299 | 2 | 2024-03-16 |
💡 数据量:约 10,000 行订单 + 2,000 用户(适合 Pandas 处理)
🧪 二、完整代码实现(含注释)
python
# ==============================
# 1. 导入库 & 设置
# ==============================
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 中文支持 & 图表样式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_style("whitegrid")
# ==============================
# 2. 数据加载
# ==============================
users = pd.read_csv('users.csv')
orders = pd.read_csv('orders.csv')
print("用户表形状:", users.shape)
print("订单表形状:", orders.shape)
# ==============================
# 3. 数据清洗
# ==============================
# --- 3.1 检查缺失值 ---
print("\n【缺失值检查】")
print("用户表:\n", users.isnull().sum())
print("订单表:\n", orders.isnull().sum())
# 假设少量年龄缺失,用中位数填充
users['age'].fillna(users['age'].median(), inplace=True)
# --- 3.2 类型转换 ---
orders['order_date'] = pd.to_datetime(orders['order_date'])
users['age'] = users['age'].astype('Int16') # 支持缺失的整型
# --- 3.3 异常值处理 ---
# 过滤价格 <= 0 或数量 <= 0 的订单
orders = orders[(orders['price'] > 0) & (orders['quantity'] > 0)]
# --- 3.4 合并数据 ---
df = pd.merge(orders, users, on='user_id', how='left')
df['total_amount'] = df['price'] * df['quantity'] # 新增总金额
print("\n合并后数据形状:", df.shape)
print(df.head())
# ==============================
# 4. 探索性数据分析(EDA)
# ==============================
# --- 4.1 整体销售概览 ---
total_revenue = df['total_amount'].sum()
total_orders = df['order_id'].nunique()
total_users = df['user_id'].nunique()
print(f"\n【销售概览】")
print(f"总销售额: ¥{total_revenue:,.0f}")
print(f"总订单数: {total_orders:,}")
print(f"活跃用户数: {total_users:,}")
print(f"客单价: ¥{total_revenue / total_users:,.0f}")
# --- 4.2 用户画像 ---
print("\n【用户画像】")
print("性别分布:")
print(df['gender'].value_counts(normalize=True))
print("\n年龄分布:")
df['age_group'] = pd.cut(df['age'], bins=[0, 18, 30, 50, 100], labels=['青少年', '青年', '中年', '老年'])
print(df['age_group'].value_counts())
# --- 4.3 商品分析 ---
print("\n【热销品类】")
top_categories = df.groupby('category')['total_amount'].sum().sort_values(ascending=False)
print(top_categories.head())
# --- 4.4 时间趋势 ---
df['order_month'] = df['order_date'].dt.to_period('M')
monthly_sales = df.groupby('order_month')['total_amount'].sum()
# 绘制月度销售趋势
plt.figure(figsize=(10, 5))
monthly_sales.plot(kind='line', marker='o')
plt.title('月度销售额趋势')
plt.ylabel('销售额(元)')
plt.xlabel('月份')
plt.grid(True)
plt.tight_layout()
plt.show()
# ==============================
# 5. 高价值用户分析(RFM 模型简化版)
# ==============================
# Recency: 最近一次购买距今天数
today = df['order_date'].max()
rfm = df.groupby('user_id').agg({
'order_date': lambda x: (today - x.max()).days, # R
'order_id': 'count', # F
'total_amount': 'sum' # M
}).rename(columns={
'order_date': 'Recency',
'order_id': 'Frequency',
'total_amount': 'Monetary'
})
# 简单分层(可替换为分位数)
rfm['R_score'] = pd.cut(rfm['Recency'], bins=3, labels=[3, 2, 1]) # 越近分数越高
rfm['F_score'] = pd.cut(rfm['Frequency'], bins=3, labels=[1, 2, 3])
rfm['M_score'] = pd.cut(rfm['Monetary'], bins=3, labels=[1, 2, 3])
# 高价值用户:R/F/M 均 ≥2
high_value = rfm[(rfm['R_score'] >= 2) & (rfm['F_score'] >= 2) & (rfm['M_score'] >= 2)]
print(f"\n高价值用户数: {len(high_value)} ({len(high_value)/len(rfm)*100:.1f}%)")
# ==============================
# 6. 关键洞察与建议
# ==============================
insights = f"""
【核心洞察】
1. 销售主力:{top_categories.index[0]} 贡献最大(¥{top_categories.iloc[0]:,.0f})
2. 核心人群:{df['age_group'].value_counts().index[0]} 用户占比最高
3. 趋势:销售额在 {monthly_sales.idxmax()} 达到峰值
4. 用户价值:{len(high_value)} 名高价值用户(占 {len(high_value)/len(rfm)*100:.1f}%),贡献显著
【运营建议】
✅ 针对"青年"群体加大 {top_categories.index[0]} 类目营销
✅ 对高价值用户推送专属优惠券,提升复购
✅ 在销售低谷期(如 {monthly_sales.idxmin()})策划促销活动
"""
print(insights)
# ==============================
# 7. 输出结果
# ==============================
# 保存清洗后数据
df.to_csv('cleaned_ecommerce_data.csv', index=False)
# 保存高价值用户列表
high_value_users = pd.merge(high_value.reset_index(), users, on='user_id')
high_value_users.to_excel('high_value_users.xlsx', index=False)
print("\n✅ 分析完成!结果已保存。")
📊 三、关键 Pandas 技能点回顾
| 步骤 | 使用的 Pandas 功能 |
|---|---|
| 数据加载 | read_csv(), to_datetime() |
| 缺失值处理 | isnull(), fillna() |
| 类型优化 | astype('Int16') |
| 异常值过滤 | 布尔索引 (df['col'] > 0) |
| 数据合并 | pd.merge() |
| 特征工程 | 新增列 df['total_amount'] = ... |
| 分组聚合 | groupby().agg() |
| 分箱离散化 | pd.cut() |
| 时间序列 | .dt.to_period('M') |
| RFM 分析 | 自定义分组 + 分箱打分 |
| 结果输出 | to_csv(), to_excel() |
🧩 四、可扩展方向(进阶练习)
- 加入退货数据:分析退货率高的品类
- 用户留存分析:计算次月留存率
- 关联规则挖掘 :哪些商品经常一起买?(需
mlxtend) - 预测模型:用 RFM 特征预测用户流失(结合 scikit-learn)
- 交互式仪表盘:用 Plotly + Dash 构建 Web 应用
📦 五、项目文件结构建议
ecommerce_analysis/
├── data/
│ ├── users.csv
│ └── orders.csv
├── src/
│ └── analysis.py # 主分析脚本
├── output/
│ ├── cleaned_ecommerce_data.csv
│ └── high_value_users.xlsx
└── README.md # 项目说明
✅ 六、项目价值
- 覆盖 Pandas 80% 核心技能
- 贴近真实业务场景(电商是数据分析高频领域)
- 产出可落地的业务建议
- 代码结构清晰,可复用到其他行业(如金融、物流、SaaS)
💡 提示 :你可以用 Kaggle 的电商数据集 替换模拟数据,获得更真实的体验!
后续
python过渡项目部分代码已经上传至gitee,后续会逐步更新。
资料关注
公众号:咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning
《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》