需求绘制统计图形,是为了给谁看? 显然不是给电脑看。 因为它看不懂,也没必要看。给它数据就好了。它理解起来,更准确。 绘制统计图形,是给人看的。 可以给别人看。例如合作者、读者、审稿人,或者演讲时的观众。 但更多的情况,图也是给自己看的。 为什么要画图? 因为密密麻麻的数字或符号,远不如一幅图像,看得清楚和舒服。 人类中的大多数,目前还没有进化出对海量原始数据,条件反射一般的理解能力。 漫长的演化史上,人类的感官只要能有效发现食物(包含猎物),快速捕获危险信号(例如捕食者逼近),和同类高效交流(使用声音、表情或肢体语言)就大概率可以在残酷的自然淘汰赛里幸存下来。 不得不从财务报表这样的密集数据里,发现机会和风险,是最近几百年才有的事儿。 巴菲特和芒格这样的投资大家,也许有这种超能力。 但这种能力,显然不是所有人的标配。 对普通人来说,理解大量的数据,统计图形很必要。因此人们常说,“一幅图胜过千言万语”。 在《如何用Python从海量文本抽取主题?》一文里,我给你展示过如何绘制主题挖掘图形。 而《如何用Python和R对故事情节做情绪分析?》一文中,我给你介绍了如何绘制故事情绪时间序列。 如你所见,这些图很有用。 但是它们只是静态的。 那么,如果图是动态的呢? 那至少,它能够给我们提供更多一个维度的信息。 这种功能,真的有用吗? 我这里给你看一个例子。 这幅动态统计图,描绘了世界不同区域,人均 GDP 和预期寿命之间的关联。随着左上角年份的不断变化,你会看到几十年来,这个世界的发展变化。 Hans Rosling 曾经用类似的数据和动画效果,做了非常精彩的 TED 演讲。我上课的时候,不止一次拿来作为演示样例,让学生揣摩学习。 如果你感兴趣的话,可以点击这个链接查看视频。 你知道吗?只需要短短10行语句,你也能自己绘制出这个图形。 不过我们学东西,不宜贪多求快。 要绘制上图,你需要了解相关的基础知识。一下子摄入很多新知,可能造成认知负荷,对你的学习兴趣没有益处。 本文中,我用一个更简单的例子,给你展现如何用 R 绘制动态统计图。 有了它作为基础,结合我给你推荐的相关学习资源,你也能很快做出更为实用,甚至是令人惊艳的动图。 环境你不需要安装任何软件。只需要点击这个链接(http:///ReaP9Mk),就可以使用 R 编程环境了。 等准备工作完毕,你会看到,浏览器里面开启了一个 RStudio 界面。 你如果时间紧迫,不想输入任何代码,却又想马上看到运行结果,可以点击左上角的 你就能看见下图这样打开该文件后的结果。
界面左上方这里,有一个毛线球形状的按钮,名称叫做 如果你没有那么急,就请按照我下面的说明来操作。根据教程,一步步手动输入语句。这样更有助于你的理解,收获会更大。 点击左上角的 此时,你会看到左侧分栏一个空白编辑区域开启,可以输入语句了。 输入之前,我们先给文件起个名字。点击 在新出现的对话框里面,输入 好了,下面就可以输入并运行代码了。 代码首先,我们需要读入几个必要的软件包: library('tidyverse') 如果你看过我的《如何用R和API免费获取Web数据?》一文,对于
下面看看我们这次使用的数据。 数据保存的格式是
读入以后,保存在其中的一个数据框变量 carriers_jan
我们解释一下该数据的内容。 这个数据实际上是从《如何用4行 R 语句,快速探索你的数据集?》一文中的 转换后的数据,统计了不同航空公司在2013年1月,每一天从纽约三大机场起飞航班次数。 为了简便,我们在这个数据集里,只保留了3家航空公司,即:
下面我们挑出1月1日的数据看看: carriers_jan %>%
可见,这一天里,美国航空起飞航班 94 架次,达美 112 ,美联航为 165 。 根据上表,我们绘制一张柱状图(bar chart)。 横坐标是航空公司名称,是分类数据;纵坐标是航班次数,是量化数据。 carriers_jan %>% 如上图所示,三家航空公司从纽约机场起飞次数,分别采用了不同颜色柱状图进行了可视化。 红色是美国航空,绿色是达美航空,蓝色是美联航。 简单解释一下其中的
它将 Leland Wilkinson 提出的'绘图语法'(Grammar of Graphics)在 R 语言上实现。 在《如何用 Python 和 API 收集与分析网络数据?》一文中,我们已经介绍过 你只要记住,它绘制图形的时候,采用的是'分层'机制就好。
但是单单这一句,实际上是绘制不出东西来的,不信你可以尝试执行一下:
请注意这个图里, x 轴和 y 轴的设置,都与我们的预期一致。但是任何实质性内容,都没有绘制出来。因为咱们还没有告诉 ggplot ,打算画一个什么类别的统计图形。 这就是下一句 这句话告诉 这张静态图,只能告诉我们2013年1月1日这一天,纽约机场这3个航空公司起飞航班数量信息。 假如我们想多了解一个维度,也就是把时间加进去,怎么办? 这里办法并不唯一。 最简单的常规方法,是把三维信息压缩到二维平面里面去。 因为我们看二维图像,除了能观察到位置区别之外,还可以辨识色彩。 利用下列语句,你可以把这张图轻松做出来。 carriers_jan %>% 注意,这里因为我们不再把时间限定在1月1日了,因此你得把 这里的 不同于上一幅图,我们把 我们此次不打算绘制柱状图了,而是描绘随时间变化趋势,所以选用的是散点图( 这就意味着,再考虑柱状图里面的填充,就不恰当了,所以我们把 从这张图里,你可以发现非常显著的规律性。 假如你不想这样压缩信息,而希望用图形随时间的动态变化,来体现附加的时间维度,该怎么办? 这时,你就需要使用
他把原先的 因为可以用动态体现时间维度,所以我们这次依然绘制柱状图。语句如下:
图动起来了,是吧? 解释一下语句。 与之前静态柱状图的区别,也是去掉了时间的限定那一句 另一个显著差别,是加入了最后一行语句, 根据
不过,这里有个很严重的问题------你根本就看不清,当前的动态结果对应哪个时间。对不对? 咱们需要改进一下。 改进的方法很简单:加入图片标题,显示时间,并且让标题对应着一起变化。 修改后的代码如下: carriers_jan %>% 这下,你一眼就可以从标题中,看到当前动图对应的时间了。 这里我们用到了 我们用 我们传入的是 小结本文给你展示了 R 环境绘制动态统计图的方法,具体包含以下知识点:
为了展示样例的最小化,本文的动态统计图非常简单,技术含量并不高。 抛砖引玉。希望你举一反三,绘制出更有价值、内容也更加丰富的动态统计图来。 如果你对 数据科学:R语言实现(影印版)[R for Data Science]作者:Hadley Wickh |
|
来自: LibraryPKU > 《制图》