知春里@伟仔
01
选R还是Python?
“球鞋是买阿迪还是买耐克?”
“午餐吃肯德基还是麦当劳?”
“拿到阿里和腾讯的Offer,去哪一家?”
“你女朋友和你妈同时掉水里了,先救谁?”
面对这样的灵魂拷问,你能回答上几个呢?同样,如果你是数据分析的新手,或者正面临工作中项目分析工具的选型,那你可能正面临这样的问题:“选R,还是选Python?”,如果是这样,希望这篇文章能帮助到你。
02
R与Python都有啥?
R语言
相信各位有数理统计、金融计量、生物科学背景的同学对R语言都不陌生,而且他们的毕业论文和期刊论文的写作很可能已经用到了R。
R自带常用的统计分析函数和十分丰富的功能包支持:
- 可以用R快速生成1000条符合正态分布或卡方分布的数据,在分析相关的问题时,它可以帮你节省不少的时间;
- 你用Excel、PPT或者Tableau制作的图表和报告,用R也能一样的制作,而且可以程序化部署,定期自动更新数据生成图表和分析报告;
- 对常用的数据分析方法和机器学习算法都可以通过加载相关的包,直接调用函数,即使非常复杂的算法,也可以只通过两三行的代码搞定;
- R标配的IDE-Rstudio,用户有着很好的交互和使用体验。
Python语言
“假如某一天,你在马路边随机问一个刚放学的小朋友,可能他不知道R,但他一定听说过Python”。可见,要说近年来最风靡、最流行的计算机语言,绝对非python莫属了。
相对于C和JAVA语言,Python的学习门槛更低,无需繁杂的变量声明等特点,大幅减少程序员的操作负担,同时语法结构接近英文表达,易于读写,甚至被称为最“优雅”的编程语言。更重要的是,Python不仅运用于后端计算服务和前端网页开发,也同样能处理数据分析、机器学习的问题,具有很强的扩展性和兼容性,你能想到的它几乎都能做到,十分神奇。
R vs Python
R和Python 都是高级分析工具,各自都有众多的簇拥者和强大的社区支持,在网络爬虫、数据加工、数据可视化、统计分析、机器学习、深度学习等领域都有丰富第三方包提供调用。以下罗列R和python在各数据工作领域的资料信息,看看它们都有啥?R与Python,有强大的社区资源,可供学习和经验分享:
R语言 | Python语言 |
R journal 链接:https://journal.r-project.org Stack Overflow 链接:https://stackoverflow.com/Rweekly链接:https://rweekly.org/ | Python中文社区维基 链接:https://python-chinese.github.io/ Python中文学习大本营 链接:http://www.pythondoc.com/ PythonTab 链接:https://www.pythontab.com/ |
在不同数据场景下,R和Python有丰富的第三包可供加载和框架选择,可以很好帮助分析师、研究员以及开发员提高工作效率:
功能名称 | R语言 | Python语言 |
爬虫 | Rvest、Rcurl、httr、XML、Rwebdriver | Urllib、requests、bs4、selenium、splash |
数据读取 | Openxlsx、utils、readxl、xlsx、xlsx2、data.table | pandas |
数据加工(ETL) | Plyr、dplyr、reshape2、caret、tidyr、mice、stringr | numpy、pandas、sklearn、re |
数据可视化 | ggplot2、ggmap、lattice、gganimate、leaflet、REmap、plotly、rCharts、animation | Matplotlib、seaboen、bokeh、pyecharts、Pygal |
统计分析、回归分析 | Stats、tseries、lmtest、nlme | statsmodels、scipy |
机器学习 | Stats、glmnet | statsmodels、scipy |
深度学习 | Keras、MXNetR、darch、deepnet、H2O、deepr | TensorFlow、Keras、Pytorch、Theano、MXNET |
通过加载不同的功能包,用户可以在用少量的代码下,快速实现算法逻辑:
算法名称 | R语言 | Python语言 |
决策树算法 | Repart、party、C50、RWeka | sklearn |
集成算法 | adabag、randomForest | sklearn、xgboost |
贝叶斯算法 | klaR | sklearn |
K邻近算法 | Stats、kknn | sklearn |
支持向量机 | Kernlab、e1071 | sklearn |
神经网络 | RSNNS、neuralnet、nnet | Neurolab、tensorflow |
聚类算法 | stats、Nbclust、fpc、mclust | sklearn |
关联规则 | arules | mlxtend |
这么看,好像R和Python能做的事情都差不多,在主要的数据处理场景,双方都可以通过加载包和调用函数来实际解决问题。然而,二者虽然彼此功能覆盖,但却不能因此说他们之间没有区别,它们还是有各自独特的地方:
- 在深度学习领域,相对于R,Python对GPU有更好的支持,虽然R也支持KERAS运算,但是实现效率较低、成本较高,你可以想象这样的一个场景,当你使用R做深度学习时,经历一番搜索和研究,刚把需要的环境搭建好,人家用Python的已经可以提交项目结果了。因此,在深度学习领域,Python会有更好的表现。
- 在机器学习领域,Python与R算是难分仲伯,可能Python还是略好于R一些。最主要原因是每当有新的套件或者算法时,基本是用Python先开发出来。Python这样的优势还体现在网络爬虫领域,尤其是研发人员在进行一些比较复杂的爬虫任务时,Python会有更多的资源,包含方法和套件。除此之外,在计算效率、计算稳定性等方面两者并无显著差异。
- 在统计分析领域,R的综合表现更优于Python。R最早是统计学家为统计工作所开发的工具,他们甚至通过R代码和程序来交流分析思想,许多比较复杂的统计模型和统计检验方法在R上都可以比较轻松的实现。本人也曾参与过一些项目的统计分析工作,并借机对比Python和R处理同样任务的执行情况,R确实会比Python方便不少。
在数据可视化领域,虽然Python有一些很好的可视化程序库,例如Seaborn、Bokeh和Pygal,但与R对比,在Python中进行可视化有些复杂,可调节的参数较少,且图表样式的控制会更麻烦一些。对于一个分析师或一个研发人员,在历经“艰辛”得到分析结果后,却需要花很多时间调整可视化展示结果,其实是会缺少耐心的,而R在这方面的会给出更好的体验。
对比Python,R还有一个不得不提的优点,就是基于web交互界面应用框架Shiny,和Desktop版Rstudio,它们安装简单,部署方便,在第三方资源包管理、脚本编辑、变量管理、数据预览、结果呈现方面都为使用者提供了很大的便利。
另外,R与Python也并不是完全孤立的。在R中,用户可以通过rPython包运行Python代码,调用Python的函数。而在Python中,也可以使用RPy2包运行R代码,同样提供了一个从Python到R的输送路径,基本实现了用户“取二者精华而用之“的美好愿景。
本次对R和Python的分析更多的体现在“定性”层面,关于“定量”层面的对比(计算性能方面的对比),如果有合适机会,将会继续分享。想了解“定量”层面对比的读者,可以阅读以下网络上“前辈‘们的文章:
推荐文章1:如何将Python和R整合进一个数据分析流程https://mp.weixin.qq.com/s__biz=MzA3MTM3NTA5Ng==&mid=2651054566&idx=1&sn=ba46bf709bc61f423c71e3d71877136e&scene=21#wechat_redirect推荐文章2:大数据分析Python和R的优缺点https://zhuanlan.zhihu.com/p/183876253推荐文章3:Python与R的争锋:大数据初学者该怎样选?https://www.lagou.com/lgeduarticle/70218.html
03
R与Python选哪个?
那么,说了这么多,R与Python到底应该学哪个?通过以下两个问题的回答,希望你的心中能有你想要的答案。
第一个问题是:你的公司同事们现在使用哪种语言?
所有的工具的使用的最终目的,是为方便发现问题和为问题寻求最优解决方案的,因此建议学习某种语言前,应该以解决问题为首要目标。
如果你发现你的公司或者你所在的部门已经开始运用某种语言作为分析工具(不局限于Python或者R),那么建议你优先考虑该语言,因为你的“所学“可以立马转化为你的”所用“,进而反过来继续促使你”学“,周而复始,对知识频繁的输入和输出,这是最有效的成长和价值体现方式。不仅如此,这样的方式也方便你与同事分享和维护代码,提高沟通和协同工作的效率,更容易实现公司成果产出,这比单纯讨论哪种语言更”牛逼“更为重要。
第二个问题是:你准备花多少时间学习?需要解决什么样的问题?
面对问题,当你精力有限时,你不得不面临指标是投入产出比,即,如何解决同样的问题花最少的时间,或者花同样的时间解决更多的问题。
在学习时间方面:刚开始学习R时有一个陡峭的学习曲线,到后面趋于平缓,因此R的入门门槛较高,但是一旦了解了最基本的知识,就能比较容易的学习更高级的内容。而与之对应的是,Python语句易读易懂,学习曲线起始阶段相对较低且平缓,到后面会逐渐陡峭,也就是Python入门门槛低,但是到后续更深层的高级应用时,学习会比较困难。
在问题类型方面:经过上文阐述,在深度学习、机器学习、网络爬虫和API构建,Python的综合实力要优于R;而在数理统计分析、数据处理、数据可视化及IDE交互体验,R的综合表现要优于Python。
因为文章着重讨论“数据分析,R与Python怎么选?”,也考虑数据分析师的职业发展路径,因此在统计分析、数据可视化、数据处理、机器学习、深度学习这五个相关的领域,结合时间成本,给出建议如下:
场景分类 | 统计分析、数据处理、数据可视化 | 数据处理、深度学习、机器学习 |
时间比较充裕 | 选R | R和python结合使用 |
时间比较不充裕 | 选R(偏数理研究背景)/ 选python(偏工程开发背景) | 选Python |
写在最后
文章的建议是在特定场景和有限资源的前提下,选择R或者Python开始数据分析师“菜鸟时期”的工作。但是,R和Python在实际运用中它们各有所长,各具价值,日后随着解决的问题越多,值得深挖的点也会越来越多,如果还是专注于”R还是Python?”的问题,那么就会忽视这两者给数据工作的带来的最大价值。
伟仔还是强调,任何工具的学习和运用,最终的目的都是帮助更好的发现问题和解决问题。至于R还是Python,当你还在纠结这个选项的时候,许多团队已经同时装备着R和Python,解决了一个又一个问题了!