Skip to content

6.7 小结和本章复习

"The simple graph has brought more information to the data analyst's mind than any other device.""简单的图表比任何其他工具都能给数据分析师带来更多的信息。"— John Tukey, Statistician (统计学家)

巩固所学,融会贯通

难度重要性


本章知识体系

核心内容回顾

数据可视化
├── 单变量可视化
│   ├── 连续变量
│   │   ├── 直方图(频数 vs 密度)
│   │   ├── 核密度图(KDE)
│   │   ├── 箱线图(离群值识别)
│   │   ├── 小提琴图(分布 + 箱线)
│   │   └── ECDF(累积分布)
│   ├── 分类变量
│   │   ├── 条形图
│   │   └── 饼图
│   └── 分布诊断
│       ├── Q-Q 图(正态性)
│       ├── 偏度和峰度
│       └── 数据转换

├── 双变量可视化
│   ├── 两个连续变量
│   │   ├── 散点图 + 回归线
│   │   ├── 非线性关系(LOWESS, 多项式)
│   │   ├── 六边形图(大数据)
│   │   ├── 2D 直方图
│   │   └── 等高线图
│   ├── 连续 vs 分类
│   │   ├── 分组箱线图
│   │   ├── 分组小提琴图
│   │   ├── 带状图(Swarm)
│   │   └── 点图(均值 + CI)
│   ├── 相关性分析
│   │   ├── 相关矩阵热力图
│   │   ├── 散点图矩阵(Pairplot)
│   │   └── Pearson vs Spearman
│   └── Simpson's Paradox

├── 回归可视化
│   ├── 回归拟合图
│   ├── 残差诊断(四合一)
│   │   ├── 残差 vs 拟合值
│   │   ├── Q-Q 图
│   │   ├── Scale-Location
│   │   └── 残差 vs 杠杆值
│   ├── 影响力诊断
│   │   ├── Cook's Distance
│   │   ├── DFBETAS
│   │   └── 杠杆值
│   ├── 系数图
│   └── 预测可视化

├── 分布比较
│   ├── 叠加密度图
│   ├── ECDF 比较
│   ├── 分组箱线图
│   ├── 分组小提琴图
│   └── Ridgeline 图

└── 学术发表级图表
    ├── 图表尺寸和分辨率
    ├── 字体和样式
    ├── 多子图布局(GridSpec)
    ├── 导出格式(PDF, PNG, SVG)
    └── 期刊要求

关键概念总结

1. Anscombe's Quartet

核心教训:永远先画图!

  • 四组数据:相同的均值、方差、相关系数、回归线
  • 但数据结构完全不同
  • 统计量无法替代可视化

2. 数据可视化三大原则

原则含义实践
数据-墨水比最大化数据信息密度删除图表杂乱元素
准确性不误导读者从零开始Y轴,避免3D图
可读性快速传达信息清晰标签,合理配色

3. Simpson's Paradox

教训:整体趋势 ≠ 分组趋势

  • 原因:混淆变量(Confounding Variable)
  • 解决:分组分析,控制混淆因素
  • 社科研究中的常见陷阱

4. 图表选择决策框架

python
def choose_plot(var1_type, var2_type=None, n_observations=None):
    """
    智能图表选择系统

    Parameters:
    -----------
    var1_type : str
        'continuous' or 'categorical'
    var2_type : str or None
        'continuous', 'categorical', or None (单变量)
    n_observations : int or None
        样本量

    Returns:
    --------
    str : 推荐的图表类型
    """
    if var2_type is None:
        # 单变量
        if var1_type == 'continuous':
            return 'hist + kde' if n_observations < 10000 else 'kde only'
        else:
            return 'bar chart' if n_observations < 20 else 'sorted bar chart'

    # 双变量
    if var1_type == 'continuous' and var2_type == 'continuous':
        if n_observations < 1000:
            return 'scatter + regline'
        else:
            return 'hexbin or 2D histogram'

    elif (var1_type == 'continuous' and var2_type == 'categorical') or \
         (var1_type == 'categorical' and var2_type == 'continuous'):
        if n_observations < 500:
            return 'violin plot'
        else:
            return 'box plot'

    else:  # 两个分类变量
        return 'stacked bar or heatmap'

10道高难度编程题

题目 1:Anscombe's Quartet 复现(⭐⭐⭐)

任务

  1. 使用提供的 Anscombe's Quartet 数据
  2. 对每组数据计算:均值、标准差、相关系数、回归方程
  3. 验证四组数据的统计量几乎相同
  4. 创建 2×2 子图,展示四组数据的散点图 + 回归线
  5. 在每个子图上标注统计量

评分标准

  • 统计量计算正确(20分)
  • 可视化美观(20分)
  • 标注清晰(10分)
数据
python
anscombe = {
    'I': {'x': [10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5],
          'y': [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]},
    'II': {'x': [10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5],
           'y': [9.14, 8.14, 8.74, 8.77, 9.26, 8.10, 6.13, 3.10, 9.13, 7.26, 4.74]},
    'III': {'x': [10, 8, 13, 9, 11, 14, 6, 4, 12, 7, 5],
            'y': [7.46, 6.77, 12.74, 7.11, 7.81, 8.84, 6.08, 5.39, 8.15, 6.42, 5.73]},
    'IV': {'x': [8, 8, 8, 8, 8, 8, 8, 19, 8, 8, 8],
           'y': [6.58, 5.76, 7.71, 8.84, 8.47, 7.04, 5.25, 12.50, 5.56, 7.91, 6.89]}
}

题目 2:Simpson's Paradox 探索(⭐⭐⭐⭐)

背景: 某公司想研究"培训时长"与"绩效评分"的关系。数据包含三个部门(销售、技术、管理),每个部门有不同的基线绩效。

任务

  1. 生成模拟数据:
    • 销售部门:基线绩效 60,培训-绩效斜率 -0.3
    • 技术部门:基线绩效 75,培训-绩效斜率 -0.3
    • 管理部门:基线绩效 85,培训-绩效斜率 -0.3
  2. 计算并可视化:
    • 整体相关系数(不考虑部门)
    • 各部门内相关系数
  3. 创建对比图展示 Simpson's Paradox
  4. 撰写100字分析报告,解释为什么会出现这种现象

评分标准

  • 数据生成正确(15分)
  • 可视化清晰展示悖论(25分)
  • 分析报告(10分)

提示:使用 np.random.seed() 确保结果可复现


题目 3:回归诊断四合一图(⭐⭐⭐⭐)

任务

  1. 使用提供的工资数据(教育、经验、工资)
  2. 拟合多元回归模型:log(wage) ~ education + experience + experience²
  3. 创建标准的回归诊断四合一图:
    • 残差 vs 拟合值(添加 LOWESS 曲线)
    • Q-Q 图
    • Scale-Location 图
    • 残差 vs 杠杆值(标记 Cook's D > 4/n 的点)
  4. 在每个子图上添加面板标签(A, B, C, D)
  5. 根据诊断图,撰写诊断报告(200字)

数据生成

python
np.random.seed(42)
n = 200
education = np.random.normal(13, 3, n)
experience = np.random.uniform(0, 30, n)
log_wage = 1.5 + 0.08*education + 0.03*experience - 0.0005*experience**2 + np.random.normal(0, 0.3, n)

评分标准

  • 四个诊断图正确(30分)
  • LOWESS 曲线和标注(10分)
  • 诊断报告(10分)

题目 4:相关矩阵热力图增强版(⭐⭐⭐⭐)

任务

  1. 计算多个变量的相关矩阵和 p 值矩阵
  2. 创建热力图,只显示 p < 0.05 的相关系数
  3. 在不显著的位置显示 "n.s."
  4. 为每个相关系数添加星号标记:
    • ***: p < 0.001
    • **: p < 0.01
    • *: p < 0.05
  5. 添加色盲友好的配色方案

变量:工资、教育、经验、年龄、通勤时间(自行生成)

评分标准

  • p 值计算正确(20分)
  • 热力图美观(15分)
  • 显著性标记正确(15分)

题目 5:分布比较可视化(⭐⭐⭐⭐⭐)

背景: 比较四个地区(东部、中部、西部、东北)的工资分布。

任务

  1. 生成四个地区的工资数据(不同均值和方差)
  2. 创建 2×2 综合对比图:
    • 叠加密度图(KDE)
    • ECDF 比较
    • 分组小提琴图
    • Ridgeline 图(山脊图)
  3. 进行统计检验(ANOVA)
  4. 如果 ANOVA 显著,进行事后检验(Tukey HSD)
  5. 在图上标注统计显著性(如:***, **, *)

评分标准

  • 四种可视化方法(30分)
  • 统计检验正确(10分)
  • 显著性标注(10分)

题目 6:非线性关系的识别与建模(⭐⭐⭐⭐⭐)

任务

  1. 生成数据:Y = 2 + 3X - 0.5X² + ε
  2. 创建对比图(1×3):
    • 散点图 + 线性拟合(不合适)
    • 散点图 + 二次拟合
    • 散点图 + LOWESS 曲线
  3. 计算三种方法的 R²
  4. 使用残差图诊断线性模型的问题
  5. 可视化预测区间(二次模型)

评分标准

  • 三种拟合方法(20分)
  • R² 计算(10分)
  • 残差诊断(10分)
  • 预测区间(10分)

题目 7:交互效应可视化(⭐⭐⭐⭐⭐)

背景: 研究教育对工资的回报率是否因性别而异。

任务

  1. 生成数据:男性教育回报率 8%,女性 6%
  2. 拟合交互模型:log(wage) ~ education * gender
  3. 创建可视化:
    • 分组散点图(不同颜色、不同标记)
    • 非平行回归线
    • 显示每条线的方程和 R²
  4. 计算不同教育水平(10年、13年、16年)下的性别工资差距
  5. 绘制"边际效应图":X轴=教育,Y轴=性别工资差距

评分标准

  • 交互模型拟合(20分)
  • 可视化(20分)
  • 边际效应计算(10分)

题目 8:大数据可视化(⭐⭐⭐⭐)

任务

  1. 生成 N=50,000 的数据
  2. 创建 2×2 对比图:
    • 普通散点图(alpha=0.1)
    • 六边形图(gridsize=50)
    • 2D 直方图
    • 等高线密度图
  3. 对每种方法计时(使用 %%time
  4. 比较四种方法的优劣(表格形式)

评分标准

  • 四种可视化(30分)
  • 性能比较(10分)
  • 分析报告(10分)

题目 9:论文级多面板图(⭐⭐⭐⭐⭐)

任务: 创建符合 Nature 期刊标准的多面板图:

要求

  1. 图表尺寸:双栏(183mm ≈ 7.2 inches)
  2. 字体:Arial 10pt
  3. 分辨率:300 DPI
  4. 创建 3×2 布局(6个子图):
    • A: 工资分布直方图 + KDE
    • B: 教育 vs 工资散点图 + 回归线
    • C: 性别工资差距箱线图
    • D: 经验 vs 工资(LOWESS)
    • E: 相关矩阵热力图
    • F: 回归系数图(95% CI)
  5. 每个子图添加面板标签(A-F)
  6. 添加详细的 Figure Caption
  7. 导出为 PDF 和 PNG(高分辨率)

评分标准

  • 尺寸和分辨率符合要求(15分)
  • 六个子图专业美观(30分)
  • Figure Caption 完整(5分)

题目 10:完整的探索性数据分析(EDA)报告(⭐⭐⭐⭐⭐)

背景: 你获得了一份劳动力市场数据,包含:工资、教育、经验、性别、地区、行业(6个变量)。

任务: 创建一份完整的 EDA 可视化报告,包括:

第一部分:单变量分析

  • 每个变量的分布图
  • 描述统计表格
  • 离群值识别

第二部分:双变量分析

  • 散点图矩阵(pairplot)
  • 相关矩阵热力图
  • 分组对比(性别、地区)

第三部分:回归分析

  • 拟合多元回归
  • 回归诊断图
  • 系数可视化

第四部分:高级分析

  • Simpson's Paradox 检验
  • 交互效应探索
  • 非线性关系识别

输出

  • Jupyter Notebook(.ipynb)
  • HTML 报告
  • 关键图表(PDF)

评分标准

  • 分析全面(30分)
  • 可视化专业(30分)
  • 洞察深刻(20分)
  • 报告组织清晰(20分)

评分标准总表

题目难度总分重点考察
1. Anscombe's Quartet⭐⭐⭐50数据探索、可视化基础
2. Simpson's Paradox⭐⭐⭐⭐50混淆变量、分组分析
3. 回归诊断四合一图⭐⭐⭐⭐50模型诊断、LOWESS
4. 相关矩阵增强版⭐⭐⭐⭐50统计推断、热力图
5. 分布比较可视化⭐⭐⭐⭐⭐50多组比较、统计检验
6. 非线性关系⭐⭐⭐⭐⭐50多项式拟合、预测区间
7. 交互效应⭐⭐⭐⭐⭐50交互模型、边际效应
8. 大数据可视化⭐⭐⭐⭐50六边形图、性能优化
9. 论文级多面板图⭐⭐⭐⭐⭐50发表标准、布局设计
10. 完整 EDA 报告⭐⭐⭐⭐⭐100综合能力、报告撰写

总分:500分


推荐学习资源

必读书籍

  1. Tufte, E. R. (2001). The Visual Display of Quantitative Information

    • 数据可视化圣经
  2. Wilke, C. O. (2019). Fundamentals of Data Visualization

  3. Few, S. (2012). Show Me the Numbers

    • 商业图表设计指南

在线教程

  1. Matplotlib 官方教程https://matplotlib.org/stable/tutorials/index.html
  2. Seaborn 图库https://seaborn.pydata.org/examples/index.html
  3. Python Graph Galleryhttps://python-graph-gallery.com/

学术期刊图表指南


学习建议

初学者(刚完成本章)

  1. 夯实基础

    • 完成题目 1-3
    • 重点:基本图表类型,R² 的含义
  2. 每天练习

    • 用真实数据(如 UCI 数据集)练习
    • 尝试复现论文中的图表

进阶学习(1-2个月)

  1. 深入理解

    • 完成题目 4-7
    • 学习统计推断的可视化
  2. 阅读论文

    • 找 3-5 篇经济学顶刊论文
    • 分析其图表设计
    • 尝试复现

高级应用(3-6个月)

  1. 综合能力

    • 完成题目 8-10
    • 参与 Kaggle 数据可视化竞赛
  2. 形成风格

    • 建立个人图表模板库
    • 形成统一的视觉风格

继续学习

完成本章后,建议的学习路径:

  1. Module 7: 时间序列可视化

    • 趋势图、季节性分解
    • 自相关图(ACF/PACF)
  2. Module 8: 因果推断可视化

    • 平行趋势检验
    • 事件研究图
    • RDD 图
  3. 高级主题

    • 交互式可视化(Plotly, Bokeh)
    • 动态图表(GIF, Video)
    • 地理数据可视化(Geopandas)

自我检测

完成本章后,你应该能够:

  • [ ] 不查文档创建 10 种以上的统计图表
  • [ ] 诊断回归模型的常见问题
  • [ ] 识别 Simpson's Paradox
  • [ ] 制作符合期刊要求的图表
  • [ ] 撰写完整的 EDA 报告
  • [ ] 向非技术人员解释复杂的统计图表

如果以上全部能做到,恭喜你已掌握数据可视化的核心技能!


最后的建议

Tufte 的三个核心原则

  1. Above all else, show the data

    • 数据优先,装饰次之
  2. Maximize the data-ink ratio

    • 最大化数据-墨水比
  3. Erase non-data ink

    • 删除非数据元素

可视化的最高境界

"The best graph is the one that doesn't need a title or caption to be understood."

"最好的图表是不需要标题或注释就能被理解的图表。"

持续改进

  • 每次做图后,问自己:
    • 这张图能独立存在吗?
    • 5秒内能看懂核心信息吗?
    • 色盲人士能区分吗?
    • 打印成黑白后还清晰吗?

祝学习愉快!继续探索 StatsPai 的其他精彩章节!

基于 MIT 许可证发布。内容版权归作者所有。