附录 A 是一张方向清单:正文讲了方法,这里讲「往下还能往哪走」。 上半五条:统计知识大全、Excel 技巧、Tufte 图形原则、数据透视表、R 社区。 五条里最实用的是数据透视表——它只有一个动作:分组汇总,而这是分析里出现最多的动作。
十三章正文到第 13 章结束。附录 A 不再教新方法,只指路。 这里把五条要诀各给一句实话,再用一个 Demo 把透视表的骨架拆开给你看。
一、为什么要有这么一张清单
一本书能讲完的是方法,讲不完的是「下一步学什么」。 附录 A 列了十条,一半是知识方向,一半是工具和习惯。 它的用法不是挨个学,是遇到瓶颈时回来对一眼:现在卡在哪一条上。
清单的价值在于定位,不在于读完。
二、第一到第三条
统计知识大全:不求会推公式,但要知道有哪些方法、各自的前提是什么。 知道「有这个工具」比会用某个工具更重要——不知道它存在,你连搜索都不会搜。 Excel 技巧:快捷键、名称、条件格式。这类东西不产生洞察,只省时间。
省下来的时间才是重点。工具技巧的价值要用「省下的时间干了什么」来衡量。 Tufte 的图形原则:一句话概括是「删掉不承载信息的墨水」。 这条原则和本书第 4 章是一路的:图不是装饰,是比较的工具。
三、第四条:数据透视表
它把「分组汇总」这件事从写公式变成拖字段。 三个区:行放什么、列放什么、值怎么汇总。放对就出表。 而分组汇总,是所有分析里出现频率最高的动作。
第 9 章的直方图是「按区间分组计数」,第 11 章的分区模型是「按部门分组拟合」。 换个说法,它们都是透视表的亲戚。
四、第五条:R 社区
R 的价值一半在语言,一半在社区:CRAN 上有几万个包,统计方法几乎都有现成实现。 遇到一个没见过的检验,先去搜有没有现成包,比从头实现快得多。 但社区也有代价:包的质量参差,文档常常只写到「能跑」。
用别人的实现,前提是你能看懂它的默认参数。默认值不对,结论就反。
五、这五条怎么用
不需要按顺序学。做法是:手头这个任务卡住了,回来对一眼清单。 算不出想要的数 → 第一条(统计知识)。表格动作太慢 → 第二条。图讲不清 → 第三条。 想快速看两个维度的关系 → 第四条。需要某个专门方法 → 第五条。
清单是查的,不是背的。
六、动手 Demo:用八行代码复刻一张数据透视表
四个区域、三个季度、十二行金额,手工做一遍分组求和,再摊成交叉表。 最后换一种汇总方式(平均),看结论怎么变。
DATA = [
("华东", "Q1", 120), ("华东", "Q2", 150), ("华东", "Q3", 130),
("华北", "Q1", 90), ("华北", "Q2", 110), ("华北", "Q3", 95),
("华南", "Q1", 140), ("华南", "Q2", 160), ("华南", "Q3", 170),
("西南", "Q1", 70), ("西南", "Q2", 85), ("西南", "Q3", 80),
]
# 行:区域 列:季度 值:求和
acc = {}
for r, q, v in DATA:
acc[(r, q)] = acc.get((r, q), 0) + v
for r in ("华东", "华北", "华南", "西南"):
line = "%s" % r
for q in ("Q1", "Q2", "Q3"):
line += " %4d" % acc[(r, q)]
line += " | 合计 %4d" % sum(acc[(r, q)] for q in ("Q1", "Q2", "Q3"))
print(line)
print()
for r in ("华东", "华北", "华南", "西南"):
sub = [v for rr, q, v in DATA if rr == r]
print("%s 合计 %4d 平均 %6.1f" % (r, sum(sub), sum(sub) / float(len(sub))))
实跑输出:
--------------------------------------------------------------------
用八行代码复刻一张数据透视表
--------------------------------------------------------------------
① 附录 A 上半张清单
--------------------------------------------------------------------
| 方向 | 它解决什么 | 往下走的入口 |
|---|---|---|
| 统计知识大全 | 知道有哪些方法、什么时候用 | 任何一本统计教材的目录 |
| Excel 技巧 | 把重复的表格动作做快 | 快捷键、名称、条件格式 |
| Tufte 图形原则 | 让图少一点墨水、多一点信息 | 《The Visual Display》 |
| 数据透视表 | 不给公式也能做交叉汇总 | 插入 → 数据透视表 |
| R 社区 | 找现成的统计实现和讨论 | CRAN、邮件列表、StackOverflow |
五个方向里,最容易被低估的是数据透视表——它把「分组汇总」这件事从写公式变成拖字段。
而分组汇总,恰好是所有分析里出现频率最高的动作。
② 透视表只有三个区
--------------------------------------------------------------------
| 区 | 放什么 | 代码里对应什么 |
|---|---|---|
| 行 | 按什么分组(部门) | groupby 的第一个键 |
| 列 | 再按什么细分(季度) | groupby 的第二个键 |
| 值 | 汇总什么、怎么汇总 | 聚合函数 |
三个区放对,透视表就出来了。剩下的都是格式问题。
透视表不难,难的是想清楚「行放什么、列放什么」。这一步想错,表就白拖。
③ 用手算的方式先走一遍
--------------------------------------------------------------------
四个区域、三个季度、十二行金额。先按「区域 + 季度」分组求和。
分组键一共 12 个,正好是 4 区域 × 3 季度。
这一步和透视表拖字段做的事完全一样,只是它替你点了鼠标。
④ 摊成一张交叉表
--------------------------------------------------------------------
| 区域 | Q1 | Q2 | Q3 | 合计 |
|---|---:|---:|---:|---:|
| 华东 | 120 | 150 | 130 | 400 |
| 华北 | 90 | 110 | 95 | 295 |
| 华南 | 140 | 160 | 170 | 470 |
| 西南 | 70 | 85 | 80 | 235 |
行合计、列合计都是加出来的,不是另算的。
交叉表的价值在于「两个维度同时看」:只看区域合计,会漏掉华南在涨、华北在跌。
⑤ 换个汇总方式,结论就变
--------------------------------------------------------------------
| 区域 | 合计 | 平均 |
|---|---:|---:|
| 华东 | 400 | 133.3 |
| 华北 | 295 | 98.3 |
| 华南 | 470 | 156.7 |
| 西南 | 235 | 78.3 |
求和看规模,平均看水平。四个区都是三期,所以两种排名的顺序一样。
但只要各区期数不同,两种汇总立刻分叉:期数多的区合计偏高、平均未必。
透视表的「值字段设置」就是在这里换挡:求和、计数、平均、最大,一句话的事。
acc[(r, q)] 这个字典就是透视表的引擎:键是「行 + 列」,值是「汇总」。
透视表本身没有算法,只有索引。
最后一段换成平均:四个区都是三期,所以排名不变;一旦各区期数不同,求和和平均的排名就会分叉。
30 秒实验
- 如果把「区域」放到列、「季度」放到行,表会长成什么样?信息有损失吗?
- 想同时看「数量」和「金额」,透视表该怎么摆?
- 想一想:为什么说「透视表不难,难的是想清楚行放什么列放什么」?
常见误区
- 把透视表当画图工具:它是汇总工具,图是它后面的事。
- 行和列随便放:行列放反,交叉表的可读性差很多。
- 只做求和:计数、平均、最大往往比求和多信息。
- 不看分母:合计高可能只是期数多,不是表现好。
自测三问(点开对答案)
1. 透视表的三个区分别是什么? —— 行(按什么分组)、列(再按什么细分)、值(汇总什么、怎么汇总)。 2. 为什么说分组汇总是最高频的动作? —— 因为绝大多数分析问题都要先「按某一类分开」再比较。直方图、分区模型都是它的变体。 3. Tufte 的图形原则一句话是什么? —— 删掉不承载信息的墨水。图上的每一笔墨都应该对应一个数据事实。上半五条讲完。下半五条更靠近「怎么把它做完」:加变量、做检验、看随机、协作、以及你自己的专业。
- ☐ (本篇完,下一篇 A.2 正文未及的十大要诀(下))