首页 > Pandas数据分析实战训练营 > 项目10 综合项目与期末考查

项目10 综合项目与期末考查

综合实战项目:超市经营数据分析

本项目是一个综合实战大项目,要求你运用前面学到的所有技能,完成一份完整的超市经营数据分析报告。

项目要求:

  • 数据读取与清洗(处理缺失值、重复值、类型转换)
  • 描述性统计分析(均值、中位数、标准差等)
  • 数据透视表分析(按地区、品类、时间多维度汇总)
  • 时间序列分析(月度趋势、同比环比)
  • 数据可视化(至少3种不同类型的图表)
  • 撰写分析结论与建议

综合项目数据集与参考代码

import pandas as pd import numpy as np import matplotlib.pyplot as plt # 设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False # ========== 1. 创建综合超市数据集 ========== np.random.seed(2024) n = 2000 df = pd.DataFrame({ '订单号': [f'SA{i:06d}' for i in range(1, n+1)], '日期': pd.date_range('2023-01-01', '2024-06-30', periods=n), '客户ID': np.random.choice([f'V{i:04d}' for i in range(1, 501)], n), '地区': np.random.choice(['华东', '华南', '华北', '西南', '西北'], n, p=[0.30, 0.25, 0.20, 0.15, 0.10]), '城市': np.random.choice(['上海', '广州', '北京', '成都', '西安', '杭州', '深圳', '武汉'], n), '品类': np.random.choice(['生鲜', '食品', '饮料', '日用品', '家电', '服装'], n), '销售额': np.random.randint(20, 3000, n), '成本': np.random.randint(10, 2000, n), '数量': np.random.randint(1, 15, n), '支付方式': np.random.choice(['现金', '微信', '支付宝', '刷卡'], n) }) # 引入一些缺失值和异常值用于清洗练习 df.loc[np.random.choice(df.index, 20, replace=False), '销售额'] = np.nan df.loc[np.random.choice(df.index, 5, replace=False), '销售额'] = -100 df.loc[np.random.choice(df.index, 10, replace=False), '品类'] = np.nan print("原始数据预览:") print(df.head()) print(f"\n数据形状:{df.shape}") # ========== 2. 数据清洗 ========== print("\n【数据清洗】") print(f"清洗前缺失值:\n{df.isnull().sum()}") # 删除品类缺失的行 df = df.dropna(subset=['品类']) # 销售额缺失用中位数填充 df['销售额'] = df['销售额'].fillna(df['销售额'].median()) # 销售额为负数的视为异常值,用中位数替换 df.loc[df['销售额'] < 0, '销售额'] = df['销售额'].median() print(f"\n清洗后缺失值:\n{df.isnull().sum()}") print(f"清洗后数据量:{len(df)}") # 添加利润列 df['利润'] = df['销售额'] - df['成本'] df['利润率'] = (df['利润'] / df['销售额'] * 100).round(2) # 日期解析 df['日期'] = pd.to_datetime(df['日期']) df['年份'] = df['日期'].dt.year df['月份'] = df['日期'].dt.month df['年月'] = df['日期'].dt.strftime('%Y-%m') # ========== 3. 描述性统计 ========== print("\n【描述性统计】") print(df[['销售额', '成本', '利润', '数量']].describe().round(2)) # ========== 4. 透视表分析 ========== print("\n【地区 × 品类 销售额透视表】") pt = df.pivot_table(values='销售额', index='地区', columns='品类', aggfunc='sum', margins=True, fill_value=0) print(pt) # ========== 5. 时间序列分析 ========== print("\n【月度销售趋势】") monthly = df.groupby('年月')['销售额'].sum() print(monthly.tail(10)) # ========== 6. 可视化 ========== # 月度趋势图 plt.figure(figsize=(12, 5)) monthly.plot(kind='line', marker='o', color='#2563eb') plt.title('月度销售额趋势', fontsize=14, fontweight='bold') plt.ylabel('销售额(元)') plt.grid(True, alpha=0.3) plt.tight_layout() plt.show() # 品类销售额柱状图 cat_sales = df.groupby('品类')['销售额'].sum().sort_values(ascending=False) plt.figure(figsize=(10, 5)) cat_sales.plot(kind='bar', color=['#2563eb', '#0ea5e9', '#8b5cf6', '#f59e0b', '#ef4444', '#10b981']) plt.title('各品类销售额对比', fontsize=14, fontweight='bold') plt.ylabel('销售额(元)') plt.xticks(rotation=0) plt.tight_layout() plt.show() # 地区饼图 region_sales = df.groupby('地区')['销售额'].sum() plt.figure(figsize=(8, 8)) plt.pie(region_sales, labels=region_sales.index, autopct='%1.1f%%', startangle=90) plt.title('各地区销售额占比', fontsize=14, fontweight='bold') plt.show()

期末考查说明

本试卷满分 100 分,其中理论题 40 分,实操题 60 分。请认真作答,全部完成后点击"提交试卷"按钮。

考查范围:数据读取与清洗、索引与选择、数据清洗、分组聚合、透视表、时间序列、数据可视化、综合应用。

练习1:RFM模型计算

基于超市经营数据,计算每个客户的 RFM 指标:R(Recency,最近一次购买距今天数)、F(Frequency,购买频次)、M(Monetary,累计消费金额)。使用 groupby() + agg() 一次性计算三个指标。

main.py
执行结果
点击 "运行代码" 按钮查看执行结果
参考答案

练习2:客户分层

在 RFM 指标基础上,使用 pd.qcut() 给每个维度打 1-5 分,然后根据 R、F、M 的得分组合进行客户分层:重要价值客户、重要保持客户、新客户、重要挽留客户、一般客户,并为每类客户制定运营策略。

main.py
执行结果
点击 "运行代码" 按钮查看执行结果
参考答案

练习3:输出分析结论

综合所有分析结果,输出一份完整的超市经营数据分析报告,包含数据概况、品类分析(找出明星和问题品类)、地区分析、客户价值分析(各层客户数量和贡献),以及核心结论与运营建议。

main.py
执行结果
点击 "运行代码" 按钮查看执行结果
参考答案

参考答案汇总

一、选择题

1. B   2. B   3. B   4. B   5. C

二、判断题

6. 正确   7. 错误   8. 错误

三、填空题

9. mean   10. Q

四、实操题

详见各题提交后显示的参考答案。

项目小结

恭喜你完成了 Pandas 数据分析实战训练营的全部 10 个项目!

通过本课程,你掌握了以下核心技能:

  • 数据读取与清洗(CSV/Excel、缺失值、重复值、异常值)
  • 数据选择与过滤(索引、切片、条件筛选)
  • 数据转换(新增列、类型转换、字符串处理)
  • 分组聚合与透视表(groupby、pivot_table、crosstab)
  • 时间序列分析(resample、rolling、同比环比)
  • 数据可视化(Matplotlib、Seaborn、pandas 内置绘图)
  • 综合实战(RFM 客户分析、电商销售分析、超市经营分析)

数据分析是一项需要不断实践的技能,希望你能在今后的学习和工作中多加练习,真正让数据为你所用!

← 上一项目:综合实战:销售数据分析报告 返回训练营首页 →