编程语言及工具
R编程语言在数字分析与机器学习领域已经成为一款重要的工具。随着机器逐步成为愈发核心的数据生成器,该语言的人气也必然会一路攀升。不过R语言当然也拥有着自己的优势与缺点,开发人员只有加以了解后才能充分发挥它的强大能力。
正如Tiobe、PyPL以及Redmonk等编程语言人气排名所指出,R语言所受到的关注程度正在快速提升。作为一款诞生于上世纪九十年代的语言,R已经成为S统计编程语言的一类实现方式。已经拥有十八年R编程经验的高校教授兼Coursera在线平台培训师Roger Peng指出,“R语言已经成为统计领域最具人气的语言选项”。
“我之所以喜爱R语言,是因为它易于从计算机科学角度出发实现编程,”Peng表示。而R语言随时间推移正呈现出愈发迅猛的发展态势,并成为能够将不同数据集、工具乃至软件包结合在一起的胶水型语言,Peng解释道。
“R语言是创建可重复性及高质量分析的最佳途径。它拥有数据处理所必需的一切灵活性及强大要素,”在线编程教育机构Code School数据科学家Matt Adams指出。“我用R语言编写的大部分程序实际上都是在将各类脚本整理到项目当中。”
R语言的优势主要体现在其软件包生态系统上。“庞大的软件包生态系统无疑是R语言最为突出的优势之一——如果某项统计技术已经存在,那么几乎必然存在着一款R软件包与之对应,”Adams指出。
“其中内置有大量专门面向统计人员的实用功能,”Peng表示。R语言具备可扩展能力且拥有丰富的功能选项,帮助开发人员构建自己的工具及方法,从而顺利实现数据分析,他进一步解释称。“随着时间的推移,越来越多来自其它领域的用户也被吸引到了R身边来,”其中包括生物科学乃至人文学科等。
“人们能够在无需申请权限的前提下对其进行扩展。”事实上,Peng回忆称多年之前R的使用方式就已经给相关工作带来了巨大便利。“当R语言刚刚诞生之时,它最大的优势就是以自由软件的姿态出现。其源代码以及所有一切都可供我们直接查看。”
Adams也表示,R语言在图形及图表方面的一切能够都是“无与伦比”的。其dplyr与ggplot2软件包分别用于进行数据处理与绘图,且“能够非常直观地提升我的生活质量,”他感叹道。
在机器学习方面,R语言的优势则体现在与学术界的强大联动效应,Adams指出。“在这一领域的任何新型研究成果可能都会马上以R软件包的形式体现出来。因此从这个角度看,R语言始终站在技术发展的尖端位置,”他表示。“这种接入软件包还能够提供良好的途径,帮助我们利用相对统一的API在R语言环境下实现机器学习研究。”Peng进一步补充称,目前已经有众多主流机器学习算法以R语言作为实现手段。
说了这么多优势,R语言当然也存在着一定不足。“内存管理、速度与效率可能是R语言面临的几大最为严峻的挑战,”Adams指出。“在这方面,人们仍然需要努力推动——而且也确实正在推动——其进展与完善。此外,从其它语言转投R怀抱的开发人员也会发现后者在某些设定上确实有些古怪。”
R语言的基本原理来自上世纪六十年代出现的各类编程语言,Peng解释道。“从这个意义上讲,R语言在设计思路上属于一项古老的技术成果。”这种语言的设计局限有时候会令大规模数据集处理工作遇到难题,他强调称。因为数据必须被保存在物理内存当中——但随着计算机内存容量的不断提升,这个问题已经在很大程度上得到了解决,Peng指出。
安全等相关功能并没有被内置在R语言当中,Peng指出。此外,R语言无法被嵌入到网络浏览器当中,Peng表示。“我们不能利用它开发Web类或者互联网类应用程序。”再有,我们基本上没办法利用R语言当作后端服务器执行计算任务,因为它在网络层面缺乏安全性保障,他表示。不过Amazon Web Services云平台上的虚拟容器等技术方案的出现已经在很大程度上解决了此类安全隐患,Peng补充道。
长久以来,R语言当中始终缺少充足的交互元素,他表示。但以JavaScript为代表的各类编程语言介入其中并填补了这项空白,Peng指出。虽然我们仍然需要利用R语言处理分析任务,但最终结果的具体显示方式则可以由JavaScript等其它语言来完成,他总结道。
不过Adams与Peng都会R视为一种易于接受的语言。“我本人并没有计算机科学教育背景,而且从来没想过要当一名程序员。将编程基础知识纳入技能储备当然很不错,但这并不是上手R语言的必要前提,”Adams指出。“我甚至并不认为R语言只适用于程序员。它非常适合那些面向数据并试图解决相关问题的用户——无论他们的实际编程能力如何,”他强调称。
#p##e#
就一个R和SAS精通程度几乎相同,在两种环境下都做过比较大(moderately big, ~xx Gb)的数据分析,与其他语言环境嵌合(SQL, Perl, etc.。。),使用过的个人(统计专业人员,非编程专业人员)的感受而言如下:
1. 免费。。。 开源。。。 (这是最重要的一点好不好,也是SAS流行于公司,R流行于研究机构和大学的最主要原因)
2. 是专门为统计和数据分析开发的语言,各种功能和函数琳琅满目,其中成熟稳定的一抓一把
3. 语言简单易学。虽与C语言之类的程序设计语言已差别很大(比如语言结构相对松散,使用变量前不需明确正式定义变量类型等等),但仍保留了程序设计语言的基础逻辑与自然的语言风格。我这样说可能让人听得云里雾里,但是如果你对SAS或者SPSS有一点点了解,就会明白我的意思了。。。
4. 小。。。 安装程序只有50Mb左右,比起某些死贵且3个G的付费软件真的是超级迷你小巧玲珑。。。 因为体积轻便,运行起来系统负担也小。
5. 同各种OS的兼容性好。我两台本本一台Windows,一台Linux,都用得很顺手。相比之下,你有见过人在Mac上用SAS吗。。。 这人是要多么的想不开。。。 =。 =
6. 因为用的人越来越多,又是开源,有很多配套的“插件”为其锦上添花。比如xtable里有一个函数可以直接将R里的表格导出为TeX格式;另有RStudio的插件让你可以在同一个环境里写TeX跑R并可在你的TeX文件中插入你的R代码,多么的贤良淑德。。。 (这个插件我没用过,不过我同学一天到晚在用)
7. 有R GUI和RStudio两种风格供君选择,说实话我觉得这两种风格已经涵括了大多数人的使用偏好。。。
8. 已经提过了开源,还想再强调一下。各种包和函数的透明性极好,这使得对函数的调整和改良变得非常便利。只需要把源码调出来,自己稍微修改一下就可以了。这种事情放在任何其他统计软件里都近乎奢望。
9. 如果你做Bayesian,用R你有OpenBUGS, WinBUGS, JAGS等各种成熟活泼的包裹,很多语言又简单又附带各种预设的plot,你只需调用即可;还可以自己写MCMC。如果你用SAS/SPSS/Stata,你可以。。。 @@? = =bbb
10. 漂亮又灵活的图,大家也都已经讲过了。原本不是什么特别突出的长处(有则好,没也没啥),不过现在数据可视化越来越热,也就一跃成为主要优点了。
1. 对大文本(text data)处理极差。。。 或者说data management本就不是R的强项。SAS于R的最大优势之一可能就在于它兼顾了数据分析和数据管理。在SAS里对数据进行各种复杂操作都相对容易,只需要简单的DATA STEP(必要时结合PROC SQL)即可完成;在R里可就真的是千辛万苦。。。 虽然也有相应的aggregate, merge之类的函数,但是大都不太好用。这也是为什么大家常常把数据(尤其是数据大时)在别的环境下整好/分割好再喂给R。人家术业有专攻,数据管理真是有些难为它了。
2. 内存管理和平行处理(parallel processing/programming)都为人诟病。数据小时没有感觉,数据大了就各种报错。。。 =。 =
3. package的可靠性问题。我第一门完全使用R做作业的课是门统计课,教授已经六十多岁,见过各种统计软件的出生发展和湮没。她同我们说到R时第一句话就是Never use a package before you understand the manual and confirm the validity of the functions. 也就是包裹虽然好,使用需谨慎。主要原因还是在于开源。不常用的package一定要搞清楚函数的用法和核实过输出,不然真的不推荐使用。我个人也是倾向非常用函数尽量自己写,至少错了也容易debug.。。
4. 不得不提的package的版本问题。 就算你确认了包裹的可靠性并熟知了各个变量要怎么用,还是可能掉入潜在的陷阱=。 = 讲个真事:去年工作的时候一个项目是使用11年某项目的一个贝叶斯模型分析新的数据。当年写代码的人因为相信末日说两年前就已经辞职环游世界去了,于是我只好独自研读他的代码。第一步,很自然的,就是重复当年的分析结果。这时发现当年他用的一个package和现在的R已经不兼容,于是就下载了这个package的最新版本。结果有一个简单的credible interval怎么都重复不出来。。。 怎么怎么都重复不出来。。。 我都快绝望了。最后经各种推理验证,发现这个区别源自于新旧版本的函数内部在对数据排序之后对NaN的不同处理。。。 而这个小小的修改未在任何地方留下任何文字记录。所以怎么说呢。。。 很多时候还是写自己的程序靠谱哇。。。
5. 当你跑比较大的simulation,对效率有要求的时候,有时还是不得不用C,这可能是10小时和10分钟的差别,毫不夸张。
#p##e#
虽然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语言在现实中的应用有哪些?主要有以下几种
“哈佛商业评论”将数据科学家命名为“21世纪最性感的工作”。 Glassdoor将其命名为2016年的“年度最佳工作”。随着IoT设备的诞生,创建了可用于做出更好决策的TB级和TB级数据,数据科学是一个没有其他方法可以追溯到的领域。
简单的解释说,数据科学家是一位具有额外资产的统计学家:计算机编程技能。 像R语言这样的编程语言给数据科学家超能力,让他们能够实时收集数据,执行统计和预测分析,创建可视化和向利益相关者传达可行动的结果。
大多数数据科学课程包括R语言课程中,因为它是数据科学家最喜欢的工具。
R语言是统计学家中最流行的编程语言。 事实上,它最初是由统计学家为统计学家建立的。 它有一个丰富的软件包存储库,拥有超过9100个软件包,您可以用于计算每个统计功能。
R语言的表达语法允许研究人员 - 即使是来自非计算机科学背景的研究人员,可以从各种数据源快速导入,清理和分析数据。
R语言还具有图表功能,这意味着您可以绘制数据并从任何数据集创建有趣的可视化图形。
R语言已经在预测分析和机器学习中发现了很多用途。它具有用于常见ML任务的各种包,如线性和非线性回归,决策树,线性和非线性分类等等。
从机器学习爱好者到研究人员的每个人都可使用R语言来实现机器学习算法,如金融,遗传学研究,零售,营销和医疗保健等领域。
全部0条评论
快来发表一下你的评论吧 !