R和Python谁更好?这次让你「鱼与熊掌」兼得
作者 | Parul Pandey
译者 | 大鱼
责编 | Jane
出品 | Python大本营(公众号id:pythonnews)
如果你从事在数据科学领域,提到编程语言,一定能马上想到 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岁的万维网活不长了! 蒂姆·伯纳斯·李要借去中心化亲手杀死它, 你再也不用担心...
互联网裁员潮亲历者:那些阵痛、挣扎与去向
没有一个人,能躲过程序员的诱惑!
❤点击“阅读原文”,查看历史精彩文章。
相关文章:
大学实习就要来了,买个性价比高的笔记本应付一下
人才市场历来有着“金三银四”、“金九银十”招聘高峰期之说。“金九银十”指的是每年9、10月份,各大企业为第二年拓宽事务许多吸纳人才,一起应届高校毕业生找作业,供需两旺。而“金三银四”则是职场人拿到了奖金,看清了得失&…

【linux】Valgrind工具集详解(八):Memcheck命令行参数详解
【linux】Valgrind工具集详解(五):命令行详解中不够全,在此专门针对Memcheck工具中的命令行参数做一次详细的解释。 Memcheck命令行选项 –leak-check=<no|summary|yes|full> [default: summary] 程序执行完毕后,搜索内存泄漏。默认值为summary,只统计发生了多少…

PHP 5.3 中不建议使用的(部分)函数列表
2019独角兽企业重金招聘Python工程师标准>>> PHP 5.3.0 introduces two new error levels: E_DEPRECATED and E_USER_DEPRECATED. The E_DEPRECATED error level is used to indicate that a function or feature has been deprecated. The E_USER_DEPRECATED level…

【linux】Valgrind工具集详解(九):Memcheck检查的内容和方法
一、值的有效性 1、什么是值的有效性? 英文原文是Valid-value (V) bits,直译过来就是有效值(V)位。 我将它理解为值的有效性,就是判断在内存或CPU的物理地址中存储的数据是否有效,比如在内存中变量(int i)代表的物理位置(不是地址),没有初始化,就去使用它,是否合…

微软亚研院提出用于语义分割的结构化知识蒸馏 | CVPR 2019
作者 | CV君来源 | 我爱计算机视觉今天跟大家分享一篇关于语义分割的论文,刚刚上传到arXiv的CVPR 2019接收论文《Structured Knowledge Distillation for Semantic Segmentation》,通讯作者单位为微软亚洲研究院。作者信息:作者分别来自澳大利…
Elam的git笔记:(二)git的安装与基本操作介绍
Giti安装 下载地址下载:https://git-scm.com/download/win自动下载64位,如果是32位系统,取消下载后自行下载对应版本双击安装,自选项可根据自身需求自由选择 习惯于cmd的同学可以选择第二个安装完成后在桌面右键,选择G…

创新驱动未来,浪潮持续深耕信息安全市场
2010年,我国信息安全行业在快速发展中涌现出众多优秀的安全厂商,以创新的产品及技术推动中国信息安全产业做大做强。其中,浪潮创造性地开发出了英信安全服务器,加上此前推出的浪潮服务器安全加固系统()&…

Pig变飞机?AI为什么这么蠢 | Adversarial Attack
整理 | Jane责编 | Jane出品 | AI科技大本营(公众号id:rgznai100)【编者按】这篇文章的起意有两点:一是由刚刚过去的 315 打假日,智能语音机器人在过去一年拨出的超 40 亿电话,联想到前一段时间引起大家热烈…

【linux】Valgrind工具集详解(十):SGCheck(检查栈和全局数组溢出)
一、概述 SGCheck是一种用于检查栈中和全局数组溢出的工具。它的工作原理是使用一种启发式方法,该方法源于对可能的堆栈形式和全局数组访问的观察。 栈中的数据:例如函数内声明数组int a[10],而不是malloc分配的,malloc分配的内存是在堆中。 SGCheck和Memcheck是互补的:它…

shell脚本之 if,case,for的用法
目录一.条件选择:if语句二.条件判断:case语句三.for循环 一.条件选择:if语句 单分支if 判断条件;then 条件为真的分支代码fi 例子:判断一个数字是否等于10 #!/bin/bashread -p 输入一个数字 numif [ $num -eq 10 ];thenecho 该数字…

RAC 修改 DB 实例名 步骤
在我之前的2篇Blog 里提到了RAC ASM实例名和 DB实例名的问题。 RAC 中 ASM 实例名 与 节点的对应关系 http://blog.csdn.net/tianlesoftware/archive/2011/03/23/6272244.aspx RAC 修改 ASM实例名 的步骤 http://blog.csdn.net/tianlesoftware/archive/2011/03/25/6275827.asp…

【linux】Valgrind工具集详解(十二):DHAT:动态堆分析器
一、概述 DHAT动态堆分析器。Massif(堆分析器)是在程序结束后输出分析结果,而DHAT是实时输出结果,所以叫做动态堆分析器。Massif只记录堆内存的申请和释放,DHAT还会分析堆空间的使用率、使用周期等信息。 DHAT的功能:它首先记录在堆上分配的块,通过分析每次内存访问时所…

微软(中国)CTO韦青:人工智能是拿来用的,不是拿来炒的
随着近几年全球各大科技巨头纷纷入场人工智能领域,催生了一大批技术的发展和落地:AI 医疗、智能翻译、图像识别、智能社交机器人、无人驾驶……这些技术的背后都离不开“深度学习”。但与此同时,越来越多弱点的凸显,也引起了公众对…

概念被滥用 你真的了解云计算吗?
在Amazon、Google和IBM这些公司推出云计算的概念之后,其他一些公司也开始跟进了。但遗憾的是,其中一部分只是打着云计算的旗号,实际所做的却不值得称为云。 云计算的概念越来越流行,但这个概念也有被人滥用的趋势。Amazon、Google…

近万个Python开源项目中精选Top34!
作者 | Mybridge编译 | 仲培艺出品 | CSDN(ID:CSDNNews)【导语】踏着人工智能、区块链的东风,近年来一路“横冲直撞”的 Python 在实现了从小众语言到主流的完美转身后,一头扎进了 2019,依旧没有透出丝毫停…

【linux】Valgrind工具集详解(十三):Helgrind(线程错误检测器)
一、概述 Helgrind用于检测C、C ++和Fortran程序中使用符合POSIX标准的线程函数造成的同步错误。 POSIX中关于线程的主要抽象描述有:共享公共地址空间的一组线程、线程创建、线程连接、线程退出、互斥(锁)、条件变量(线程间事件通知)、读写器锁、自旋锁、信号量和线程等…
vivado烧写bin文件到flash 中
点击 bitstream setting ,将 bin_file 勾上,点击 OK。 2)点击 generate bitstream ,生成 bit 文件和 bin 文件 3)点击 open hardware manager,连接板子。 4)选中芯片,右键如下操作。…

如何使dropship第三方销售是基于发货数量,而不是基于LIV发票校验的数量
不好意思,我何慕雄这两天说drop ship第三方销售已经是说烂了,但是,还是要得继续说,毕竟这个问题也是挺复杂的。 什么是第三方销售呢?第三方销售是指客户向我们下销售订单,而我们没有货,但是根据…

图神经网络综述:方法及应用 | Deep Reading
整理 | 耿玉霞,浙江大学直博生。研究方向:知识图谱,零样本学习,自然语言处理等。来源 | 开放知识图谱(公众号id:OpenKG-CN)责编 | Jane近日,清华刘知远老师组在 arXiv 上发表了一篇关…

【linux】top命令详解
1、参数详解 $ top -helpprocps-ng version 3.3.9 Usage:top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]-b:打印所有程序 -c:以命令行的形式显示程序名 -d:设置刷新间隔时间 -h:显示帮助 -H…

关于近期的总结
北京的黄金三月,应去年的计划,年初换工作,这是回来之后找工作的第四个周,目前收到offer一份,在昨天之前我还深深的觉得自己真的是失败,菜的不行,去年一年的努力都努力到哪里去了,越想…

让QQ按时上下班
朋友在临近的一所幼儿园当头儿,说最近发现有小老师在上班期间用QQ聊天,影响孩子的看护,问我有没有办法限制她们在上班期间聊天,顺便看看他们上班期间都在干什么,我说试试吧,估计得花钱。 说干就干ÿ…

算法面试经常需要你手写的三个排序算法(Python语言)
作者 | 程序员小吴来源 | 五分钟学算法(ID: CXYxiaowu)1. 归并排序1.1 算法步骤申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始…

【linux】Valgrind工具集详解(十三):DRD(线程错误检测器)
一、概述 多线程编程需要注意的问题: 数据竞争;锁竞争;POSIX线程API使用不当;死锁; 二、使用 1、例子main.c源码 #include <stdio.h> #include <pthread.h> #include <sys/types.h> #include <unistd.h>

前段技术学习网站
1. 七天学会nodejs http://nqdeng.github.io/7-days-nodejs/ 2. Web 常用UI库 kissy https://www.oschina.net/p/kissy 3. 通用 WEB 框架 Webx https://www.oschina.net/p/webx 转载于:https://www.cnblogs.com/mengjianzhou/p/8610793.html

性能测试分析之带宽瓶颈的疑惑
第一部分, 测试执行 先看一图,再看下文 这个当然就是压力过程中带宽的使用率了,我们的带宽是1Gbps的,合计传输速率为128MB/s,也正因为这个就让我越来越疑惑了,不过通过压力过程中的各项数据我又不得不相信。…

心中无码,自然高清 | 联合去马赛克与超分辨率研究论文Pytorch复现
作者 | 知凡,个人公众号:林木蔚然读书会(ID:EspressoOcean),知乎ID:Uno Whoiam本文授权转载自知乎本文结构简单扫盲什么是去马赛克什么是超分辨率《Deep Residual Network for Joint Demosaicing and Super…

【linux】Valgrind工具集详解(十四):Cachegrind(缓存和分支预测分析器)
一、概述 Cachegrind,它模拟CPU中的一级缓存I1,Dl和二级缓存,能够精确地指出程序中cache的丢失和命中。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每个函数,每个模块,整个程序产生的指令数。这对优化程序有很大的帮助。 Cachegrind模拟程…

使用mvc框架搭建跟人站点
1、使用工具 vs 、iis 2、新建一个ASP.net mvc 项目。并写好必要的代码 3、解决方案管理器,项目右键、发布 4、 创建配置文件 弹出网站发布设置面板,点击自定义,创建新的发布配置文件: 输入你自己定义的配置文件名(这里随便输入&…

GitHub上7000+ Star的Python常用代码合集
作者 | 二胖并不胖来源 | 大数据前沿(ID:bigdataqianyan)今天二胖给大家介绍一个由一个国外小哥用好几年时间维护的Python代码合集。简单来说就是,这个程序员小哥在几年前开始保存自己写过的Python代码,同时把一些自己比较常用的代…