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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据科学入门丨选Python还是R相关的知识,希望对你有一定的参考价值。

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

参考技术A 数据科学入门丨选Python还是R
对于想入门数据科学的新手来说,选择学Python还是R语言是一个难题,本文对两种语言进行了比较,希望能帮助你做出选择。
我是德勤的数据科学家主管,多年来我一直在使用Python和R语言,并且与Python社区密切合作了15年。本文是我对这两种语言的一些个人看法。
第三种选择

针对这个问题,Studio的首席数据科学家Htley Wickham认为,比起在二者中选其一,更好的选择是让两种语言合作。因此,这也是我提到的第三种选择,我在文本最后部分会探讨。
如何比较R和Python
对于这两种语言,有以下几点值得进行比较:
· 历史:
R和Python的发展历史明显不同,同时有交错的部分。
· 用户群体:
包含许多复杂的社会学人类学因素。
· 性能:
详细比较以及为何难以比较。
· 第三方支持:
模块、代码库、可视化、存储库、组织和开发环境。
· 用例:
根据具体任务和工作类型有不同的选择。
· 是否能同时使用:
在Python中使用R,在R中使用Python。
· 预测:
内部测试。
· 企业和个人偏好:
揭晓最终答案。
历史

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

只有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 npn",
"%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[i] = u1[i] * u1[i]n"
]
,

"cell_type": "code",
"execution_count": 3,
"metadata": ,
"outputs": [],
"source": [
"%%Rn",
"do_loop <- function(u1) n",
" n",
" # Initialize `usq`n",
" usq <- 0n",
"n",
" for(i in 1:100) n",
" # i-th element of `u1` squared into `i`-th position of `usq`n",
" usq[i] <- u1[i]*u1[i]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 1000n",
"%%Rn",
"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 1000n",
"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更有意义。
我们进行了一项实验:比较针对复杂探索任务的执行时间,结果如下:

在大多数任务中Python运行速度更快。
http://nbviewer.jupyter.org/gist/brianray/4ce15234e6ac2975b335c8d90a4b6882
可以看到,Python + Pandas比原生的R语言DataFrames更快。注意,这并不意味着Python运行更快,Pandas 是基于Numpy用C语言编写的。
可视化

这里将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,同时使用两者,例子如下:

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

http://nbviewer.jupyter.org/gist/brianray/734bd54f468d9a6db9171b2cfc98405a
预测
Kaggle上有人对开发者使用R还是Python写了一个Kernel。他根据数据发现以下有趣的结果:

· 如果你打算明年转向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的内容。

讨 论 | R语言和Python哪个难?我应该如何选择学习?





在数据科学界大门口,新手小白们总是面面相觑,R语言和Python两大巨头各占风骚,势如水火,引起入门选手的诸多疑问——

◆ 编程零基础,我应该选哪个入门比较好?
◆ 我学XX专业,应该用R语言还是Python?
◆ R和Python各自优缺点是什么,哪个更难?
◆ 未来哪个就业更吃香,薪资更高,选择更广?
Emmm连学哪个都选不出来,算了,我还是不学了叭……

讨 论 | R语言和Python哪个难?我应该如何选择学习?

万里长征第一步,学院君带带你。究竟R语言和Python在哪些领域使用更佳?新手如何选择学习,才能更快地启航?我们认真来唠唠这个。

友情提示:本文适合收藏!
01 开发目的

任何不聊原始目的的选择都是耍流氓。工具的缘起历史,决定了它使用的偏向性。

R语言
R是由统计学家开发的,它的出生就肩负着统计分析、绘图、数据挖掘的重要使命。因此在R的语言体系里,有非常多统计学的原理和知识。

如果你具备一些统计背景,R会令你使用各类model和复杂的公式时更加愉悦有爽感,因为你总能找到对应的package,并且几行代码就可以调用搞定。

Python
Python的创始人初衷,是为非专业程序员设计的一种开放型的语言。优雅,明确,简单,是它的标签。因此,总有人高唱「人生苦短,我用Python」。

数据分析、网络爬虫、编程开发、人工智能等,作为一门多功能的胶水语言,Python的使用目的和学习路径更加多样化。

讨 论 | R语言和Python哪个难?我应该如何选择学习?
02 适用人群

尽管都是数据科学界的当红炸子鸡,工具的选择会因为你的领域和你想解决的问题因人而异。

R语言
起初R在学术研究和调查工作中使用比较多,逐渐延伸至企业商业界。使用人群不一定需要计算机背景,统计、金融、经济、核电、环境、医疗、物流管理,乃至人文学科,都有R语言的立足之地。

同样,鉴于R 在数据探索、统计分析上,是一种更高效的独立数据分析工具,具备良好数理统计知识背景的人使用起来更加得心应手,自带base一R的基础模块、mle一极大似然估计模块、ts一时间序列分析模块、mva一多元统计分析模块等。

Python
相比R非标准的代码,Python作为出了名的语法简洁工具,对于一些稍有编程基础的人来说格外友好,可以减少在编程进程中的磕绊。

没有任何基础的编程小白一样可以上手Python,适用范围同样覆盖金融、医疗、管理、传播等各行各业。

如果你在数据分析之余,还需要与诸如Web应用程序相整合,或者需要和数据源的连接、读取,调用其他语言等,使用Python是更加方便的选择,「一站式解决」。
讨 论 | R语言和Python哪个难?我应该如何选择学习?

03 学习曲线

这是小白入门前最关心的问题之一,究竟哪个学起来更难?

实际上,由于不了解每个人的知识背景和学习成本,这个问题并不能做出非黑即白的绝对性答案。这也是为什么,各类论坛上R和Python的使用者关于入门难度总是各执一词。

R语言
开始学习R,了解了最基本知识和语言逻辑,入门不难。以及数理统计基础好的会越学越爽,相反,如果完全没有数理背景,会感觉到明显增幅的难度。

Python
Python看重可读性和易用性,它的学习曲线比较平缓。对于初级小白来讲,比较友好,但如果纵深学习以及拓展方向,还需要掌握大量package的知识和使用方法。

如果你真的需要定义对比二者学习曲线的难度,你需要首先明确,你的学习目的是什么。

讨 论 | R语言和Python哪个难?我应该如何选择学习?

04 行业选择&发展方向
网络上有很多R与Python人气对比的数据,综合来看,Python的排名更高,主要原因是R仅在数据科学的环境中使用,而Python作为一种通用语言,使用广泛。

R语言
应用R的场景:数据探索、统计分析、数据可视化

应用 R技能的职位:数据分析师、数据科学家、投资分析师、税务人员、管理人员、科研人员等等

发展方向:结合各行业的专业知识,做深度的业务数据处理与统计分析

Python
应用Python的场景:数据分析、网络爬虫、系统编程、图形处理、文本处理、数据库编程、网络编程、Web编程、数据库连接、人工智能、机器学习等

应用Python的职位:数据架构师、数据分析师、数据工程师、数据科学家、程序开发员等

发展方向:结合各行业的专业知识,做各类型or协作型工作

讨 论 | R语言和Python哪个难?我应该如何选择学习?


05 优缺点对比分析(划重点)

来了!在具体的使用中,两个工具一定有各自的优劣势,各自的侧重点。明确哪一点对你最重要,是你选择的关键。

第一战:数据可视化 

字不如表,表不如图。R和可视化是绝配,一些必备的可视化软件包如ggplot2,ggvis,googleVis和rCharts,由于统计模型完善,细节设计精美,在R里能够使用一行或几行代码很快完成漂亮大气装X一百分的数据图,清楚看到数据的特征和走势。

Python也有一些不错的可视化库,诸如Matplotlib, Seaborn,Bokeh和Pygal,它同样可以完成和R一样精美的数据图,但需要你自己写代码去表达和定义,例如线形图、柱状图,横纵坐标的距离与比例,颜色的选择等等
(Py:不要为难我胖虎,画图可以,要美你自己写!)

讨 论 | R语言和Python哪个难?我应该如何选择学习?


 第二战:数据分析 

R包含更多的数据分析内建功能,可以直接使用summary内建函数,dataframe是R内置的结构。

Python中需要依靠第三方软件包,诸如statsmodels、pandas包,提供强大的数据分析功能。

讨 论 | R语言和Python哪个难?我应该如何选择学习?

 第三战:数据结构 

R中的数据结构非常的简单,主要包括向量(一维)、多维数组(二维时为矩阵)、列表(非结构化数据)、数据框(结构化数据)。R的变量类型比较单一,在不同的包里变量类型是一样的。

Python 则包含更丰富的数据结构来实现数据更精准的访问和内存控制,多维数组(可读写、有序)、元组(只读、有序)、集合(唯一、无序)、字典(Key-Value)等等。在不同的包里,也会有不同的表达来定义变量,例如在pandas包里用series表示列表,而在numpy包里列表的表达则使用array。

相比来说,Python更丰富的数据结构会提升学习成本,但运行更精准,速度也更快。

讨 论 | R语言和Python哪个难?我应该如何选择学习?

 第四战:运行速度 

R的运行速度比较慢,在大样本的回归中,如使用不当就会出现内存不足的情况。通常,需要先通过数据库把大数据转化为小数据(通过groupby)才能交给R做分析。或者和其他大数据处理工具结合起来,例如spark。

(By学院某位老师:根据我的经验,R不能承受太大的数据,19位以上的数字极有可能算错,尤其是矩阵运算。)

Python虽然没有C的运行快,但与R相比,还是非常有优势的,可以直接处理上G的数据,并且在非常大的数据运算上的准确性也更好一些。

讨 论 | R语言和Python哪个难?我应该如何选择学习?

 第五战:帮助文档与自学成本 

相比于使用人群更广泛的Python,R的帮助文档相对不够细致和完善,通常附带的栗子也比较简洁,有一些大致的讲解和用法。

而Python的代码语句、栗子展示、参数分析等细节展示比较完善,撰写帮助文档的人更多会出示一个完整的demo,因而对于自学的人来说比较友好。
(学院君OS:这点主要还是,人多力量大hhhh)

此外,Python是一种通用的语言,你可以与小伙伴共享Notebook,而无需他们安装任何东西,更重要的是,可以把不同背景的人集合在一起,灵活性强,扩展性好,多功能工作,也极有可能碰撞出更多思维火花。

讨 论 | R语言和Python哪个难?我应该如何选择学习?

 第六战:来点栗子我们实战叭! 

文本信息挖掘, 是一种常见的数据处理与分析使用场景,比如说电商网购的评价,社交网站的标签,新闻里的情感分析等等。

使用R做情感分析时,需要对数据进行预处理,清除掉没用的符号后,做分词。然后构建单词-文档-标签数据集-创建文档-词项矩阵,再借助各类包来进行机器学习算法。

由于情感分析的文本通常是一个非常规模化的数据,在R里相对处理速度比较慢,并且需要使用多个包来协作。

使用Python做情感分析时,优先需要将句子分解为单词,然后操作特征提取,去除停用词;接下来降维,再进行分类算法模型训练和模型评估。

Python的包集成性很强,尤其对于文本挖掘情感分析这个问题来讲,可以更快更简便地完成这个操作。

讨 论 | R语言和Python哪个难?我应该如何选择学习?

时间序列分析 ,是根据系统观察得到的时间序列数据,通过曲线拟合和参数估计来建立数学模型的理论和方法,可以用在金融领域、气象预测、市场分析领域等。

使用R语言做时序分析时,因为R拥有许多程序包可用于处理规则和不规则时间序列,因而很有优势,比如library(xts),library(timeSeires),library(zoo)—时间基础包,library(FinTS)--调用其中的自回归检验函数等,出具的结果也非常直观和清晰。

使用Python做时序分析时,由于没有特别完善的时序分析包,没有专门为了做预测而写的方程,和可视化一样,需要操作者自行写更多的代码。常用的,statsmodels模块,该模块可以用来进行时间序列的差分,建模和模型的检验。

讨 论 | R语言和Python哪个难?我应该如何选择学习?

通过以上两个栗子你感受到了吗!

工具不分好坏,是因为你具体想要解决的问题而异的。

总结


经过了上文这么多的对比,究竟如何选择学习呢?你要根据需求,问问自己——

  • 你想解决什么问题?
  • 你学习一门语言的成本?
  • 在你的领域中常用的工具是什么?

讨 论 | R语言和Python哪个难?我应该如何选择学习?
想清楚才有选择方向!

目前,客观来说,由于Python是一门灵活性强,扩展性好,多功能又能胜任机器学习和数据分析工作的编程语言,因此在就业市场上,Python的身影似乎更加火辣,在各项排行榜上排位也更靠前。

但如果你是对统计数据、数据可视化、数据操作、概率论等深入点感兴趣,并且不涉及软件开发,你可以选择R来完成你的工作。

当然啦,一个系统不一定能解决你所有的问题。传说中的「左手Python, 右手R」可不是开玩笑的。

数据科学领域里有很多互通的部分。R和Python之间有很多互相启发的地方,如Python的pandas包中Dataframe受到R中dataframe的影响,rvest包则来自BeautifulSoup的启发。

两者的生态系统都在不断发展壮大,同时学会Python和R这两把刷子才是走遍天下无敌手的王道啊!

讨 论 | R语言和Python哪个难?我应该如何选择学习?

讨 论 | R语言和Python哪个难?我应该如何选择学习?


如果你想要系统提升英文应用水平,高效优质完成日常Essay、Assignment、Paper等等, 拥有英文学术论文写作的底层逻辑 灵活自如应用英文 ,那你一定不能错过 英文学术论文阅读与写作小班课 (点击图片查看详情)

以上是关于数据科学入门丨选Python还是R的主要内容,如果未能解决你的问题,请参考以下文章

《R语言入门与科学文献绘图》网络培训班开始报名

Python数据科学快速入门系列 | 06Matplotlib数据可视化基础入门

Python数据科学快速入门系列 | 08类别比较图表应用总结

Python数据科学快速入门系列 | 09Matplotlib数据关系图表应用总结

Python数据科学快速入门系列 | 10Matplotlib数据分布图表应用总结

数据科学书籍