R Markdown|可能是你数据分析报告最好的解决方案

浏览: 3823

为什么要用Rmd?

如果你是第一次听到R Markdown这个名词的话,可能你会问R Markdown是什么?我们能用它来做什么?怎么使用R Markdown?且听小编跟你道来。


当初人才计划进行到第二阶段的时候,水妈要求我们所有的 R 代码都需要通过R Markdown生成html来提交。一开始并不了解其中奥义,在此之前印象中那只是一个可以用来生成数据分析文件格式的工具。

经过一段时间学习后,小编终于能略微领会 R Markdown(以下简称Rmd)的好处:可以轻松地重现你的数据分析工作(make your work reproducible)。你从原始数据的读入、清洗到最后的分析挖掘过程,每一步的 R code 都被清晰地记录在案。阅读你R Markdown结果的人可以完整地审查你的分析思路和过程。  

如何用R Markdown将我们的数据分析代码和结果以文件的形式输出为相应的报告?由于这块知识点细节的内容非常多,于是在雪姨的建议下,小编决定先拿一个数据实例来进行R Markdown基本操作流程的演示,然后再去总结一些关键点帮助大家理清R Markdown的基本知识。

一个Rmd文档可以简单理解为R语言加上Markdown的结合,那可能又有同学要问了,Markdown又是个啥东东?Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,简单的来说就是Markdown为大家提供了一套写作语法可以让大家轻松排版完成写作,而基于Markdown的R语言数据科学写作工具在使用上更具灵活性。

image.png

鉴于小编之前在人才计划训练里的Rmd做得并不好看,小编决定拿一个众所周知的数据集来进行下面的R Markdown展示。因为对数据挖掘和机器学习热爱有加,小编就干脆拿鸢尾花(iris)数据集来演示一番。  

一个以iris数据集为基础生成的Rmd展示如下图所示:

image.png

下面小编就从Rmd的文档结构、Markdown基本语法、插入代码、以及结果输出等4个方面以iris数据集为例给大家大伙儿讲讲如何做一份美观大方的Rmd数据分析报告。下面这个是小编以html格式输出的Rmd结果,可以看到在Rmd输出的R代码块还是比较整洁美观哒。

image.png


Rmd的文档结构

一篇正经的Rmd都有哪些内容呀?

从上图中小编打的框框和画的箭头,大家也可以直观的看到一份完整的Rmd文档通常有以下三个部分构成:

  • ---  符号内的YAML渲染参数

  • 可自由写作的text文本

  • ```  符号内的R代码块

其实在大家创建Rmd文档的时候,R就已经帮大家按照这三大内容配置好了模板文档,大家只需在此基础上按照个人需求对这三个结构进行参数设置和代码修改即可。创建新的Rmd文档时的模块如下,小编已经帮大家把三大结构框起来啦~

image.png

可自由编辑的text文本这里不再叙述,R代码块小编会在后面进行详细阐述,这里先来看一下YAML参数。

1YAML参数

YAML(Yet Another Multicolumn Layout)本意为另一种标记语言,在Rmd里面一般用于开头的一些参数值指定,通常用来指定文档的标题、作者信息、写作时间、文档输出方式以及其他一些信息。YAML参数以上下两个---符号来划定该结构,在上述的iris例子中,其YAML参数设置如下:

---

title: "R Markdow展示"

author: "louwill"

date: "2017-8-28"

output:

  html_document:

    toc: yes

---

       值得补充的一点是,在指定输出文档下继续设置toc参数为yes可对全文档添加目录。设置效果如下:

image.png


Markdowm基本语法

都说R Markdown以Markdown为基础,可是Markdown到底又该怎么用呀?

R Markdown作为R和Markdown的结合的产物,完全接收了Markdown的基本语法,Markdown通过一款叫pandoc的标记语言转化工具将我们设定的各种语法格式转化为文档中想要实现的效果。

1常见语法格式

image.png

2标题设置

标题对于显示文档结构作用重大,人才计划训练的时候曾数次听到水妈的暴吼说:我们提交的Rmd作业为何没有标题结构,一篇完整的Rmd文档需要各级标题来使得文档结构清晰明了起来,不要满篇全是大标题,也不要都是蝇头小字。那么在Rmd中标题的使用也是相当简单,只需要学会使用#号键:

image.png

几级标题就有几个#来表示,6级标题就有6个#,各级标题字体也是逐渐缩小的。大家在实际操作中可以自行根据需要选择级标题,通常我们选择##二级标题做为第一标题,毕竟大家都是挺在乎标题字体大小的。小编在上面的例子中简单展示一下标题效果:

image.png


插入代码块

作为Rmd三大结构中最重要的一个组成部分,代码块在报告中扮演着重要的角色。它可以清晰的展示你做数据分析的思路过程,全部的代码都会被公开呈现给大家看到,那么在Rmd中插入R代码有哪些需要注意的呢?

除了手动输入 ```  符号插入代码之外,最方便的插入代码的方法莫过于通过菜单栏的insert来执行插入代码的功能了,如下图所示:

image.png

插入之后代码块是这样的:

image.png

就像在R脚本中一样,大家可以愉快的在里面写代码啦。

由图中可以看到,除了主要的R代码之外,Rmd对于Python、SQL等也是支持的。点击之后会在Rmd中自动生成代码块,这样我们可以在代码块中编写代码啦。可以在代码块中直接编写程序,也可以将事先在R脚本中编辑好的代码复制到代码块中去,然后点击代码块最右上角的运行按钮即可运行代码块。为了满足不同的代码需要,Rmd代码块还为我们提供了多种个性化的设置。点击代码块右上角第一个齿轮按钮即可对代码块进行各种设置。打开后这个设置长这样:

image.png

比如说水妈给咱们人才计划学员出题,题目叫R语言集中训练,水妈说你们最后的代码作出的结果要跟我给的示例一样。这时候水妈就可以通过这个齿轮按钮进行仅显示代码运行结果的设置:

image.png

貌似都能想象出水妈的表情:输出结果我都给你们看了,你们只要照着搞出一样的结果就可以了!

当然了,这里面还有很多设置选项,比如说R经常运行出来会出现一些warning,太难看,我们不想让它们出现在Rmd里面,这里也是可以设置不显示warning哒。除此之外,还有一些其他的输出设置,大家可以自行去尝试一下。在进行代码块选择输出设置的时候,除了齿轮按钮之外,我们也还可以在代码块里手动输入命令参数进行设置:

image.png

在完成自定义的代码块设置之后,你就可以对单个代码块进行运行测试啦,没有报错的话,代码块运行会出现一个包含代码运行结果的R Console,如果代码中有绘图命令的话,还会出现单独的绘图框的一个结果。比如说小编用iris数据集中的花瓣长度与鸢尾花类型作了一个简单的箱线图:

image.png


结果的输出

以上全部工作完成之后,我们就可以将Rmd文档的结果输出为其他形式的报告展示给别人看啦。为了生成我们想要的Rmd结果,我们需要对创建的文件对象执行一下render命令,如果代码块不报错的话,在RStudio右侧的viewer一栏会显示运行结果。

image.png

R Markdown在这其中生成最后输出结果的过程如下图所示:

image.png

首先R Markdown会将你的Rmd文件转化为一个名为knitr的东东,这个knitr(发音为:ni-ter)可以理解为一个由纯文本和代码交织在一起的文档,然后再将这个文档转化为一个新的Markdown文件(.md),最后由pandoc转化为任意我们指定的文档格式。pandoc是一种标记语言转换工具,可以实现不同标记语言之间的转换。就这样,我们最终的数据分析报告得以呈现在大家面前。

再稍微高级一点的就是,我们一般不使用render命令,而是通过一个叫knitr的小按钮将Rmd生成我们想要的格式,比如说HTML、PDF以及word等等。这个knitr也就是上文小编说的文本和代码交织文档,这里我们可以将其理解为编织文档。正常的Rmd输出效果如下,这里以HTML为默认输出:

image.png

除了这些常见格式文档的输出之外,R Markdown能做的事远比你我想象的要多。比如说:

image.png

书籍方面,比如说我们的益辉大大这本用R Markdown编写的教材:

https://bookdown.org/yihui/bookdown/

下面是基于shiny做出来的Rmd交互式文档展示,这个实际效果就很酷炫了,大家有兴趣也可以去尝试一下~

image.png

关于Rmd的其他输出形式和效果,小编在这里就不再一一展示了。

关于正经的R Markdown的基本知识,小编到这里基本就已经讲完了,这些内容基本上包括了R Markdown的方方面面,足够大家参考做出自己的Rmd报告了。

image.png

推荐 3
本文由 鲁伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

喵~~mark

要回复文章请先登录注册