R语言:优雅、卓越的统计分析及绘图环境

标签: 选题策划 Big Data | 发表时间:2012-03-01 17:39 | 作者:baiyuzhong
出处:http://www.programmer.com.cn

文 / 刘思喆

历史

R语言由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两人共同发明,其词法和语法分别源自Scheme和S语言,一般认为R语言是S语言【注:John Chambers,贝尔实验室,1972】的一种方言。

R是“GNU S”,一个能够自由有效地用于统计计算和绘图的语言和环境,它提供了广泛的统计分析和绘图技术,包括线性和非线性模型、统计检验、时间序列、分类、聚类等方法。我们更倾向于认为R是一个环境,在R环境里实现了很多经典的、现代的统计技术。

1992年,Ross Ihaka(图左)和Robert Gentleman(图右)在奥克兰大学成为同事。后来为了方便教授初等统计课程,二人开发了一种语言;而他们名字的首字母都是R,于是R便成为这门语言的名称。

作为R语言的前身——S语言的代码几乎不需要进行任何修改即可在R语言环境下运行,从这个角度讲两种语言几乎等价。S语言诞生于20世纪70年代由John M. Chambers领导的贝尔实验室统计研究部。它的诞生过程几乎就是现代统计分析方式的演化历程的写照【注:谢益辉,郑冰(2008). R语言的历史背景、发展历程和现状. 1st China R Conference.】。

  • 1975-1976年,贝尔实验室统计研究部使用一套文档齐全的Fortran库做统计研究,简称为SCS(Statistical Computing Subroutines)。
  • 当时的商业统计软件采用的是批处理方式,一次性输出问题的所有相关信息【注:令人感叹的是,现代商业统计软件依然一成不变地遵循这种低效率的数据分析模式】,在那个时代,这个过程需要几个小时,并且商业软件的程序不能做任何修改。而贝尔实验室的统计学家们需要灵活的交互式数据分析方式,因此SCS在贝尔实验室非常受欢迎。
  • 但统计学家们发现使用SCS做统计分析时需要大量的Fortran编程,花在编程上的时间与取得的分析效果相比有些得不偿失。慢慢地,大家达成了一个共识——统计分析不应该需要编写Fortran程序。
  • 于是,为了同SCS进行交互,一套完整的高级语言系统——S诞生了。
  •  S语言的理念,用它的发明者John Chambers的话说就是“to turn ideas into software,quickly and faithfully(快速、准确地把想法转化成软件)”。

1993年,S语言的许可证被MathSoft公司买断,S-PLUS成为其公司的主打数据分析产品。由于S-PLUS继承了S语言的优秀血统,所以被世界各国的统计学家广泛使用。但好景不长,1997年R语言正式成为GNU项目,大量优秀统计学家加入到R语言开发的行列。随着R语言的功能逐渐强大,S-PLUS的用户渐渐地转到了同承一脉的R语言。S语言的发明人之一——John M. Chambers最后也成为R语言的核心团队成员。S-PLUS这款优秀的软件也几经易手,最后花落TIBCO公司,当然,这是后话。

John M. Chambers老爷子一直不遗余力地致力于R语言的发展,至今仍然是活跃的R语言开发者。在2009年第一期《R Journal》上,John M. Chambers是这样定义R语言的:

  •  an interface to computational procedures of many kinds(各类计算过程的接口);
  • interactive, hands-on in real time(具有可交互性,可以实时手动操作);
  •  functional in its model of programming(函数式编程模式);
  •  object-oriented,“everythingisanobject”(面向对象,“所有东西都是对象”);
  •  modular,built from standardized pieces(模块化,由标准化块构建);
  •  collaborative,aworld-wide,open-source effort(协作性,全球范围的开源力量)。

当然,R语言的这些特点很难在一篇短文里细致地体现出来。下面我将简要描述一下R语言的现状和未来。

现状及应用

R语言在国际和国内的发展差异非常大,国际上R语言已然是专业数据分析领域的标准,但在国内依旧任重而道远,这固然有数据学科地位不高的原因,国人版权概念薄弱以及学术领域相对闭塞的原因也不容忽视。R语言之所以能够被广大的数据分析工作者接受,这其中有诸多原因。

优势及特点

从R语言的发展历史上看,R主要是统计学家为解决数据分析领域的问题而开发的语言,因此R具有一些独特的优势。

  • 统计学家和前沿算法(3400+ 扩展包)。
  • 开放的源代码(自由且免费),可以部署在任何操作系统,例如Windows、Linux、Mac OS X、BSD、Unix。
  • 强大的社区支持。
  • 高质量、广泛的统计分析、数据挖掘平台。
  • 重复性的分析工作(Sweave = R + LaTeX),借助R语言的强大分析能力+LaTeX完美的排版能力,可以自动生成分析报告。
  • 方便的扩展性。

–可通过相应接口连接数据库,例如Oracle、DB2、MySQL。

– 同Python、Java、C、C++等语言进行互调。

–提供API接口均可以调用,例如Google、Twitter、Weibo。

–其他统计软件大部分均可调用R,例如SAS、SPSS、Statistica等。

–甚至一些比较直接的商业应用,例如Oracle R Enterprise、R add-on for Teradata、Sybase RAP等。

荣誉

R语言拥有这么多优势,很大部分原因在于它同样继承了S语言的优秀血统。S语言在1998年被美国计算机协会(ACM)授予了软件系统奖,这是迄今为止众多统计软件中“唯一”被ACM授奖的统计系统。

当时ACM是这样评价S语言的:

  •  永久地改变了人们分析、可视化、处理数据的方式;
  • 是一个优雅的、被广泛接受的、不朽的软件系统。

我们也可以查询到历年ACM授予软件系统奖的列表,这些优秀的软件系统与我们的生活息息相关:

1983年,Unix

1986年,TeX

1989年,PostScript

1991年,TCP/IP

1995年,World-Wid-Web

1997年,Tcl/Tk

1998年,S

1999年,The Apache Group

2002年,Java

2009年,《纽约时报》发表了题为 “Data Analysts Captivated by R’s Power”的社评,集中讨论了R语言在数据分析领域的发展,并引发了SAS和R用户广泛而激烈的争论。期间,辉瑞公司(Pfizer)非临床数据部的副总监Max Kuhn提到:

  • R已成为人们走出学校后必修的第二门外语,并且在R中有太多令人惊奇的代码;
  • 可以看看SAS的讨论列表,讨论量下降了很多。接下来的2010年,美国统计协会(American Statistical Association)将第一届 “统计计算及图形奖” 授予R语言,用于表彰其在统计应用和统计研究广泛的影响。

社团及活动

正如前文John M. Chambers所说,R也是一个社区,其线下活动非常活跃。在国际上,欧洲和美国每年会轮值举办一次“useR!”会议,届时来自世界各地的R用户齐聚一堂,讨论R语言的应用与科研方面的成果。

出于对统计计算的特殊考虑,每两年还会举办一次DSC会议(Directions in Statistical Computing),专门讨论R在统计计算方面的应用及理论研究。各大城市也会有相应的RGroup,方便本地的R用户聚会及交流。

在国内,每年会以统计之都【注:Capital of Statistics,是一个致力于传播统计学知识并将其应用于实际领域的网站,成立于2006年,宗旨是中国统计学门户网站、免费统计学服务平台】牵头,在北京和上海举办两次中国R语言会议,至2011年已在中国人民大学、华东师范大学等高校举办了四届R语言会议,历年的演讲主题涉及医药、金融、地理信息、统计图形、数据挖掘、制药、高性能计算、社会学、生物信息学、互联网等多个领域。从2012年起,台北将成为第三个举办中国R语言会议的城市——2012年6月的中华R语言会议台北场已经在筹划当中。

业界的认可

KDnuggets网站每年都会做一些数据分析、数据挖掘方面的专题问卷调查,在2011年8月的数据挖掘领域语言流行度的调查中,R语言位居数据挖掘领域所有语言之首(如下图所示),而紧随其后的SQL、Python、Java则在某一领域具有各自独到的优势。在数据挖掘范畴下,R语言同这些语言相互补足、相得益彰。

根据互联网搜索结果计算的TIOBE编程社区指数(Programming Community Index)【注:TIOBE (2011). http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html.】可能更能代表编程语言的流行度。在2011年12月份排名中,R语言依旧是统计领域中最为流行的语言,位列第24(Ratings 0.522%),而时常被放在一起比较的SAS则排名第31(0.417%)。

虽然KDnuggets网站的调查存在样本有偏的嫌疑,但毕竟代表了某一类人群的偏好,并且排名前五位的语言在各自的领域确有代表性。(数据来源 http://www.kdnuggets.com/2011/08/poll-languages-for-data-mining-analytics.html

挑战和未来

虽然R语言有诸多优势,但它并不是万能的——它毕竟是统计编程类语言。受到其算法架构的通用性以及速度性能方面的影响,因此其初始设计完全基于单线程和纯粹的内存计算。虽然一般情况下无关R的使用,但在当今大数据条件下,这两个设计思路的劣势逐渐变得愈加刺眼。好在R的一些优秀的扩展性包解决了上述问题,例如:

  • snow支持MPI、PVM、nws、Socket通信,解决单线程和内存限制;
  • multicore适合大规模计算环境,主要解决单线程问题;
  •  parallel R 2.14.0版本增加的标准包,整合了snow和multicore功能;
  • R + Hadoop在Hadoop集群上运行R代码;
  • RHIPE提供了更友好的R代码运行环境,解决单线程和内存限制;
  • Segue利用Amazon’s Web Services(EC2)。

这里需要着重提一下parallel包,该包是R核心团队为了解决大数据计算问题而在标准安装程序下新增的功能包

一些误区

很多人认为R语言是GNU开源项目软件,因此软件的使用是“没有任何保证”的。但在美国,R的计算结果被FDA(Food and Drug Administration) 所承认;并且有报告指出与其他商业软件相比,R的Bug数量非常少【注:UCLA (2006). R relative to statistical packages. Technical report, UCLA.】。

R开发的核心团队对于R的新功能持异常谨慎的态度,比如cairographics从2007年开始酝酿,直到上一个大版本(2011年)才引入到R标准安装程序;byte-compile功能更是经历了从1999-2011年近12年的孵化【注:Ripley,B. (2011). The r development process. Technical report,Department of Statistics,University of Oxford.】。从这个角度讲,R语言的代码质量以及运算结果的可信性是完全可以保证的。

当然,这里所说的是R的标准安装程序包,并不代表所有扩展包的质量。毕竟3400+的扩展包质量良莠不齐,虽然不乏一些优秀的包(如Rcpp、RODBC、VGAM、rattle),但必然存在一些扩展包质量不佳的情况。

应用的思考

R语言并不是人人都能接触到的语言,相对要小众很多,有些人即便接触到没准也搞不清楚R到底有什么用途。对于走上这条路的人,经常会有一些应用困难,比如从个人学习角度而言。

  • 虽然R语言的设计之初就是避免通过大量编程实现统计算法,但最基本的编程能力还是需要的,因此对于一般非计算机专业的工作者来说无疑提高了难度。
  • 还有很多人提到,R语言的学习曲线非常陡峭。但从我多年的使用经验上看,陡峭的学习曲线并不是因为R语言本身,而是隐藏在后面的统计知识很难在短时间内掌握的缘故。

从公司商业应用的角度而言,也存在一些不可回避的问题。

  • 首先是人力资源成本如何核算。
  • 软件成本问题,由于R是自由软件,可以随时随地下载,因此对于企业来说如何度量成本是一个问题。
  • R的技能核定并没有官方或机构标准,简历上“熟练使用R语言”可能没有任何意义。
  • 实际上,即便没有上述两个问题,企业想招到R相关的人才也不那么简单。
  • 对于大量工作已由其他软件实现(比如用SAS)的公司来讲,转化成本很高。
  • 技术支持获取的问题。

结语

R语言虽然诞生于统计社区,服务于数据,但现在随着数据渗透到各行各业,R语言已经远远超过统计范畴,相信不久的将来会有更多的朋友加入到R语言社区。

 

作者刘思喆,神州数码思特奇首席数据挖掘专家。9年R语言使用经验,《153分钟学会R》作者。

本文选自《程序员》杂志2012年02期,更多精彩内容敬请关注02期杂志

《程序员》2012年杂志订阅送好礼活动火热进行中

相关 [语言 卓越 统计分析] 推荐:

R语言:优雅、卓越的统计分析及绘图环境

- - 技术改变世界 创新驱动中国 - 《程序员》官网
R语言由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两人共同发明,其词法和语法分别源自Scheme和S语言,一般认为R语言是S语言【注:John Chambers,贝尔实验室,1972】的一种方言. R是“GNU S”,一个能够自由有效地用于统计计算和绘图的语言和环境,它提供了广泛的统计分析和绘图技术,包括线性和非线性模型、统计检验、时间序列、分类、聚类等方法.

R You Ready?——大数据时代下优雅、卓越的统计分析及绘图环境

- - 统计之都
R(R Development Core Team, 2011)语言由新西兰奥克兰大学的 Ross Ihaka 和 Robert Gentleman 两人共同发明,其词法和语法分别源自 Scheme 和 S 语言,R 语言一般认为是 S 语言(John Chambers, Bell Labs, 1972)的一种方言.

移动市场统计分析

- 壮壮爱 - 译言-每日精品译文推荐
来源Microsoft\'s Growth of Mobile Marketing. 译者chunfengqiushui. 人们相比以前花更多的时间在手机上,这个新的市场包括:智能手机、SEO(搜索引擎优化)、移动网站、地理定位和社交营销. 全世界40多亿在用手机中有10.8亿是智能手机,30.5亿是能收发短信的手机.

实时统计分析技术浅谈

- - CSDN博客推荐文章
    实时统计分析技术主要是为了满足数据应用中大家对数据的变化情况有一个较高时间灵敏度需求的情况. 应用要求能够近乎及时的反映数据的整体变化情况. 那么实时统计分析的核心关键点是实时性,也就是性能. 其还伴有另一个明确的特征,就是对于要统计的内容是十分明确的.     传统上,我们的数据统计分析方法是在一个关系数据库中创建表,然后将数据存储到表中.

SEOMOZ 2011排名因素的数据收集与统计分析

- liang - SEM WATCH
SEOmoz在此次的2011版搜索引擎优化排名因素的调查中,使用了让人耳目一新的统计学方法. 其中主要采用到的是Pearson积距相关系数. 而具体使用的方法,在http://www.seomoz.org/article/search-ranking-factors#methodology此文中有一些概述性的阐述.

分析报告、统计分析和数据挖掘的区别

- - 互联网分析
关于数据挖掘的作用,Berry and Linoff的定义尽管有些言过其实,但清晰的描述了数据挖掘的作用. “分析报告给你后见之明 (hindsight);统计分析给你先机 (foresight);数据挖掘给你洞察力 (insight)”. 你看到孙悟空跟二郎神打仗,然后写了个分析报告,说孙悟空在柔韧性上优势明显,二郎神在力气上出类拔萃,所以刚开始不相上下;结果两个人跑到竹林里,在竹子上面打,孙悟空的优势发挥出来,所以孙悟空赢了.

博客2011年度流量统计分析

- - 月光博客
  下面是使用Google Analytics(谷歌分析)中查看月光博客的2011年度流量统计分析,分析时间为今年一年时间,今年全年和去年全年的数据进行横向对比分析.   独立访问数增加了9.50%,综合浏览量增加了12.32%;每次访问页数为1.74,增加2.58%;跳出率74.06%,减少2.62%;平均网站停留时间00:01:39;增加14.09%;新访问次数百分比76.30%,减少1.86%.

统计分析抓住翻译国外论文的剽窃者

- - Solidot
懒惰的学生注意了,不要以为从网上找一篇论文,然后翻译到另一种语言,将其作为自己的成果不会被人注意到. 通过将文本分解对比两种语言中的相似词元素,或者利用双语字典,自动检查不同语言版本中有多少相同单词,西班牙Polytechnic理工大学 Alberto Barron-Cedeno的团队利用统计分析方法检查可疑文章.

使用R进行统计分析——回归分析

- - 蓝鲸的网站分析笔记
首先导入数据并创建名为lr_data的数据表. #读取并创建数据表 lr_data=data.frame(read.csv('lr_data.csv',header = 1)). 查看导入数据表的维度,结果显示456行,4列. #查看数据表维度 dim(lr_data) [1] 456 4. 查看数据表中各字段的名称,结果显示共有4个字段,三个变量和一个目标.

销售行业ERP数据统计分析都有哪些维度?

- - CSDN博客综合推荐文章
当前的企业信息化建设主要包括ERP系统、OA系统等. 企业希望实现信息系统数据的整合,对企业资源进行分析汇总,方便对企业相关数据的掌控从而便于对业务流程进行及时调整监控. 但是由于系统间数据的组合众多,对于数据的分析维度也有太多选择,由于人力和系统的支持度问题,对于这些可能性的维度都进行数据分析显然并不现实,那么一个销售行业如何针对行业特点、选定维度分析数据呢就成了一个需要思考的问题.