人工智能之数据分析 Pandas
第十一章 项目实践
前言
本文围绕一个完整的 Pandas 实战案例,系统性地展示从数据加载、清洗、探索分析到可视化输出结论的全流程操作。通过本项目,帮助学习者深入掌握 Pandas 在真实业务场景中的核心应用。
项目名称:电商平台用户行为与销售分析(模拟数据)
项目目标:
- 理解用户的购买行为模式
- 识别高价值客户群体
- 分析不同产品的销售趋势
- 基于数据分析结果提出可行的运营优化建议
一、数据说明(模拟)
本项目使用两个主要的数据表进行分析:
-
users.csv — 用户基本信息
包含用户的基本属性信息。users.csv
| user_id | gender | age | city |
|---|---|---|---|
| U001 | 男 | 28 | 北京 |
| U002 | 女 | 35 | 上海 |
-
orders.csv — 订单记录
包含每笔订单的详细交易信息。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 进行内存级处理和分析。
二、完整代码实现(含注释)
# ==============================
# 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 类型转换 ---
# 将订单日期转为 datetime 类型
orders['order_date'] = pd.to_datetime(orders['order_date'])
# 年龄列转换为支持空值的整型
users['age'] = users['age'].astype('Int16')
# --- 3.3 异常值处理 ---
# 剔除价格或数量小于等于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()
三、关键 Pandas 技能点回顾
- 数据读取:熟练使用
pd.read_csv()加载本地文件。 - 缺失值处理:结合
isnull().sum()检测并用统计值如中位数填充。 - 类型转换:利用
pd.to_datetime()和astype()确保字段类型正确。 - 数据合并:通过
pd.merge()实现多表关联。 - 特征构造:基于已有字段创建新变量,例如计算“总金额”。
- 条件筛选:使用布尔索引过滤异常数据,提升数据质量。
- 分组聚合:运用
groupby()分析各类别、城市、性别的销售表现。
四、可扩展方向(进阶练习)
- 引入时间序列分析,按月/季度观察销售额变化趋势。
- 构建用户 RFM 模型,划分用户等级并制定精准营销策略。
- 对商品类别进行销量排名,并结合利润率做进一步分析。
- 添加地区维度的地图可视化,呈现各城市的消费能力分布。
- 导出分析结果为 Excel 多工作表格式,便于汇报展示。
五、项目文件结构建议
为保证项目的可维护性和清晰度,推荐如下目录组织方式:
project_sales_analysis/ │ ├── data/ │ ├── users.csv │ └── orders.csv │ ├── code/ │ └── analysis.ipynb 或 analysis.py │ ├── output/ │ ├── results.csv │ └── plots/ │ └── sales_trend.png │ └── README.md
六、项目价值
该项目不仅涵盖了 Pandas 的常用操作,还体现了数据分析的实际流程与逻辑思维训练。适用于初学者巩固基础技能,也适合作为中级学习者的实战练手项目。通过该案例,能够有效提升数据清洗、整合、分析与洞察表达的综合能力。
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}")
df['age_group'] = pd.cut(df['age'], bins=[0, 18, 30, 50, 100], labels=['青少年', '青年', '中年', '老年'])
print("\\n【用户画像】")
print("性别分布:")
print(df['gender'].value_counts(normalize=True))
print("\\n年龄分布:")
print(df['age_group'].value_counts())
print("\\n【热销品类】")
top_categories = df.groupby('category')['total_amount'].sum().sort_values(ascending=False)
print(top_categories.head())
df['order_month'] = df['order_date'].dt.to_period('M')
monthly_sales = df.groupby('order_month')['total_amount'].sum()
users.csv
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 模型简化版)
# ==============================
today = df['order_date'].max()
rfm = df.groupby('user_id').agg({
'order_date': lambda x: (today - x.max()).days,
'order_id': 'count',
'total_amount': 'sum'
}).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])
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]} 用户占比最高"""
三、关键 Pandas 技能点回顾
| 步骤 | 使用的 Pandas 功能 |
|---|---|
| 数据加载 | , |
| 缺失值处理 | , |
| 类型优化 | |
| 异常值过滤 | 布尔索引 |
| 数据合并 | |
| 特征工程 | 新增列 |
| 分组聚合 | |
| 分箱离散化 | |
| 时间序列 | |
| RFM 分析 | 自定义分组 + 分箱打分 |
| 结果输出 | , |
四、可扩展方向(进阶练习)
- 加入退货数据:深入分析退货率较高的商品品类,识别潜在质量问题或客户满意度风险。
- 用户留存分析:计算用户的次月留存率,评估产品粘性与运营活动效果。
- 关联规则挖掘:探索哪些商品经常被一起购买,为捆绑销售和推荐系统提供依据。
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 过渡项目的部分代码已整理归档,并将持续更新完善。


雷达卡


京公网安备 11010802022788号







