R和Python到底谁更好如何将Python与R同时应用在同一个项目

如果你从事在数据科学领域,提到编程语言,一定能马上想到 r 语言和 python语言(以下分别简称 r、python)。现在更多时候大家都把它们两个放在一起对比,进行“二选一”,而不是把两个都为自己所用。其实,无论是 r 还是 python,两个都是很优秀的工具。
如果你在 google 中搜索“r vs python”,可以看到很多关于二者谁更好的讨论。
出现这种现象的原因之一是,使用者们基于自己所使用的编程语言,将数据科学领域分为几个阵营,包括 r 阵营和 python 阵营。两个阵营的人都十分相信自己选择的语言远好于对方的。所以在某种程度上,这种分歧并不全部来自于工具本身,也有来自使用者的原因。
为什么不同时使用两种语言?
其实,在数据科学的圈子里,也存在同时使用 python 和 r 的人,但比例是非常小。另外,有一大部分坚持使用某一种语言的人,同时也希望能掌握另一种语言的某些功能。比如,r 的使用者有时候很需要 python 的面向对象属性,与此同时,一些 python 用户也想使用 r 强大的统计分布功能。
上图显示了由 red monk 在 2018 年第三季度所进行的调查的结果。此结果基于 stack overflow 和 github 上语言的受欢迎程度,很明显 r 和 python 的得分都很高。从语言本身来说,并不是限制我们不能在同一项目中使用两者的原因。而我们的最终目标要做更有洞察、有价值的分析,而选择哪种语言不应该成为这一过程中的阻碍。
纵观 r 和 python
下面我们可以先从几个不同方面对比这两种语言,分别看看它们的优缺点。
python
自 1991 年发布以来,python 就极其受欢迎,尤其在数据处理方面被广泛应用。它如此受欢迎有以下几个原因:
面向对象语言
通用性
可扩展性强,强大的社区支持
易于理解和学习
pandas、numpy 和 scikit-learn 等包使 python 成为机器学习的极佳选择
然而,与 r 不同的是,python 没有用于统计计算的专用包。
r
r 首次发布于 1995 年,随即成为数据科学领域应用最广的工具之一。
几乎包含你能想到的任何一种统计应用工具包。当前 cran 有超过 10 万个包。
具备极好的可视化工具包,如 ggplot2。
能够进行独立分析。
从性能上来说,r 并不是速度最快的语言,而且在处理大型数据集时,可能对内存消耗较大。
“双剑合璧”
是否可以同时运用 r 超凡的统计能力和 python 的编程能力呢?我们可以轻松地将 sql 代码与 r 或 python 相结合写成一个脚本,为什么不把 r 和 python 也结合一起使用呢?
将 python 与 r 同时应用在同一个项目中,有两个基本的手段,接下来就和大家分享这两个方法:
r within python
pyper
pyper 提供了一种可以让 r 连接 python 的简单途径,即通过管道 (pipe)。pyper 也存在于 python 的工具包之中,提供了更便捷的安装方式。当 python 和 r 之间不需要频繁进行数据传输时,pyper 非常适用。当我们通过管道运行 r 时,python 程序在子流程控制、内存控制和跨操作系统(包括 windows、gnu linux 和 mac os)移植的灵活度都比较高。
pyrserve
pyrserve 使用rserve作为 rpc 的连接网关,通过这种连接方式,用户可以在 python 中设置 r 的变量,同时 r 的函数也可以被远程调用。
rpy2
ryp2 可以在 python 进程中运行内嵌的 r 语言。它创建了一种框架,可以将 python 对象转化为 r 对象,再把它们传入 r 函数,最后将 r 输出的结果传回给 python 对象。
在 python 中调用 r 语言的优点之一是,我们可以在 python 中方便地使用 r 语言强大的工具包,如 ggplot2、tidyr、dplyr 等。下面我们通过一个简单的例子来看看如何在 python 中使用 ggplot2。
basic plot
https://rpy2.github.io/doc/latest/html/graphics.html#plot
geometry
https://rpy2.github.io/doc/latest/html/graphics.html#geometry
关于 rpy2 的资料
rpy2官方文档
https://rpy2.github.io/doc/latest/html/index.html
rpy2: combining the power of r + python for data science:
https://community.alteryx.com/t5/data-science-blog/rpy2-combining-the-power-of-r-python-for-data-science/ba-p/138432
accessing r from python using rpy2:
https://www.r-bloggers.com/accessing-r-from-python-using-rpy2/
python with r
我们可以通过如下几个工具在 python 中运行 r 语言的脚本:
rjython
该工具包通过 jython 部署了连接 python 的界面,提供了将 python 与 r 连通的接口。
rpython
rpython 也是一个在 r 语言中调用 python 的工具包,它可以在 r 中运行 python 代码,进行函数的调用,以及变量的分配和获取等。
snakecharmr
snakecharmr是改良版的 rpython,它源于 rpython 的 'jsonlite' 分支,相比于 rpython 有诸多提升。
pythoninr
pythoninr 可以让用户非常方便地在 r 语言中使用 python,提供了可与 python 进行交互的函数。
reticulate
reticulate 包提供了一整套可使 python 与 r 互相操作的工具。在所有上面所提到的工具中,这个使用最为广泛,大部分原因在于它是由 rstudio 主导开发的。reticulate 在 r 模块中内嵌了 python 模块,使两种语言可以无缝且高性能地相互操作。使用该工具包,我们可以把 python 代码 “编织” 进 r 语言中,创造了一种将两种语言相结合的新型项目。
reticulate 包提供了以下功能:
提供多种在 r 语言中调用 python 的方式,包括 r markdown、导入 python 脚本、引入 python 模块,以及在 r 模块中使用 python。
提供 r 对象和 python 对象间的相互转换(例如,r 与 pandas 数据框的转换,或 r 矩阵与 numpy 数组的转换)。
可与不同版本的 python 进行灵活的合作,包括虚拟环境和 conda 环境。
关于 reticulate 工具包的资源:
该文档提供了许多实例来助你入门:
https://rstudio.github.io/reticulate/
使用 reticulate 包,在 r 语言中使用 python:
https://longhowlam.wordpress.com/2017/04/10/test-driving-python-integration-in-r-using-the-reticulate-package/
工具包中的 “蛇”:用 reticulate 将 python 与 r 联结:
https://www.mango-solutions.com/blog/snakes-in-a-package-combining-python-and-r-with-reticulate
结论
r 和 python 都是完整且稳定的语言,都足以完成一项数据分析任务。虽然二者均存在一些各自的优劣势,如果能利用好它们的优点,我们就能更好地完成任务。总之,同时掌握两种语言会使我们更加灵活,从而在多种环境下自如地工作。
原文链接:
https://towardsdatascience.com/from-r-vs-python-to-r-and-python-aa25db33ce17?gi=da69b4bfd654
(本文为ai科技大本营转载文章,转载请微信联系 1092722531)

精彩推荐

4月13-14日,csdn将在北京主办“python开发者日(2019)”,汇聚十余位来自阿里巴巴、ibm、英伟达等国内外一线科技公司的python技术专家,还有数百位来自各行业领域的python开发者,共同探讨python在不同场景下的的应用优势和实战经验。即刻扫码抢购早鸟票,限量发售!
推荐荐阅读:
google又逆天:语音输入离线实时输出文字,仅占80mb!然而……
西工大开源拥挤人群数据集生成工具,大幅提升算法精度 | cvpr 2019
r和python谁更好?这此让你「鱼与熊掌」兼得
10行python,搭建一个游戏ai | 视频教程
node.js 与 javascript 基金会正式合并,js 喜提新主场
云计算时代运维的出路在哪?
30岁的万维网活不长了! 蒂姆·伯纳斯·李要借去中心化亲手杀死它, 你再也不用担心...
互联网裁员潮亲历者:那些阵痛、挣扎与去向
没有一个人,能躲过程序员的诱惑!
❤点击“阅读原文”,查看历史精彩文章。

如何实现IC测试最优解?集成电路测试工程师研修班带你突破“芯”挑战!
宝马加大投放新能源汽车计划的力度 新款i3明年将上市
MX2000核心板的功耗有多低?
Xsense技术力葆Atmel触控IC一哥地位
AG9410/AG9411 Type-C转HDMI设计方案
R和Python到底谁更好如何将Python与R同时应用在同一个项目
Flash芯片你都认识吗?
常用的通信总线有哪些
朗锐智科BHIOT-876边缘计算网关介绍
奥比中光发布首款户外大量程3D相机Gemini 2 XL
电池的容量
LM1875功率放大器制作,LM1875 POWER AMPLIFIER
使用Analog Discovery 2 分析云端测量数据
降低PLC高速计数器计数误差的方法
磁流体式扬声器
如何保障孩子视力,不如选择投影仪
怎样使用Arduino控制电视
高通剑指下一代智能手机技术革新的关口———人工智能
富捷电子:消费电子行业将迎来回暖反弹,自主品牌如何迎风借力?
芯片制造四大基本工艺