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

原文标题:Code for my educational gifs

作者:Rafael Irizarry

翻译:贾琳

本文长度为1800字,建议阅读4分钟

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/

编辑:黄继彦

贾琳,清华大学2012级本科毕业生,现就读于美国达特茅斯学院工程管理硕士专业。爱好数据分析、数据科学,期待在数据派THU这个平台上向更多 志同道合的朋友学习和交流。

原文发布于微信公众号 - 数据派THU(DatapiTHU)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CVer

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

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

18620
来自专栏程序生活

Gensim实现Word2Vec的Skip-Gram模型简介快速上手对语料进行分词使用gensim的word2vec训练模型

简介 Genism是一个开源的Python库,用于便捷高效地提取文档中的语义话题。它用于处理原始的、非结构化的电子文本(“纯文本”),gensim中的一些算法,...

50140
来自专栏逍遥剑客的游戏开发

游戏中的战争迷雾

954110
来自专栏量子位

机器学习概念太多记不住?别怕,这有一套手绘小卡片 | 资源

颜萌 李林 编译整理 量子位 出品 | 公众号 QbitAI 有很多种方法可以了解机器学习。你可以去听课,也可以看视频教程,甚至博客,知乎问答都可以是你的选择。...

41950
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

图像美容之眼睛放大算法。

   目前,手机上各种图像特效的软件应用App越来越盛行,比较有名如美图秀秀,camare360,美颜相机等,还有一些在某些特定的方向做的比较的优秀的如魔漫相...

457100
来自专栏LET

精度,Precision

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

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

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

31630
来自专栏大数据文摘

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

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

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

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

33550
来自专栏数据魔术师

干货 | 到底是什么算法,能让人们如此绝望?

BOSS最近强迫小编学Tabu Search(TS) 听到这么高大上的词语后 当然是 ...... 一脸懵逼 ? 开始各种Google、度娘 搜索中却无奈发现 ...

1K60

扫码关注云+社区

领取腾讯云代金券