9333 124

[水煮经管] 数据科学入门丨选Python还是R   [推广有奖]

运营管理员

泰斗

56%

还不是VIP/贵宾

-

威望
4
论坛币
775178 个
学术水平
758 点
热心指数
819 点
信用等级
708 点
经验
300297 点
帖子
9779
精华
40
在线时间
5387 小时
注册时间
2014-8-19
最后登录
2018-11-16

widen我的世界 学生认证  发表于 2018-9-5 14:20:10 |显示全部楼层

数据科学入门丨选Python还是R

08.png



作者 Brian Ray

编译  Mika

本文为 CDA 数据分析师原创作品,转载需授权


对于想入门数据科学的新手来说,选择学Python还是R语言是一个难题,本文对两种语言进行了比较,希望能帮助你做出选择。


我是德勤的数据科学家主管,多年来我一直在使用Python和R语言,并且与Python社区密切合作了15年。本文是我对这两种语言的一些个人看法。


# 第三种选择

1.png


针对这个问题,Studio的首席数据科学家Htley Wickham认为,比起在二者中选其一,更好的选择是让两种语言合作。因此,这也是我提到的第三种选择,我在文本最后部分会探讨。


# 如何比较R和Python


对于这两种语言,有以下几点值得进行比较:


· 历史:

R和Python的发展历史明显不同,同时有交错的部分。


· 用户群体:

包含许多复杂的社会学人类学因素。

· 性能:

详细比较以及为何难以比较。


· 第三方支持:

模块、代码库、可视化、存储库、组织和开发环境。

· 用例:

根据具体任务和工作类型有不同的选择。

· 是否能同时使用:

在Python中使用R,在R中使用Python。


· 预测:

内部测试。

· 企业和个人偏好:

揭晓最终答案。


# 历史

2.png


简史:


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的使用群体时,要注意:


3.jpeg


只有50%的Python用户在同时使用R


假设所有使用R语言的程序员都用R进行相关“科学和数字”研究。可以确定无论程序员的水平如何,这种统计分布都是真实。


这里回到第二个问题,有哪些用户群体。整个科学和数字社区包含几个子群体,当中存在一些重叠。


使用Python或R语言的子群体:


· 深度学习

· 机器学习

· 高级分析

· 预测分析

· 统计

· 探索和数据分析

· 学术科研

· 大量计算研究领域


虽然每个领域几乎都服务于特定群体,但你会发现在统计和探索等方面,使用R语言更为普遍。在不久之前进行数据探索时,比起Python,R语言花的时间更少,而且使用Python还需要花时间进行安装。


所有这一切都被称为Jupyter Notebooks和Anaconda的颠覆性技术所改变。


Jupyter Notebook:增加了在浏览器中编写Python和R代码的能力;


Anaconda:能够轻松安装和管理Python和R。


现在,你可以在友好的环境中启动和运行Python或R,提供开箱即用的报告和分析,这两项技术消除了完成任务和选择喜欢语言间的障碍。Python现在能以独立于平台的方式打包,并且更快地提供快速简单的分析。


社区中影响语言选择的另一个因素是“开源”的概念。不仅仅是开源的库,还有协作社区对开源的影响。讽刺的是,Tensorflow和GNU Scientific Library等开源软件(分别是Apache和GPL)都与Python和R绑定。虽然使用R语言的用户很多,但使用Python的用户中有很多纯粹的Python支持者。另一方面,更多的企业使用R语言,特别是那些有统计学背景的。


最后,关于社区和协作,Github对Python的支持更多。如果看到最近热门的Python包,会发现Tensorflow等项目有超过3.5万的用户收藏。但看到R的热门软件包,Shiny、Stan等的收藏量则低于2千。


# 性能


这方面不容易进行比较。


原因是需要测试的指标和情况太多。很难在任何一个特定硬件上测试。有些操作通过其中一种语言优化,而不是另一种。


## 循环


在此之前让我们想想如何用Python与R对比。你真的想在R语言中做很多循环吗?毕竟这两种语言的意图不太相同。


{

"cells": [

  {

   "cell_type": "code",

   "execution_count": 1,

   "metadata": {},

   "outputs": [],

   "source": [

    "import numpy as np\n",

    "%load_ext rpy2.ipython"

  },

  {

   "cell_type": "code",

   "execution_count": 2,

   "metadata": {},

   "outputs": [],

   "source": [

    "def do_loop(u1):\n",

    "\n",

    "    # Initialize `usq`\n",

    "    usq = {}\n",

    "\n",

    "    for i in range(100):\n",

    "      # i-th element of `u1` squared into `i`-th position of `usq`\n",

    "      usq = u1 * u1\n"

  },

  {

   "cell_type": "code",

   "execution_count": 3,

   "metadata": {},

   "outputs": [],

   "source": [

    "%%R\n",

    "do_loop <- function(u1) {\n",

    "    \n",

    "    # Initialize `usq`\n",

    "    usq <- 0\n",

    "\n",

    "    for(i in 1:100) {\n",

    "      # i-th element of `u1` squared into `i`-th position of `usq`\n",

    "      usq <- u1*u1\n",

    "    }\n",

    "\n",

    "}"

  },

  {

   "cell_type": "code",

   "execution_count": 4,

   "metadata": {},

   "outputs": [

    {

     "name": "stdout",

     "output_type": "stream",

     "text": [

      "1.58 ms ± 42.8 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"

    }

   ],

   "source": [

    "%%timeit -n 1000\n",

    "%%R\n",

    "u1 <- rnorm(100)\n",

    "do_loop(u1)"

  },

  {

   "cell_type": "code",

   "execution_count": 5,

   "metadata": {},

   "outputs": [

    {

     "name": "stdout",

     "output_type": "stream",

     "text": [

      "36.9 μs ± 5.99 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"

    }

   ],

   "source": [

    "%%timeit -n 1000\n",

    "u1  = np.random.randn(100)\n",

    "do_loop(u1)"

  }

],

"metadata": {

  "kernelspec": {

   "display_name": "Python 3",

   "language": "python",

   "name": "python3"

  },

  "language_info": {

   "codemirror_mode": {

    "name": "ipython",

    "version": 3

   },

   "file_extension": ".py",

   "mimetype": "text/x-python",

   "name": "python",

   "nbconvert_exporter": "python",

   "pygments_lexer": "ipython3",

   "version": "3.6.3"

  }

},

"nbformat": 4,

"nbformat_minor": 2

}


Python为0.000037秒,R为0.00158秒


包括加载时间和在命令行上运行:R需要0.238秒,Python需要0.147秒。强调,这并不是科学严谨的测试。


测试证明Python的运行速度明显加快。通常这并没有太大影响。


除了运行速度外,对于数据科学家而言哪种性能更重要?两种语言之所以受欢迎是因为它们能被用作命令语言。例如,在使用Python时大多时候我们都很依赖Pandas。这就涉及到每种语言中模块和库,以及其执行方式。

# 第三方支持


Python有PyPI,R语言有CRAN,两者都有Anaconda。


CRAN使用内置的`install.packages`命令。目前,CRAN上有大约1.2万个包。其中超过1/2的包都能用于数据科学。


PyPi中包的数量超过前者的10倍,约有14.1万个包。专门用于科学工程的有3700个。其中有些也可以用于科学,但没有被标记。


在两者中都有重复的情况。当搜索“随机森林”时,PyPi中可以得到170个项目,但这些包并不相同。


尽管Python包的数量是R的10倍,但数据科学相关的包的数量大致相同。

## 运行速度


比较DataFrames和Pandas更有意义。


我们进行了一项实验:比较针对复杂探索任务的执行时间,结果如下:

4.png


在大多数任务中Python运行速度更快。


来源:

http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882


可以看到,Python + Pandas比原生的R语言DataFrames更快。注意,这并不意味着Python运行更快,Pandas 是基于Numpy用C语言编写的。

## 可视化


5.png

这里将ggplot2与matplotlib进行比较。

matplotlib是由John D. Hunter编写的,他是我在Python社区中最敬重的人之一,他也是教会我使用Python的。


Matplotlib虽然不易学习但能进行定制和扩展。ggplot难以进行定制,有些人认为它更难学。


如果你喜欢漂亮的图表,而且无需自定义,那么R是不错的选择。如果你要做更多的事情,那么Matplotlib甚至交互式散景都不错。同样,R的ShinnyR能够增加交互性。

# 是否能同时使用


可能你会问,为什么不能同时使用Python和R语言?


以下情况你可以同时使用这两种语言:


· 公司或组织允许;

· 两种都能在你的编程环境中轻松设置和维护;

· 你的代码不需要进入另一个系统;

· 不会给合作的人带来麻烦和困扰。


一起使用两种语言的方法是:


· Python提供给R的包:如rpy2、pyRserve、Rpython等;


· R也有相对的包:rPython、PythonInR、reticulate、rJython,SnakeCharmR、XRPython


· 使用Jupyter,同时使用两者,例子如下:

6.png


之后可以传递pandas的数据框,接着通过rpy2自动转换为R的数据框,并用“-i df”转换:


7.png


来源:

http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a


# 预测


Kaggle上有人对开发者使用R还是Python写了一个Kernel。他根据数据发现以下有趣的结果:


8.png


· 如果你打算明年转向Linux,则更可能是Python用户;


· 如果你研究统计数据,则更可能使用R;如果研究计算机科学,则更可能使用Python;


· 如果你还年轻(18-24岁),则更可能是Python用户;


· 如果你参加编程比赛,则更可能是Python用户;


· 如果你明年想使用Android,则更可能是Python用户;


· 如果你想在明年学习SQL,则更可能是R用户;


· 如果你使用MS office,则更可能是R用户;


· 如果你想在明年使用Rasperry Pi,则更可能是Python用户;


· 如果你是全日制学生,则更可能是Python用户;


· 如果你使用的敏捷方法(Agile methodology),则更可能是Python用户;


· 如果对待人工智能,比起兴奋你更持担心态度,则更可能是R用户。


# 企业和个人偏好


当我与Googler和Stack Overflow的大神级人物Alex Martelli交流时,他向我解释了为什么Google最开始只官方只是少数几种语言。即使是在Google相对开发的环境中,也存在一些限制和偏好,其他企业也是如此。


除了企业偏好,企业中第一个使用某种语言的人也会起到决定性作用。第一个在德勤使用R的人他目前仍在公司工作,目前担任首席数据科学家。我的建议是,选择你喜欢的语言,热爱你选择的语言,起到领导作用,并热爱你的事业。


当你在研究某些重要的内容时,犯错是难以避免的。然而,每个精心设计的数据科学项目都为数据科学家留有一些空间,让他们进行实验和学习。重要的是保持开放的心态,拥抱多样性。


最后就我个人而言,我主要使用Python,之后我期待学习更多R的内容。


原文链接:

https://blog.usejournal.com/python-vs-and-r-for-data-science-833b48ccc91d



已有 9 人评分经验 学术水平 热心指数 信用等级 收起 理由
dixiahe + 5 精彩帖子
nash + 3 + 4 + 1 对论坛有贡献ub
np84 + 100 精彩帖子
18943128618 + 1 观点有启发
zl89 + 80 精彩帖子
我的素质低 + 100 精彩帖子
happy_287422301 + 100 鼓励积极发帖讨论
fin-qq + 60 精彩帖子
arthistory4 + 10 精彩帖子

总评分: 经验 + 450  学术水平 + 8  热心指数 + 5  信用等级 + 1   查看全部评分


http://www.cda.cn/
高薪就业·数据分析人才·牛人聚集圈
stata SPSS
王二狗983505647 发表于 2018-9-5 14:57:18 来自手机 |显示全部楼层
widen我的世界 发表于 2018-9-5 14:20
数据科学入门丨选Python还是R

作者 Brian Ray 编译  Mika本文为 CDA 数据分析师原创作品,转载需授权
小白建议选Python
回复

使用道具 举报

西门高 发表于 2018-9-5 16:26:08 |显示全部楼层
了解一下
回复

使用道具 举报

hyq2003 发表于 2018-9-5 16:37:53 |显示全部楼层
了解一下
回复

使用道具 举报

晏几道 发表于 2018-9-5 20:55:15 |显示全部楼层
支持一下
回复

使用道具 举报

shajia2008 在职认证  发表于 2018-9-5 22:10:38 |显示全部楼层
感谢分享
回复

使用道具 举报

Noll-Zl 在职认证  发表于 2018-9-6 00:21:22 来自手机 |显示全部楼层
widen我的世界 发表于 2018-9-5 14:20
数据科学入门丨选Python还是R

作者 Brian Ray 编译  Mika本文为 CDA 数据分析师原创作品,转载需授权
python更有想象空间
回复

使用道具 举报

benji427 在职认证  发表于 2018-9-6 06:53:46 |显示全部楼层
很好的扫盲贴
回复

使用道具 举报

lonestone 发表于 2018-9-6 06:59:49 来自手机 |显示全部楼层
widen我的世界 发表于 2018-9-5 14:20
数据科学入门丨选Python还是R

作者 Brian Ray 编译  Mika本文为 CDA 数据分析师原创作品,转载需授权
谢谢分享
回复

使用道具 举报

jiao_taishan 发表于 2018-9-6 07:52:05 来自手机 |显示全部楼层
写得比较中肯
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

GMT+8, 2018-11-17 04:47