第1章 信息可视化:第一印象

按O'Reilly权威目录重建,覆盖分类数据、数值数据、直方图面积、累积频数、图表选择。

先做预测

先预测样本量翻倍、极端值出现或随机机制改变时,图形、估计与结论会怎样变化。本章从饼图、条形图、直方图和累积频数图入手,要求先识别数据类型,再让图形编码与问题匹配。图表不是装饰:比例尺、组距和面积都会改变读者看到的模式。 本章以、、、、建立从数据到证据的链条。

原书章节定位

本页一一对应O'Reilly原书“第1章 信息可视化:第一印象”。本章从饼图、条形图、直方图和累积频数图入手,要求先识别数据类型,再让图形编码与问题匹配。图表不是装饰:比例尺、组距和面积都会改变读者看到的模式。 原书的故事负责建立直觉;本页进一步要求写出总体、样本、参数和统计量,并用公式、代码与反例验收直觉。

核心单元

  1. 分类数据:取值表示类别而非可运算数量,适合频数表和条形图。
  2. 数值数据:取值具有数量意义,可进一步区分离散与连续并选择分组。
  3. 直方图面积:组距不等时柱高应使用频数密度,使柱面积而非高度与频数成正比。
  4. 累积频数:按有序组逐步累加频数或比例,用于读取阈值以下的数量和分位点。
  5. 图表选择:根据比较类别、观察分布或读取累计值选择编码,并固定清楚的尺度与基线。

从问题开始

先写五个可反驳问题:分类数据描述谁,数值数据如何改变表示,直方图面积依赖什么随机机制,累积频数在哪些边界失效,图表选择留下什么验收证据。统计计算只有在总体、观察单位、时间窗和缺失规则明确后才有意义。取值表示类别而非可运算数量,适合频数表和条形图。 取值具有数量意义,可进一步区分离散与连续并选择分组。 两者若来自不同总体,任何后续公式都失去解释。

D=(population,unit,window,measurement)\mathcal D=(\text{population},\text{unit},\text{window},\text{measurement})

数据契约D把样本的来源固定下来。接着用直方图面积表达结构,并由累积频数标记前提。图表选择必须能由另一位读者在同一数据版本上重算。不能先看结果再改变分组、尾部方向或排除条件。

反例与敏感性

正常样例应覆盖原书中心场景,边界样例至少包括空组、单样本、极端值、概率接近零或一、强相关与分布偏斜。再以“用饼图比较许多接近的比例,角度难以精确比较;改用同基线条形图。”构造反例,记录第一个失效的假设。产品看板比较不同宽度的延迟区间时,应画频数密度而非原始计数高度;同时保留样本量、时间窗和缺失比例。若纵轴截断,必须明确标注,避免把微小差异渲染成巨大变化。

ε=estimatetarget\varepsilon=\operatorname{estimate}-\operatorname{target}

误差可能来自抽样波动、选择偏差、测量误差、模型偏差和浮点实现。增加样本通常只降低抽样波动,不能修复抽样框缺失或错误模型。敏感性分析要分别改变分组、异常值规则和模型假设,观察结论方向与区间是否稳定。

验收证书

证书包括原始计数、分类数据定义、数值数据变换、直方图面积计算、累积频数边界和图表选择结论。每个百分比都能回到分子分母,每个图都标明尺度和样本量,每个检验都给效应与区间,每个随机过程都记录种子。

accept=assumptions validerror within budgetresult reproducible\operatorname{accept}=\text{assumptions valid}\land\text{error within budget}\land\text{result reproducible}

预算在看数据前定义。未通过时要区分数据不足、模型不适用、效果不足和实现错误;“未显著”不能笼统翻译为“没有差异”。

可核查推导

fi=nin,Fk=ikfif_i=\frac{n_i}{n},\qquad F_k=\sum_{i\le k}f_i

若第i组宽度为w_i、频数为n_i,为让柱面积等于频数,应令高度h_i等于n_i除以w_i。只画频数高度会让宽组面积被重复放大。累积频数则在每个上边界求前缀和,最后必须回到总样本数。 每一步都要注明使用定义、独立性、分布假设还是渐近近似;若只在大样本下成立,就不能把小样本结果包装成精确结论。

from collections import Counter
 
def frequencies(values):
    counts = Counter(values)
    total = len(values)
    return {key: value / total for key, value in counts.items()}
 
assert frequencies(["A", "A", "B"]) == {"A": 2/3, "B": 1/3}

程序只检查有限实例。解析公式、模拟频率和独立实现应三路对照;若三者不一致,先检查参数化、端点、自由度和随机种子。

机制与数据流

分类数据:取值表示类别而非可运算数量,适合频数表和条形图。

数值数据:取值具有数量意义,可进一步区分离散与连续并选择分组。

直方图面积:组距不等时柱高应使用频数密度,使柱面积而非高度与频数成正比。

数据流写成“总体 → 抽样或观察 → 统计量 → 抽样分布 → 决策”。任何聚合都保留分母、缺失数和分组规则,避免统计量脱离生成过程。

边界与失败模式

累积频数:按有序组逐步累加频数或比例,用于读取阈值以下的数量和分位点。

图表选择:根据比较类别、观察分布或读取累计值选择编码,并固定清楚的尺度与基线。

边界测试包括零样本、单样本、不平衡类别、概率极端、离群点、强偏态、相关观测和数值退化。失败应返回明确状态,不能用NaN或一张空图悄悄结束。

experiment={"claim":"分类数据到图表选择","normal":"假设满足","boundary":"退化或偏斜输入","counterexample":"用饼图比较许多接近的比例,角度难以精确比较;改用同基线条形图。"}
assert len(experiment)==4

工程案例

产品看板比较不同宽度的延迟区间时,应画频数密度而非原始计数高度;同时保留样本量、时间窗和缺失比例。若纵轴截断,必须明确标注,避免把微小差异渲染成巨大变化。 报告必须同时给原始计数、效应、误差或区间、模型诊断和未覆盖范围。图表与结论都绑定数据版本,才能在新数据到来后判断变化来自现实还是代码。

evidence=[("分类数据","definition"),("直方图面积","derivation"),("图表选择","reproduction")]
assert len({name for name,_ in evidence})==3
  1. 保存最小手算样例和原始分子分母。
  2. 加入空组、极端值、偏态和相关输入,解释哪条假设失效。
  3. 用固定种子模拟并与解析结果比较误差。
  4. 重建环境重跑,保存数据摘要、参数、代码版本和结论。

常见误区

本章回顾

本章覆盖分类数据、数值数据、直方图面积、累积频数、图表选择。掌握标准是能从原始计数重建公式,说明抽样或分布假设,用代码复查并在假设破坏时给出可解释失败。

术语表

讨论

评论区加载中…