星期一, 四月 29, 2013

实现可重复的统计slides


制作幻灯片是数据分析师的必备技能之一,优秀的slides对外可以忽悠住客户,对内可以震慑住领导。精良的slides要秀外慧中,有逻辑有内容,还要有外形有风格。达到这种标准并不容易。在过去,你可能使用office中的ppt来做传统意义的幻灯片,将图片和代码费力的copy到一张张的slides上去,然后到处找模板。但这种方式已经凹特了。

在HTML5的发展背景下,已经出现了大批以网页形式的slides框架,例如:Google IO 2012\HTML5 slides\HTML5 Rocks\Shower\Deck.js这个名单可以很长。而这里只是其中六种演示框架的介绍。在这些slides框架下,你只需要懂一点点web知识,将图片和数据嵌入到一个html模板中,就可以生成一个动态可交互的slides。

实际上对于统计分析的slides,有一种工具可以使我们的制作效率更高。这就是谢益辉的knitr包。knitr像一把钥匙,打开了可重复统计报告的大门,同时也打开了通向html的大门。可以使R代码、运算结果和分析文字自然的融为一体,能自由的输出为LaTex、Markdown或者是Html。在借助knitr打通了这些奇经八脉之后,可以惊奇的发现,knitr可以将以上所有东西粘在一起,有助于实现可重复的统计分析幻灯片。

以后的工作流应该是这样的:数据分析的过程和结果均存放在rmd文件中,可根据不同需要转换为pdf或是html,当需要制作slides的时候,只要将生成的html进行一点加工,加入一些js/css效果即可生成美观炫目的slides。目前已经有很多这类现成的例子,例如coursera的公开课data analysis就是使用了这种slides来讲解R和数据分析。作者利用的是名为slidify的R包,直接从rmd文档生成html5的slides页面,非常推荐各位去下载来研究一下。

slidify使用的默认框架是io2012,比较淡雅朴素,另一种比较炫目的框架是reveal.js,这里有一个例子值得参考下。这份slides的原码可以在此找到。这份slides是使用reports包来生成的,基本流程如下:
install.packages("reports")
library(reports)
presentation('example')
setwd('~/example')
reveal.js()
安装reports包后使用presentation建立一个目录,这个目录会在当前R工具目录下自动生成,之后用户在目录下的rmd文件中编辑内容,保存后生成html文件,最后使用reveal.js函数生成slides,你会在reveal.js目录下找到index.html,就是最终的文件。由于reports包的瑕疵问题,在reveal.js前一步你可能需要手动切换一下工作目录。而且最好是再手动编辑一下index.html文件,以完全自定义实现reveal.js的各种特效。笔者也做了一个简单的slides可以看一看。关于reveal.js的完整资料看这里。 

相比reports包,slidify要显得稳定些,使用方法也类似,但它还放在github上,所以要用devtools包来下载它:
install_github("slidify", "ramnathv")
install_github("slidifyLibraries", "ramnathv")
library(slidify)
author('example')
slidify('index.Rmd')
加载slidify后使用author,它会自动在当前工作目录下建立example目录,并打开index.Rmd文档,供用户编辑,当然在写slides的时候需要遵从一定的格式才会让它识别。写完之后使用slidify即可生成网页。目前slidify支持的框架不多,但在开发版本中已经支持了包括reveal.js在内的很多框架了,所以尽请期待吧。

13 条评论:

  1. 打开就花了我半天时间,结果发现自己目录设置错了

    回复删除
  2. 这个包是在R 3.0才能装的吗……

    回复删除
  3. http://timelyportfolio.github.io/rCharts_512paths/
    看到一个很棒的应用!~

    回复删除
  4. 如果想要使用reveal.js(), 一定要装pandoc吗?

    回复删除
    回复
    1. 不用装,不过最好在linux下用

      删除
    2. 谢谢, 但是为什么R总是问pandoc安装路径?

      删除
    3. 哦,我机器上有pandoc,所以没问我。安装pandoc也很简单的。

      删除
  5. 我用总是出错reports包 我还是用slidify包吧

    回复删除
  6. "由于reports包的瑕疵问题,在reveal.js前一步你可能需要手动切换一下工作目录。"
    具体怎么切换?

    "而且最好是再手动编辑一下index.html文件,以完全自定义实现reveal.js的各种特效"
    如何手动?

    我在目录下用knit HTML生成了html文件,然后 reveal.js(),但是rstudio下提示:
    "Error in reveal.js() : run Knit HTML on the .Rmd file first"
    求解?

    回复删除
    回复
    1. 使用setwd来切换,切换时要看它生成的文件在哪个地方。生成html文件后再用文本编辑器直接去编辑这个html,里面有些帮助的,不过是英文的。实际上我不是很推荐用reports包了,很多功能在以后的slidify包里面都会有的。slidify更为成熟。

      删除
  7. slidify('index.Rmd'),产生的index.html 中文显示是乱码,求解,谢谢!

    回复删除
    回复
    1. 使用win系统就是这样的,换用linux就OK了

      删除