脑洞 | 哈佛教授公开R语言源码,教你用R制作gif动图

本文授权转自数据派(datapi)

原文标题:Code for my educational gifs

作者:Rafael Irizarry

翻译:贾琳 编辑:黄继彦

Rafael Irizarry是哈佛大学以及the Dana-Farber Cancer Institute的应用统计教授,他专注于研究基因组学,并且教授数门数据科学课程。在本文中他公开了自己授课时所使用的gif动图的R语言源码,同时也对涉及的几个话题进行了简单的论述,对于希望了解数据科学原理、如何使用R语言来进行可视化的读者都有所助益。

在日常教学的过程中,我有时会用动画来形象地解释概念,并且通过 @rafalab账号(https://twitter.com/rafalab)在社交媒体上分享。

John Storey最近问我是否可以公开这些源代码。由于我不甚有条理,而且这些动画都是灵机一动想出来的,所以之前这些代码分散在几个不相关联的文件中。John的请求促使我把这些代码整理在一起发布在这里。

所有的gif动图都是用R语言绘制的数张图片的叠加。在代码中你可以发现,我用几种不同的方法将单独的图片转化成动态gif图。第一种方法(不推荐)是将图片文件存储下来,然后调用ImageMagick转化工具(https://www.imagemagick.org/script/index.php)。在R环境下,我现在使用的方法是animation包的saveGIF函数,这是通过读者Yihui Xie在我simplystats博客下面的评论学习到的。当用ggplot画图时,我会使用David Robinson的gganimate包(https://github.com/dgrtwo/gganimate)。最后一种方法是我在加特效(例如调相)时会用到的:在线Animated GIF maker(https://ezgif.com/maker)。

以下就是这些gif动图的源代码,我大致按流行程度排序。因为代码是很着急写出来的,请不要过于苛责我。事实上,你可以随意批判,这就是我们学习的方式。

辛普森悖论

这张gif阐述的是辛普森悖论:我们看到X变量和Y变量有很强的负相关关系。不过,一旦我们用一个混杂因素Z变量进行分层,用不同颜色来表示Z,每一层中的相关性就会转化为正相关。这里的数据是虚构的,不过假设说X代表学生参加辅导的次数,Y代表九年级的测验分数,然后再用八年级的测验分数Z来对学生进行分层,我们也会发现这样的现象。

这张动图仅用三张图片组成。我用RStudio的Export功能将它们把存下来,然后用Animated GIF maker(https://ezgif.com/maker)来制作gif。以下是这三张图片的代码:

局部加权回归散点平滑法(Loess)

我分享的第一个教学动图是为了解释局部加权回归散点平滑法(Loess)的原理。具体来说,我们对于每一个自变量,比如x0,都让其对任何一个临近点有正的加权值,用加权回归拟合一条线,保留经过拟合所得的结果,然后移动向下一个点。

这里的数据来源是某个基因芯片实验。图中所示的是MA图,即比例对数与对数平均值之间的关系。我用animation包来保存gif动图。

预期寿命 vs 生育率

这个gif动图是复制Hans Rosling (https://en.wikipedia.org/wiki/ Hans_Rosling)在他的演讲“关于贫穷的新发现”(New Insights on Poverty,(https://www.ted.com/talks/ hans_rosling_reveals_new_insights_on_poverty?language=en))中展示的动画。该图很好地展现出数据可视化在消除误解方面的作用,Hans Rosling通过这张动图展示了如今并不如40年前一样能够简单将世界划分成两半。之前,人们一般把世界分为拥有更长寿命、较少家庭人口的西方富有国家和较短寿命、较多家庭人口的发展中国家,而这个图向我们展示了这种划分的不合理性。

感谢gganimate包,画这个图使用的代码非常简单。

联合国选举模式

这里,我们使用Erik Voeten和Anton Strezhnev提供的联合国选举数据来阐释距离的概念。

以下是代码。整理数据的代码是由David Robinson(https://twitter.com/drob)提供的。你会看到我们将随时间变化的距离进行了平滑处理,从而避免一些点跳动范围过大。

随机森林

在过去的很长一段时间里,我都觉得很难理解为何随机森林作为一种基于树的算法,却能够产生平滑的预测。这里的gif图帮助我理解了原因。我用的是2008年总统选举的数据库,因为我认为该数据的趋势总体是平滑的,但是有几个尖锐的边,就连局部加权回归散点平滑法都很难预测。需要注意的是,我们只有一个影响因素,这个gif并不能展示出随机森林的另一个重要特点:随机的特征选取可以减少树与树之间的相关程度。

你可以看到我在代码中使用的方式是传统的、我并不推荐的方式:保存所有的图片文件然后调用系统指令转化。

生态谬误

在分享辛普森悖论的动图以后,有些人问我生态谬误是不是相同的情况。其实这二者是不同的。生态谬误是我们试图通过平均值的强相关性来推断个体之间的相关性。为了更好的解释,我用dslabs包中自带的gapminder的数据(http://gapminder.org/)画出了一个动图,展示新生儿存活率的对数与日均收入的对数之间的关系。可以看到在地区层面上二者相关度很高,但在各个国家层面上相关度很低。这是因为同一地区国家与国家之间的差异导致的。

这张gif只由三张图构成。我用RStudio的Export功能保存图片,然后用Animated GIF maker(https://ezgif.com/maker)来制作gif。

第一张图是地区平均值;撒哈拉以南非洲国家的数值,你可以看到一个平均值被分成数个不同的数值;第三张是所有国家的情况。我标出了一些(与本地区相比)变化较大的国家,并且用了色盲也能识别的颜色。这里的代码有些复杂,原因是我不得不对Gapminder数据进行预处理。

贝叶斯定律

这个简单的动图展示的是将一种非常准确的诊断方法应用于一个发病率很低的群体的诊断结果。它展示出来的是,在已知诊断结果是阳性的情况下发病的先验概率,比该诊断方法的初试准确率要低。你可以用贝叶斯定律来确定真实的条件概率。更多细节请参考这里(https://simplystatistics.org/2014/10/17/bayes-rule-in-a-gif/)。

因为我们要做动态图,代码有一些复杂难懂。

吃豆子

最后,我做了这个动画,向你们展示饼图唯一的用处。

原文链接:

https://simplystatistics.org/2017/08/08/code-for-my-educational-gifs/

原文发布于微信公众号 - 大数据文摘(BigDataDigest)

原文发表时间:2017-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CVer

CVPR 2018 收录论文名单全公布

本文将介绍 CVPR 2018 所有录用论文的标题, 包括每篇论文属于 oral, spotlight还是 poster的情况. 大家可以根据论文的标题去 go...

1892
来自专栏CVer

【CVPR 2018】979篇录用论文合集下载

CVPR 2018 共计录用979篇论文,现已将所有 PDF文件打包成一个文件夹,并提供检索表格。前几天,CVPR 2018大会上刚刚发布了最佳论文奖、学生最佳...

1692
来自专栏一名叫大蕉的程序员

社区发现有啥鸟用No.14

当当当,同学们说要听算法,那今天就说说算法,关于社区发现的一系列算法。 最近一段时间工作上使用到了社区发现,虽然只是小小一部分。但是呢,工作量还是不小的,在网上...

5897
来自专栏量子位

火爆GitHub:100天搞定机器学习编程(超赞信息图+代码+数据集)

但怎么想是一回事,怎么做往往是另一回事。学习和健身一样,不少人都停留在口头上,有各种借口不曾付诸实施。

1340
来自专栏PaddlePaddle

【AI核心技术】课程十八:神经图灵机整理结构

UAI与PaddlePaddle联合推出的【AI核心技术掌握】系列课程持续更新中!

1365
来自专栏吉浦迅科技

教你一招,不会CUDA也能玩转矩阵加速

高性能计算领域的很多问题都在研究并行算法的实现,而矩阵计算又是高性能计算中应用非常广泛的内容。图形处理器GPU有着强大的并行处理能力,出色的浮点计算能力,大存储...

3814
来自专栏大数据挖掘DT机器学习

【趣味】数据挖掘(5)—分房与分类

中老年回顾歌曲集中有这样一首歌:月亮在白莲花般的云朵里穿行,晚风吹来一阵阵欢乐的歌声,我们坐在高高的谷堆旁边,听妈妈讲那过去的事情……   歌词美,旋律也美...

3093
来自专栏灯塔大数据

手把手带你进入TOP20的商超销售预测

介绍 如果说学习数据科学的最佳途径是什么——就是解决实际问题或亲自参与数据科学项目。因为只有当自己动手解决问题时,你才真正开始学习数据科学。 “商超销售预测”...

3504
来自专栏PPV课数据科学社区

【学习】用SPSS绘制质量控制图

控制图(Control Chart)又称管理图,它是用来区分是由异常原因引起的波动,还是由过程固有的原因引起的正常波动的一种有效的工具。控制图通过科学的区分正常...

3195
来自专栏大数据文摘

边玩边入门深度学习,我们帮你找了10个简易应用demo

4153

扫码关注云+社区

领取腾讯云代金券