Chinese

实现可重复的统计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在内的很多框架了,所以尽请期待吧。

初学D3的感觉

简单来讲有如下三点感受:

  • D3很强大
  • D3并不容易学
  • 学会D3并不等于学会了可视化

一山还有一山高,在翻过ggplot2这座山后,发现还有D3这座珠穆朗玛。ggplot2已经非常好了。能够实现The Grammar of Graphics的精义,有很丰富的对象和灵活的自由度,但这都还不够,因为ggplot2只能够生成静态的图形。如果你只需要写一篇分析报告,那么ggplot2是足够的。但如果你想让数据在网页上飞翔,就需要D3做为翅膀。

D3和ggplot2的共同点在于都可以实现数据到图形元素的映射,但D3更为底层一些。它的优点在于:

  • 用D3进行可视化,你只需要一个浏览器+编辑器就可以完成工作,并不需要其它环境,也便于分享。
  • 灵活性强,它可以很好的利用现有的web技术 HTML, CSS, SVG,操纵页面的任何一个对象,和数据绑定,无中生有的生成svg元素,进而由浏览器渲染成图形。
  • 它也能利用现有浏览器上可以实现的js函数,实现和用户的即时交互。
  • 此外,大量的文档和案例提供了很好的学习资源。

底层也意味着用它来绘图不是一蹴而就的事情。D3并不是一个图表库,例如它没有任何一个函数可以直接画出箱线图出来。它只是javaScript的一个函数库,你需要考虑到各个方面,操很多心,费很多步骤才能画出一个简单的图形。当然现在已经有了很多基于D3的库,例如Vega,在R里面也有clickme包可以将数据直接转为D3。不过对于D3,知道的越多越好,例如HTML,CSS,SVG,DOM,JavaScript。

可以这样来描述一下D3的特点:D3是一个组装生产线,这个生产线首先要放在一个车间里面,这个车间就是HTML。其次生产线上要有元件进来用以组装,有两种主要元件分别是数据和svg元素,D3首先读取json,csv,tsv格式文件,然后将数据和body内的svg元素属性绑定,组装的结果是一个新的HTML页面,最后的任务就是交给浏览器去展现数据特征。而D3这个生产线应该如何运转,则依赖于工程师头脑中的生产工艺或方法。

D3是一种可视化的工具,它本身并不能告诉你如何实现一个优秀的可视化。正如同拿着青釭剑的夏侯恩,并不能击败常山赵子龙。学会了D3,只是学会了将数据摆放到屏幕上,但什么样的摆放方式才是美的,有效的。这还需要更多可视化的理论学习和实践。

数据可视化本身不是目的,目的在于传送数据中隐藏的信息。人类不善于直接解读数据。但人类的视觉系统善于阅读图形,并从中搜寻模式。可视化就是将数据编码成图形,再由其它人读取图形,解码信息。这种可视化实际上是一种对已知数据进行解释性可视化的过程,一种讲故事的方式,这种情况下用D3是很适合的。而另一种探索性可视化,是对未知数据的描述,讲故事的人本身不晓得数据中有什么玄机,此时用D3就不大合适了,而应该换用快速的绘图工具。不过总而言之,学习D3是值得的,正如同学习R一样,谢益辉曾说:使用R将迫使你深入的理解统计,而使用D3也有同样的效果,使D3它将迫使你成为真正的可视化大师。

正所谓:内修于心,外显于形。

其它:
学习D3的预备资料:
http://www.w3school.com.cn/
www.codecademy.com
学习D3的几种入门材料:
http://code.hazzens.com/d3tut/lesson_0.html
http://www.dashingd3js.com/table-of-contents
http://ofps.oreilly.com/titles/9781449339739/

R连接MySQL数据库方法备忘

R语言连接数据库可以利用数据库的存贮能力和R的计算能力,起到取长补短的效果。之前我们也说过了如何在R中使用SQL,很多教材上也提到了连接MySQL的方法,但是在安装上还需要注意一些细

R语言玩转资产组合计算

以前都是用MATLAB或是EXCEL给学生讲资产组合的计算问题,实际R语言也可以做一样的事情。资产组合要解决的问题并不复杂,即给定一个可选的资产集合,要从中选择出一个最优组合,使其收益…

灰色模型的R代码

最近帮朋友写了一个灰色模型GM(1,1)的R实现,参考网上现有的matlab代码,比较容易就可以弄出来。下面是具体过程,主函数是GM(),建立的模型是一个S3类,搭配两个自定义的泛型函数print和plot

数据挖掘的三行俳句

最近才看到Tom Khabaza写的一篇很有份量的文章,阐述了数据挖掘的九大法则,在最后他以俳句方式进行了总结,可谓是字字珠玑。原文很长,只将俳句和各法则的纲要翻译放在这里。First the bus…

R书精选之十二宫

以前人的烦恼是没有书可读,现在人的烦恼是书太多了。关于R语言的书已经出版很多了,博主大约读过其中的四十多本,但是书在精,而不在多,学在透,而不在速。把有限的时间放到无限