📈 第4章 数据图形化
📄 一句话概括

任何一张图都是「把若干列数映射成位置、长度、角度、颜色」。数进去几个,就能回答几个问题。 饼图只映射了一列数:占比。条形图映射了「类别 + 数量」,还隐含一条时间轴。 体现数据的意思是:先决定比什么,再让图去承载这个比较——顺序反了,图就只是在替猜测作证。

📝 本章和前面几章的关系

上一篇看清了三份图缺什么。这一篇换个方向:从图反推它装了哪些数。 这个方向更有用。以后看到别人的图,先在心里数一遍「它装了几个变量」,比听解释快得多。

一、饼图里其实只有一列数

饼图的每一块扇形,长度是角度,角度来自「这一类的量除以总量」。 所以它装的只有一列数,外加一个类别名。 六个城市的饼图,装的其实就是六个转化率。 转化率之间的差很小(2.8% 到 5.2%),画成扇形几乎看不出差别——这是饼图第二个毛病:角度不敏感。 饼图适合表达「一家独大」或者「两家占八成」。六个差不多大的块画成饼,等于什么都没说。

二、条形图藏着一条时间轴和一个分母

图 显式的数 隐含的数 隐含的假设
饼图 各类占比 总量 总量不随时间变
条形图 每月订单 时间顺序、每月访客 访客不变时才比得出改进
折线图 两点之间的走势 采样间隔 间隔之间是平滑变化的

「隐含的假设」这一列最容易被忽略。折线图默认两点之间是直线过渡,可现实里这中间可能有个大坑。 条形图的隐含假设更狠:它默认你在比「同一批人」。 访客从 1.2 万涨到 1.82 万,来的可能是一批完全不同的人。

三、双轴折线把两个单位画在了一起

两根 y 轴的好处是能在一张图里看两个指标,坏处是「谁高谁低」变成了画图人随手定的缩放。 你把右轴的范围从 0 到 300 改成 200 到 300,两条线的相对位置立刻变个样,数据一个都没动。 这不是说双轴图不能用,是说它只能看「各自怎么动」,不能看「谁带动谁」。

四、体现数据:你决定比什么

订单涨了 66.7%,访客涨了 51.7%。这两个数放在一起,还是看不出「改版有没有用」。 要分得清,就得把订单除以访客——转化率。这一步叫「体现数据」:把两个绝对量变成一个比例。 比出来的结果有点扫兴:转化率从 3.50% 到 3.85%,只涨了 9.9%,而且中间 3 月还掉到 3.20%。

同一批数据,比「订单」得出「干得不错,继续加预算」; 比「转化率」得出「转化基本没动,增长全靠拉流量」。 两张图画得一样漂亮,结论却相反。差别不在画法,在分子分母。

五、一个四问清单

第一问:这张图想让我比较什么?答不出来就别画。 第二问:分子分母各是什么? 比例类指标最容易在这里偷换——「转化率」的分母是访客还是访问次数,差得很远。 第三问:基线是多少?没有基线的「涨了 9.9%」,可能只是回到三个月前的水平。

第四问:换一种比法,结论会不会变?会变的话,就该把两种比法都摆出来。

六、动手 Demo:体现数据:图是为了比较,不是为了好看

六个月访客与订单摆在一张表里,算出转化率,看结论怎么翻个面。 这段代码不做图,只算数——先确认数对不对,再去想怎么画。

VISIT = [12000, 13500, 15800, 14200, 16900, 18200]
ORDER = [420, 470, 505, 610, 640, 700]

print("月份  访客    订单   转化率")
for i in range(6):
    cr = ORDER[i] / float(VISIT[i]) * 100
    print("%2d月  %5d  %5d   %.2f%%" % (i + 1, VISIT[i], ORDER[i], cr))

cr0 = ORDER[0] / float(VISIT[0]) * 100
cr5 = ORDER[5] / float(VISIT[5]) * 100
grow_o = (ORDER[5] / float(ORDER[0]) - 1) * 100
grow_v = (VISIT[5] / float(VISIT[0]) - 1) * 100
print()
print("订单涨了 %.1f%%,访客涨了 %.1f%%" % (grow_o, grow_v))
print("转化率 %.2f%% -> %.2f%%  %+.1f%%" % (cr0, cr5, (cr5 / cr0 - 1) * 100))
print("验算:访客 x%.3f,转化 x%.3f,乘起来 x%.3f,对比订单的 x%.3f"
      % (VISIT[5] / float(VISIT[0]), cr5 / cr0,
         (VISIT[5] / float(VISIT[0])) * (cr5 / cr0), ORDER[5] / float(ORDER[0])))

实跑输出:

--------------------------------------------------------------------
体现数据:图是为了比较,不是为了好看
--------------------------------------------------------------------

  ① 把两个数放在一起比
  --------------------------------------------------------------------
  订单涨了 67%,访客涨了 52%。
  单看这两个数,分不出「转化率是不是也涨了」。
  要分的清,就得把订单除以访客——转化率。

  ② 算出来
  --------------------------------------------------------------------

| 月份 | 访客 | 订单 | 转化率 |
|---|---:|---:|---:|
| 1月 | 12,000 | 420 | 3.50% |
| 2月 | 13,500 | 470 | 3.48% |
| 3月 | 15,800 | 505 | 3.20% |
| 4月 | 14,200 | 610 | 4.30% |
| 5月 | 16,900 | 640 | 3.79% |
| 6月 | 18,200 | 700 | 3.85% |

  转化率从 3.50% 到 3.85%,+9.9%
  而订单涨了 66.7%——多出来的部分,主要是访客带来的。

  ③ 这就是「体现数据」
  --------------------------------------------------------------------
  数据本身不会告诉你该比什么。是你决定比什么,图才有意义。
  比「订单」得出「干得不错」;比「转化率」才得出「转化基本没动,全靠拉流量」。
  两张图可以画得一模一样漂亮,结论却相反——差别在分子分母。

  ④ 一个检查清单
  --------------------------------------------------------------------

| 问自己 | 为什么 |
|---|---|
| 这张图想让我比较什么 | 没有比较对象的图,只是装饰 |
| 分子分母各是什么 | 比例类指标最容易在这里偷换 |
| 基线是多少 | 没有基线的「涨了」,可能只是回到了三个月前 |

转化率的涨幅 9.9%,远小于访客的 51.7%,也远小于订单的 66.7%。 订单的漂亮增长,几乎全是拉来的人多。 顺手看见的第三件事:3 月转化率 3.20% 是个坑,4 月跳到 4.30%。 这一个月的跳变,图上不标出来,故事就讲不圆。

30 秒实验

  1. 把转化率的分母从「访客」换成「商品详情页浏览数」,转化率会变大还是变小?为什么。
  2. 如果 3 月做过一次促销,转化率的算法该怎么调,才不至于把促销的效果算成改版的功劳?
  3. 想一想:这一节里哪句话是「数说得对、但结论可能错」的?

常见误区

  1. 用绝对量比改进:订单涨了就是干得好,忽略了人来得更多这个前提。
  2. 比例不写分母:转化率 3.85%,分母是访客还是浏览量?两个数能差一倍。
  3. 拿一个月当趋势:4 月跳到 4.30%,5 月又回落到 3.79%,一个点连不成趋势。
  4. 图画得漂亮就交差:图好看只说明审美在线,跟分析对不对没关系。
自测三问(点开对答案) 1. 饼图为什么不适合比六个差不多的数? —— 它只映射占比这一个量,而且人眼对角度的分辨力差。六块差不多大的扇形,读不出差别。 2. 「体现数据」在这本书里具体指什么? —— 把两个绝对量变成一个比例(比如订单除以访客),让比较有基准。 3. 为什么折线图的采样间隔也是一条信息? —— 因为它默认两点之间平滑过渡。间隔里可能藏着一次活动、一次故障,图上完全看不见。

比什么定下来了,接下来是「能不能一次比好几个」。下一篇看三个变量怎么塞进一张图。

相关笔记