数据科学界西岳论剑:R与Python顶峰对决
假如你是数据阐明规模的新兵,那么你必然很难决议——在举办数据阐明时,到底应该利用哪个语言,R照旧Python?在网络上,也常常呈现诸如“我想进修呆板语言,我应该用哪个编程语言”可能“我想快速办理问题,我应该用R照旧Python”等这类问题。尽量两个编程语言今朝都是数据阐明社区的佼佼者,可是它们仍在为成为数据科学家的推荐编程语言而战斗。本日,就让我们从数据科学的角度,一步步较量这两大编程语言。
#1 对阵两边先容
Ladies and Gentlemen,让我们谨慎的先容本日的对阵两边:R和Python!R语言当前版本是2015年6月更新的3.2.1版。Python 2当前版本是2015年5月更新的2.7.10版,Python 3当前的版本是2015年2月更新的3.4.3版。
R语言是Ross Ihaka和Robert Gentleman于1995年开拓的,作为贝尔尝试室S编程语言的一种实现,其开拓情况主要由C语言,Fortran和R来完成。Python的宣布年份其实远在R之前。Guido Van Rossum于1991年开拓完成了Python,并由Python软件基金会(PSF)认真其成长。其开拓灵感主要来自C语言和Modula-3,部门来自ABC语言。Python的名字取自喜剧蒙提·派森的航行马戏团(Monty Python’s Flying Circus)。
从定位角度看,R致力于提供更好的,对用户友好的数据阐明、统计阐明和画图模子;而Python则强调出产效率和代码的可读性。
两边的用户群也有必然的差别。R主要用于学术和研究规模,如今正在快速拓展其企业市场的运用。Python的利用者,是那些想深入钻研数据阐明可能应用统计技能的措施员,以及向数据科学寻求帮护的开拓者。用一句话总结:“越靠近统计研究跟数据阐明人,越倾向R;越靠近工程开拓工程情况的人,越倾向Python”。
R和Python都获得大量的社区支持,包罗邮件列表(Mailing Lists)、用户孝敬的文档、以及Stackoverflow网站。另外,R还可以从研究人员、数据科学家、统计学家和数量阐明专家哪里获得更多的支持;而Python则从开拓者和措施员哪里获得的支持。
从实用性来讲,R通过几行代码就可以写出统计模子,尽量R有样式表,但并不是每小我私家都利用它们,可以用若干种方法写出同样的成果。在Python中写代码和调试代码则更容易一些,主要是因为它的“美妙”语法。可是代码的缩进会影响它的意思。而且,在Python中,永远只有一种方法来写同样的成果。
在机动性方面,在R中利用巨大的公式很容易。各类百般的统计检讨和统计模子都是现成的而且容易利用;对比R,Python在完成以前没有做过的新奇的工作上,很机动,开拓人员也会用它写网站或其它应用的剧本。
关于易进修性,开始进修R时有一个陡峭的进修曲线,一旦相识了最根基常识,就能很容易地进修更高级的常识。因此,对付有履历的措施员,R并不难。发起R的进修者查察DataCamp上的操练和教程。
由于Python垂青可读性和易用性,使得它的进修曲线相比拟力低而且平缓。因此,对付低级措施员,Python 被认为是一个很好的编程语言。对付Python进修者的发起是,实验用《笨步伐学Python》进修的同时看视频做操练。
两者都有本身的代码库。CRAN(The Comprehensive R Archive Network)是一个很大的R包库,用户很容易为其孝敬代码。R包是一个包括R函数、数据和编译代码的荟萃,R包在R顶用一行代码即可安装。PyPi(Python Package Index)是Python软件库,用户可觉得PyPi孝敬代码,但实践起来有点坚苦。
计较机科学传授Norm Matloff 曾说过,“Python并未成立起一个能与CRAN媲美的庞大的代码库,R在这方面领先庞大。可是,统计学并不是Python的中心任务。”
其实R与Python并不是完全孤独的,在R顶用户可以通过rPython包运行Python代码,从Python通报或获取数据,挪用Python函数可能要领。而在Python中也可以利用RPy2包运行R代码,这提供了一个从Python到R的底层接口。
以上,从定性的角度举办了较量。此刻,看看两边的定量数据。小二,上数据!
先看人气排名,下图左边为2013-2015年2月R和Python人气较量(Tiobe指标),右边为Redmonk排名,它较量了GitHub和Stackoverflow上编程语言的相对机能。#p#分页标题#e#
再看事情和薪资,2014 Dice Tech薪金观测显示,具有高薪技术和富厚履历的R利用者的平均人为为115,531美元,而Python则为94,139美元
#2 数据阐明疆场
首先是用途。R的主要应用场景是,当数据阐明任务需要独立运算,可能需要在单个处事器上阐明;Python的一般应用场景是,数据阐明任务需要与网页应用整合,可能当统计代码需要并入制品数据库。
按任务范例分别,做摸索性研究时,R语言很适合初学者。几行代码便可写出统计模子;而作为一个完整成熟的措施语言,Python是为产物利用举办算法执行的一个东西。
数据处理惩罚本领上,利用R举办数据阐明很容易上手,因为它具有复杂数量的包、利便利用的检讨以及在利用公式方面的优势。做根基数据阐明时,R语言更利便,不需要特别安装包,大的数据库需要利用雷同data.table和dplyr包。已往,Python数据阐明包的年少期曾是个问题,可是此刻已经获得很大的改进,用Python举办数据阐明时,你需要利用NumPy、Pandas和其它的措施包。
如何上手也是比拼的一个方面。R的集成开拓情况(IDE)可以选择RStudio。R更受接待的措施包有:dply、plyr和data.table(易于操纵数据),stringr(易于操纵字符串),zoo(处理惩罚法则和犯科则时间序列),ggvis、lattice和ggplot2(数据可视化),caret(呆板进修),发起初学者查察DataCamp上的课程和教程。
Python的集成开拓情况(IDE)有许多,个中Spyder和Python Notebook更受接待。发起初学者查察Rodeo(被称为“Python到数据科学IDE”)。Python更受接待的措施包有:pandas (易于操纵数据),SciPy/NumPy(科学计较),sckikit-learn(呆板进修),matplotlib(用于作图),statsmodels(数据摸索、统计模子预计、统计检讨和单位测试)。
[发起]给Python初学者推荐“8步从Python白丁到专家”(点击查察)。若想相识更多Python包,请看“数据科学家之5个较佳Python库,为初学者定制的教程” (点击查察)。
关于技能支持,利用R举办数据阐明有许多技能支持,包罗Stackoverflow、Rdocumentation,(R文档整合)和R-help 邮件列表。
Python的数据阐明问题可以通过以下方法得到支持:Stackoverflow和邮件列表。
邮件列表包罗pydata(关于利用Python举办数据阐明和Pandas包)、pystatsmodels (Statsmodels和pandas包的问题)、numpy-discussion (Numpy包的问题)和sci-py user(大部门是SciPy可能科学问题)
同样,定性比拟后再看看R和Python的量化战争!
从整体数据来看,在做数据阐明时利用R的人数要多于利用Python(下图左:2014用于数据阐明的措施语言)。在2014年,有23.45%的人同时利用R与Python(下图右:2014年R和Python利用阐明)。在2008-2014年5月之间,Stack Overflow上问题标签是”R” 和/或 “Python”、“Pandas”的数量,R明明领先。在2015年3月12日到4月10日之间,在twitter上统计rstats, python numpy, python pandas和numpy这几个要害词,活泼度较大的是rstats。
事情和薪资方面,O’Reilly 2014数据科学人为观测显示,R和Python平均年收入范畴都是11万美元到12.5万美元之间。Indeed.com上R与Python的事情趋势显示,Python的事情需求量高于R。
此刻许多人都选择同时利用R和Python。有的计策是操作两种语言较好的部门——初始阐明在R语言中举办,在需要更严格的阐明、团队事情可能宣布代码和数据产物时开始转换到Python。有人是用R举办统计检讨、绘图和查抄大数据,必需写算法时,则更倾向于用Python。也有人说,更倾向于在通用语言中做数学计较,而不是用数学语言举办通用编程。
[发起]选定语言只是万里长征第一步。假如你想要成为数据科学家,推荐你看一篇受接待度很高的文章“天龙八步:8步让你酿成数据科学家”(点击查察)。
#3 总决选:优缺点
此刻来较量一下两者的优缺点。R较大的利益在于其作图本领,俗话说,一图抵千言,对比单看原始数据,可视化后的数据能被更高效、更有效的领略。操作ggplot2 可以绘制美妙的图表,利用图表算法缔造图层、定制图表;lattice易于展示多变量干系;rCharts从R中成立、定制和泛起交互式Java可视化;googleVis操作Google表格东西在R中可视化数据;用ggvis对一个网页欣赏器举办渲染时,可以实现图像的交互式语法,譬喻在R中可视化Facebook挚友。
IPython较大的利益在于,IPython Notebook使得用Python阐明数据变得容易,它可以将你的阐明放在一个文件中。用Python处理惩罚数据可以简化事情流程。它是一个组合,个中包罗:交互式Python数据摸索、在一个情况下为文档提前写好措施、文本和公式。你可以跟同事分享条记本,而且不消他们安装任何对象。IPython大大淘汰了打点代码、输出和条记本文件的时间,这样可以有更多的时间做实际事情。#p#分页标题#e#
R 的生态系统是它的另一项优势,先进的界面措施包使其能与开源语言举办交换,这让你把事情流程连成一串,对数据阐明尤其有用。措施包可以从:CRAN( “Task Views”列出了大量可用的R语言措施包)、Bioconductor (生物信息学的开源软件)、GitHub (基于网络的Git库主机处事)得到,在Rdocumentation(较早的R文档聚合器)中很容易搜索到这些资源。R的用户社区也做得很是优秀,包罗Meetup群组(个中一些由R用户社区的公司扶助)、博客和社交网络。
Python是一种通用语言,其另一个利益在于它的可读性和进修曲线;同时,Python简朴直观,它对可读性的重视更放大了这一特征。这就表明白为什么Python的进修曲线相对平缓,因而许多措施员很熟悉它。而且,你写一个措施的速度也获得正面影响:编程时间更少了,玩耍时间更多了。
Python的测试框架确保代码的可反复性和靠得住性,一个内置低壁垒的测试框架可以或许支持一个很好的测试包围率。其测试东西分类包罗:UnitTest Python(尺度库中较早的测试框架)、Nose (UnitTest的扩展,许多措施包利用它,如pandas)、DocTest (基于Python尺度表明器的输出很容易生成测试),Pytest (当举办巨大的函数测试时,可以举办小测试)。
R有一个不行替代的优势:统计的通用语言。R是统计学家为统计学家开拓的,他们通过R代码和措施包交换统计阐明思想和要领,纵然是不管帐算机编程语言的统计学家、工程师和科学家也会以为R容易利用,因此提高了财富回收率。R也被用在金融、药物、医学和市场等规模,而且其作为贸易阐明东西的职位正在不绝增长,在贸易规模的最重要代价正被一些有才气的人所相识利用,R在学术界已经被遍及利用。R的利用量正在快速增长,其在学术文章中处于常用软件排名第三的位置(紧随SAS和SAP),且这一位置正在被固定。
与R对比,Python是一个多用途语言。作为一个被大大都措施员所熟知的普遍且易于领略的编程语言,Python也能把差异配景的人聚积到一起。譬喻,一些机构不想雇佣数据阐明师可能雇佣新的数据阐明师较量坚苦,就会培训老员工利用Python。这意味着,Python是一个现成的编程语言,它可以或许作为一个单独的东西与你事情流程中任意一部门团结。
两者的缺点是什么呢?R运行慢,而这一点是存心为之。R的设计目标是使数据阐明和统计阐明变得容易,而不是为了让你的电脑“活得更轻松”。它有一个不完整的非正式界说,主要通过实现事情的方法来界说。除了设计和实现,大量R代码慢的原因很简朴——代码写的很差。为改进这一点,可利用提高R机能的措施包:pqR(R翻译器的一个新版本)、renjin、FastR(在Java中从头写R)、Riposte(一个很快的理会器和JIT)、RevoScaleR(用来处理惩罚大数据的贸易软件)、Foreach(用来提高并行编程的贸易东西)。
Python较大的问题在于其可视化,选择数据阐明软件时,可视化是一个重要原则。固然Python有一些很好的可视化措施库,包罗:Seaborn(基于matplotlib的措施库)、Bokeh(交互式可视化措施库)和Pygal(成立动态可伸缩向量图形(SVG))。但Python提供的可选择措施库过多,且与R比拟,在Python中举办可视化有些巨大,泛起的功效也并不是很令人满足。
因为由统计学家开拓,R另一个缺点是它陡峭的进修曲线。尽量任何人都可以利用GUI获得功效,但没有人可以或许完全避开写措施,而且找措施包很花时间。你可以通过利用正确的东西办理这个问题,操作以下这些资料可以帮组你降服这个陡峭的进修曲线:包罗DataCamp上的操练和教程和上Rdocumentation搜索措施包。
Python另一个问题是它还不成熟,造成一种更受限制的方法去思考数据阐明。停止今朝,没有模块可以或许取代根基R措施包的100个。Python正在尽力客服这一问题, 个中一些办理步伐包罗:IPython中的R扩展答允在IPython Notebook中利便利用R;现有资源和约命名堂充当了一个重要脚色:Matlab凡是用于宣布开放的研究代码,Python用于数学,R 用于统计。Mlabwrap 毗连了Python和Matlab,可是有些缺点,因此你需要学会两种措施语言,而且需要有一个Matlab许可证。#p#分页标题#e#
两种语言有许多配合利益。其一是开源,R和Python都是对任何人免费,其它统计软件(如SAS和SPSS)都是贸易东西。
其二是他们都是高级东西,许多统计学的新希望会先在R和小范畴的Python开源措施包中呈现,这比贸易平台要早。
第三是它们都提供在线社区,相对贸易软件提供收费的用户支持,R和Python操作在线社区对它们相应的用户提供支持。
最后,二者利用者的薪水都较量高,按照O’Reilly 2013数据科学人为观测显示,主要利用开源东西的数据科学家(130,000美元)比利用贸易东西的数据科学家(90,000美元)的人为中值更高。
#4 那么赢家是……最后的功效是平局!哪个东西更适合,取决于你这个数据科学家如何去挑选一个最适合你需要的措施语言。下面的问题可以指导你做出抉择。1.你要办理什么样的问题2.你进修一门措施语言的本钱?进修一个能更好地办理问题的新系统会耗费时间,但依旧利用你熟悉的系统并不能办理你要办理的问题。3.在你的规模最常用的东西是什么?在你的规模中尚有什么可用的东西,它们和那些常用东西有什么干系?
参考资料