数据科学领域,你该选 Python 还是 R ?

简介: 为了那些希望知道在数据科学方面选择 Python 还是 R 编程语言的人,我发布了这篇指导文章。你可能在数据科学方面是个新手,或者你需要在一个项目中选出一个语言,这篇文章可能会帮助到你。

image

为了那些希望知道在数据科学方面选择 Python 还是 R 编程语言的人,我发布了这篇指导文章。你可能在数据科学方面是个新手,或者你需要在一个项目中选出一个语言,这篇文章可能会帮助到你。

非免责声明:在最大的数据科学家雇主之一(Deloitte)中,我是一个数据科学家的管理者。我也对 R 和 Python 有几十年的了解。我是个语言不可知论者,但是参与到 Python 社区已经有15年左右了。

还会有第三种选择

image

Hadley Wickham, RStudio 的首席数据科学家,已经给出了答复“使用‘and’替代‘vs’”。由此,同时使用Python/R 是我将提到的第三种选择。这个选项引起了我的好奇心,而且我会在本文末尾介绍这一点。

如何比较 R 和 Python

下面是这两种语言之间一些值得比较的因素,这并不是一个完全的列表。

历史:R 和 Python 具有明显不同的历史,有时候会交叉。
社区:通过实际调查发现的很多复杂的社会人类学因素。
性能:详尽的比较以及为什么比较起来这么难。
第三方支持:模块,代码库,可视化,存储库,组织和开发环境。
用例:有些任务和工作类型适合其中一种或者另一种。
我们不能和睦相处吗?Python 调用 R 和 R 调用 Python 。
预测 R 还是 Python:吃你自家的狗粮的一个预测练习。
偏好:最终答案。

历史

image

简短概要:

ABC -> Python 发布(1989 Guido van Rossum)-> Python 2 (2000) -> Python 3 (2008)
Fortan -> S(贝尔实验室)-> R 发布(1991 Ross Ihaka 和 Robert Gentleman)-> R 1.0.0 (2000) ->R 3.0.2 (2013)

社区

当比较Python和R的用户时,首先要记住的就是:

image

只有50%的Python用户与R重叠

那是假定所有R程序员会用“科学和数字(Scientific and Numeric)”来称呼他。我们也确定,无论程序员的等级如何,这个分布都是正确的。

如果我们只看科学和数字社区,这就会把我们带到第二类社区,哪个社区?在所有的科学和数字社区中有一些子社区。尽管也许还会有一些重叠,因为你会怀疑他们与大一些的R/Python社区之间的交互方式确实不同。

一些使用Python/R的子社区的例子:

深度学习
机器学习
高级分析
预测分析
统计
探索和数据分析
学术可惜研究
几乎无穷无尽的计算领域研究

然而每个领域看起来都只致力于一个专门社区,你会发现R在如统计和探索之类的领域中更加流行。不久前,你可能会使用R进行构建运行或者做一些非常有意义的探索,而使用的时间比安装Python或者用它来做相同的探索的时候短得多。

这一切都被颠覆性的技术改变了,他们是Jupyter notebook和Anaconda。

注:Jupyter Notebokks:在浏览器中可以编辑Python/R代码;Anaconda:可以为Python和R简单的安装和打包

既然你可以在一个方便提供报告和现成的分析的环境启动运行,就已经排除了一个横在那些想要完成这些任务的人和他们喜爱的语言之间的障碍。Python现在可以使用独立于平台的方式打包,而且可以更快的提供快速、低成本的分析比。

在社区中影响了语言选择的另一个区别就是“开源”思想。不仅是开源库,还有致力于开源的协作社区的影响。讽刺的是,开源许可软件,像Tensorflow这样的软件到GNU Scientific Library(各自为Apache和GPL),他们看起来都有Python和R绑定。尽管有R的公共版权,还是有更多人纯粹的支持Python社区。另一方面,看起来有更多的企业支持R,特别是那些有统计方面历史的。

最后,考虑到社区和协作,在Github上Python的支持更多。如果我要看最新Python包趋势,我会看到有超过3.5万个关注的Tensorflow之类的项目。相反,如果我看R包的最新趋势,像Shiny,Stan…之类的包,他们都少于2千个关注。

性能

性能提升很困难,因为有太多的指标和情况需要测试了,也很难基于特定的硬件来测试。一些操作在某个语言里已经做了优化,但其它语言里却还没有实现。确实,你可能会失去一些东西,比如:一些人会抱怨,一些人会离开,整个分析报告也可能会被丢弃。无论如何,生活还是要继续… …

循环

在继续之前,让我们先看一下 Python 和 R 是怎么样使用的。在 R 中,你是如何做循环迭代的呢?R 语言有稍微的不同。

image

image

通过一个快速的完整性检查, 包括加载时间和命令行运行时间: R 耗时 0m0.238s, Python 耗时是0m0.147s. 再次,这不是一个严谨的测试。

一个快速的测试显示 Python 代码会快很多,通常,这并不是太重要。

既然速度不是重点,那数据科学家更关心哪些东西呢?从这两门语言最新的趋势发现,它们被用作命令式语言的能力是一个重要的因素。比如,大多数 Python 程序员严重依赖 Pandas 来工作。这又引出了下一个主题:两种语言都有哪些模块和库,它们又是如何实现的?这是一个更有意义的比较。

第三方支持

包管理工具

Python 使用 PyPi ,R 使用 CRAN ,Anaconda 同时支持二者。

CRAN 使用它内部的“install.packages”命令做分发管理。截至目前为止,CRAN 上有大约 12000 个有效的软件包。浏览一下你就会发现,大约二分之一的包是关于数据科学的,占了大约 6000 个还不止。

PyPi 上有超过 CRAN 十倍数量的包,大约 141000 个左右。其中有大约 3700 个包被标识为科学工程相关的。当然还有大量的包实际是科学相关的,但并没有被正确标识出来。

这两种语言好像并没有受到大量的重复劳动的影响。确实,当我在 PyPi 上搜索“随机森林”时,我搜到了 170 个项目,可是,这些包之间又有些许的不同。

尽管 Python 包的数量超过 R 十倍之多,但做数据科学计算的包的数量却差不多,也许 Python 更少一些。

大量有效的第三方库是非常重要的,所有东西都要从头写是非常痛苦的。同样地,我也希望你做一些工作来回馈社区。

速度很重要

DataFrames vs Pandas可能是一个更有意义和更重要的比较。

我们进行一个实验:在进行复制的时候进行一个复杂的遍历,比较两者的执行时间。下面是结果:

image

源代码:
http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882

正如我们看到的结果,Python+Pandas要比原生的R DataFrames快很多。请注意这并不意味着Python要比R快。Pandas是基于C语言写的Numpy库的。

想象一下这个!

image

我真正想说的是ggplot2 vs matplotlib。声明:matplotlib是Python社区里我最看重的一个人写的,他教会了我Python,他就是 John D. Hunter。

Matplotlib是一个强大而且可个性化定制的库,虽然不太容易学但是扩展性非常好。ggplot不但不易个性化定制而且可以说更加困难。

如果你喜欢漂亮的绘图图案,而且并不需要自定义绘图,R是我的选择。如果你需要做更多的事情选择Matplotlib,他甚至可以帮助与bokeh进行交互。同样,你可能在寻找的ShinnyR对R而言也会增加其交互性。

难道我们不能同时使用两种语言吗?

有些人可能要问:你为什么不能同时使用两种语言呢?

有一些情况你可以同时使用这两个。比如当:

你的项目组或组织允许的时候。
你能比较容易地同时维护这两种环境。
你的代码不需要迁移到另一个系统。
你不会给别人制造一些混乱。

一些可以使两者同时工作的方法:

Python 对 R 的包装器,比如:rpy2,pyRserve,Rpython,… (rpy2 扩展在 Jupyter 中有使用)
R 也有一些包,比如:rPython,PythonInR,reticulate,rJython,SnakeCharmR,XRPython
在 Jupyter 里,混合这两种语言,举例如下:

image

然后,我们可以传递 pandas 数据帧,它会通过 rpy2 被自动转换为 R 数据帧,传递时加上 “-i df”开关。

image

代码源:
http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a

R 与 Python 预测

Kaggle 上的一个用户写了一个关于预测开发人员使用 R 还是 Python 的内核。他根据这些数据得出了一些有趣的观察结果:

image

如果你希望明年转向 Linux ,你更有可能是一个 Python 用户。
如果你研究统计学,你更有可能是 R 用户。如果你研究计算机科学,你可能是 Python 用户。
如果你年轻(18-24岁),你更可能是 Python 用户。
如果你进行代码竞赛,你更可能是 Python 用户。
如果你明年想使用安卓,你更可能是 Python 用户。
如果你明年想学习 SQL ,你更可能是 R 用户。
如果你使用 MS office ,你更可能是 R 用户。
如果你明年想使用 Rasperry Pi ,你更可能是一个 Python 用户。
如果你是全日制学生,你更可能是 Python 用户。
如果你使用敏捷方法,你更可能是 Python 用户。
如果你对 AI 的看法是担忧而不是兴奋,你更可能是 R 用户。

偏好

当我与Alex Martelli, Googler 和 Stack Overflow的统治者通信时,他向我解释为什么Google开始使用他们官方支持的一些语言。即使在像Google这样的自由精神创新空间,似乎有一些制度。这是在这里能起作用的偏好,公司偏好。

除了企业偏好,有些人在组织里经常创造第一。我知道在Deloitte第一个使用R语言的是谁。他仍然在公司,他是数据学家的领军人。重点是,在所有事情上我通常会建议,遵循你的爱。爱你所追随的,引领潮流,爱你所做的。

一个合格的声明,虽然我从未成为工具的第一思考着,但如果你正在做一写重要的事情,那可能不是做实验的最佳时机。错误是可能的。然而,每个精心的设计数据科学项目都给数据学家留下了一定的空间。使用其中的一部分来学习和实验。保持开源心态,拥抱多样性。

原文发布时间为:2018-08-01
本文作者:usejournal
本文来自云栖社区合作伙伴“ 大数据地盘”,了解相关信息可以关注“ 大数据地盘

相关文章
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
305 10
|
3月前
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
69 0
|
3月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
92 3
|
3月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
154 0

热门文章

最新文章

推荐镜像

更多