星期四, 二月 21, 2013

R语言资源


以前人的烦恼是没有书可读,现在人的烦恼是书太多了。关于R语言的书已经出版很多了,博主大约读过其中的四十多本,但是书在精,而不在多,学在透,而不在速。把有限的时间放到无限的书海中,这不是阅读的真意。本着造福学习者的角度,博主精选出十二本R书。什么是好书的标准?我以为是:有案例,有代码,有习题,有讲解,逻辑清楚,排版精良,体系完备,互有补充,内容千锤百炼,值得反复揣摩。书单均为英文版,都可以从网上找到。当然这份书单的选择是有主观偏见的。


星期一, 二月 04, 2013

XML和XPath使用方法备忘


如果把XML看作传统的关系数据库,那么XPath就是SQL。R语言中的XML包可用来解析处理XML或是HTML数据。在之前的文章中,我们了解到readHTMLTable函数,如果页面中的数据是一个规整的表格,用它是很方便的,但如果页面中是一些非结构化的数据,就要用到XML包中的其它函数了。其中最重要两个函数是xmlTreeParse()和getNodeSet(),前者负责抓取页面数据并形成树状结构,后者对抓取的数据根据XPath语法来选取特定的节点集合。下面用一个简单的例子来看一下这两个函数配合使用的效果。

星期日, 一月 27, 2013

如何学习数据科学


本文翻译自一篇博客文章,作者是一名软件工程师,他描述了在五年时间内学习数据科学的经历和心得,他的学习途径包括了自学(书籍、博客、小项目),课程学习,教学讨论,会议交流和工作实践。

一、入门

1)自学(2 - 4个月)

自学是起步的关键。两年前,我和几个同事组成了一个研究小组,讨论统计202课程的学习材料。这让我感觉很兴奋,并由此开始数据分析的学习研究。研究小组有5名成员,但最后只有2个人选择去更深入地研究这个领域(数据科学并不适合每一个人)。

  • 学习基本的统计知识:统计202课程是非常合适的入门资料
  • 学习一种统计工具:作为一个菜鸟,我用了3个月的时间埋头学习R语言,R学起来非常有趣。(为什么要学习R?
  • 解决一些好玩的小问题:好奇心是数据科学的关键。如果你对国家的经济问题,犯罪统计,体育成绩等感兴趣的话,去收集数据并开始回答你的问题吧。
  • 学习Unix工具:我选择了O'Reilly出版的数据之魅作为学习材料。
  • 学习SQL和脚本语言:我了解的有Java,Ruby和SQL。 Python也在我的名单上。


星期日, 一月 20, 2013

那些奇葩的R函数


看别人的代码会遇到一些奇葩的函数,一般的教程上很少提到,但却有很好的用处,这类函数基本上分布在base以及utils包中,下面将它们略为归纳一下,以备后用。

1,文件执行:
在用R生成一个PDF文档后,如果想去打开它,你可能会在文件夹里找到再点开。再或者我们想调用系统中的其它程序来做点事情,可能要打开cmd敲点命令。实际上这都可以在R内部完成。举例来说用pandoc转换na.md成docx再打开它。
system('pandoc d:\\rspace\\na.md -o d:\\rspace\\na.docx')
shell.exec('d:\\rspace\\na.docx')

2,网络浏览:
browseURL:浏览某个指定的网页
download.file:下载网络文件到本地

3,文件操作
dir.create:新建一个文件夹
list.dirs:显示目录下的文件夹
list.files:显示目录下的文档
file.create:文档创建
file.exists:判断文档是否存在
file.remove:文档删除
file.rename:重命名
file.append:文档添加
file.copy:文档复制
file.symlink(from, to)
file.show:显示文档内容
file.info:显示文档信息
file.edit:编辑文档
zip: 压缩文件
unzip: 解压缩文件

4,运算进度条
在一个大循环运算时,如果可以看到目前的进度是比较方便的,txtProgressBar和setTxtProgressBar函数可以帮助做到这一点,下面是内置的一个小例子:

testit <- ...="..." function="function" p="p" x="sort(runif(20)),">{
    pb <- p="p" txtprogressbar="txtprogressbar">    for(i in c(0, x, 1)) {Sys.sleep(0.5); setTxtProgressBar(pb, i)}
    Sys.sleep(1)
    close(pb)
}
testit()

星期五, 一月 11, 2013

用XLConnect包操控Excel表格


作为一个R迷,为什么要去捣鼓XLS文件?其实这种需求场景很多的啦,比如其它部门的同事有批量的Excel文件要处理,或者家里一把手的直接命令。Excel里面已经有不少函数可以处理数据了,包括简单的矩阵运算以及透视表什么的,但归根到底它还是需要鼠标点来点去,伤手腕啊。为了保护右手我们要提倡用代码控制一切需要鼠标的动作。高级的Excel玩家可能会用VBA去做自动处理,更高明的玩家则跳出三界外,从外部来控制单位格数据的输入输出。

R语言中有很多包可以处理表格文档,包括最为通用的RODBC包,XLConnect包也是操控Excel文档的利器,功能很丰富。使用该包的前提是要安装好Java,还要在环境变量里搞好设置。之后就可以安装加载包了。我们可以将表格文档看做是数据输入和输出端,R则是中间的运算单元。二者主要是通过数据框格式和工作表单元格进行交换。下面来看将iris数据框写入和读取的示例(其实是翻译的官方文档)。