数据科学导论:Python还是R
对于想学习数据科学的初学者来说,选择Python还是R语言是个难题。本文对两种语言进行了对比,希望能帮助你做出选择。
我是德勤的数据科学家主管。本人使用Python和R语言多年,与Python社区密切合作15年。这篇文章是我个人对这两种语言的看法。
第三种选择
为了解决这个问题,Studio的首席数据科学家Htley Wickham认为,更好的选择是让两种语言合作,而不是选择其中一种。所以,这也是我提到的第三种选择,我会在正文的最后一部分讨论。
如何比较r和Python
对于这两种语言,以下几点值得比较:
历史:
R和Python的发展历史明显不同,同时存在重叠的部分。
用户组:
它包含了许多复杂的社会学和人类学因素。
性能:
详细对比以及为什么很难对比。
第三方支持:
模块、代码库、可视化、存储库、组织和开发环境。
使用案例:
根据具体任务和工种有不同的选择。
是否可以同时使用:
Python里用r,r里用Python。
预测:
内部测试。
公司和个人偏好:
揭晓最终答案。
历史
简史:
ABC语言->;Python问世(吉多·范·罗苏姆于1989年创立)-> Python 2(2000年)->;Python 3(2008)
福坦语->;s语言(贝尔实验室)->;r语言问世(1991年罗斯伊哈卡和罗伯特绅士创立)->;R 1.0.0(2000年)-> R 3.0.2(2013)
用户组
在比较Python和R的用户时,我们应该注意:
只有50%的Python用户同时使用R。
假设使用R语言的程序员使用R进行相关的“科学与数字”研究。不管程序员水平如何,你都可以确定这个统计分布是真的。
再回到第二个问题,有哪些用户群体。整个科学和数字社区包含几个子群,其中一些子群相互重叠。
使用Python或R语言的子组:
深度学习
机器学习
高级分析
预测分析
统计数字
勘探和数据分析
学术研究
大量的计算研究领域
虽然几乎每个领域都服务于特定群体,但R语言在统计和探索领域更为常见。前不久在探索数据的时候,R语言比Python花的时间少,安装Python也要花时间。
这一切都被叫做Jupyter笔记本和Anaconda的颠覆性技术改变了。
Jupyter笔记本:增加了在浏览器中编写Python和R代码的能力;
Anaconda: Python和R很容易安装和管理。
现在,您可以在友好的环境中启动和运行Python或R,提供开箱即用的报告和分析。这两项技术消除了完成任务和选择自己喜欢的语言之间的障碍。Python现在可以以独立于平台的方式打包,并更快地提供快速简单的分析。
另一个影响社区语言选择的因素是“开源”。不仅仅是开源库,还有协作社区对开源的影响。讽刺的是,Tensorflow、GNU Scientific Library等开源软件(分别是Apache和GPL)都绑定了Python和R,虽然使用R语言的用户很多,但使用Python的用户中也不乏纯Python支持者。另一方面,更多的企业使用R语言,尤其是有统计背景的企业。
最后,关于社区和协作,Github更支持Python。如果你看到最近比较流行的Python包,你会发现Tensorflow等项目有超过35000个用户集合。但是看到R的热门软件包,Shiny和Stan的收藏都不到2000。
表演
这方面不好比较。
原因是要考的指标和情况太多了。很难在任何特定的硬件上进行测试。有些操作在一种语言中进行了优化,而在另一种语言中则没有。
传播
在此之前,我们先思考一下Python和R如何比较,你真的想用R语言写很多循环吗?毕竟这两种语言的设计意图不太一样。
{
"细胞":[
{
" cell_type": "code ",
" execution_count": 1,
"元数据":{},
"输出":[],
"来源":[
"将numpy作为npn导入",
" %load_ext rpy2.ipython "
]
},
{
" cell_type": "code ",
“execution _ count”:2,
"元数据":{},
"输出":[],
"来源":[
" def do_loop(u1):n ",
“n”,
" # Initialize `usq`n ",
" usq = {}n ",
“n”,
"对于范围内的I(100):n ",
“‘u 1’的第I个元素的平方到‘usq’n的第‘I’个位置”,
" usq[I]= u 1[I]* u 1[I]n "
]
},
{
" cell_type": "code ",
“execution _ count”:3,
"元数据":{},
"输出":[],
"来源":[
“%%Rn”,
" do _ loop & lt- function(u1) {n ",
“n”,
" # Initialize `usq`n ",
" usq & lt- 0n”,
“n”,
" for(i in 1:100) {n ",
“‘u 1’的第I个元素的平方到‘usq’n的第‘I’个位置”,
" usq[I]& lt;- u1[i]*u1[i]n ",
" }n ",
“n”,
"}"
]
},
{
" cell_type": "code ",
“execution _ count”:4,
"元数据":{},
"输出":[
{
" name": "stdout ",
"输出类型":"流",
"文本":[
“1.58 ms 42.8?每循环s(平均标准偏差。戴夫。7次运行,每次1000个循环)n "
]
}
],
"来源":[
" %timeit -n 1000n ",
“%%Rn”,
" u 1 & lt;- rnorm(100)n”,
" do_loop(u1)"
]
},
{
" cell_type": "code ",
“execution _ count”:5,
"元数据":{},
"输出":[
{
" name": "stdout ",
"输出类型":"流",
"文本":[
"36.9 ?s 5.99?每循环s(平均标准偏差。戴夫。7次运行,每次1000个循环)n "
]
}
],
"来源":[
" %timeit -n 1000n ",
" u 1 = NP . random . randn(100)n ",
" do_loop(u1)"
]
}
],
"元数据":{
" kernelspec": {
" display_name": "Python 3 ",
《语言》:“python”,
【名称】:“python3”
},
"语言信息":{
" codemirror_mode": {
"名称":" ipython ",
【版本】:3
},
"文件扩展名":"。py”,
“mime type”:“text/x-python”,
【名称】:“python”,
" nbconvert_exporter": "python ",
" pygments_lexer": "ipython3 ",
“版本”:“3.6.3”
}
},
【nb format】:4、
" nbformat_minor": 2
}
Python是0.000037秒,r是0.00158秒。
包括加载时间和命令行运行:R为0.238秒,Python为0.147秒。强调一下,这不是一个科学严谨的测试。
测试证明Python的运行速度明显加快。通常不会有太大影响。
除了运行速度,对于数据科学家来说,哪个性能更重要?两种语言很受欢迎,因为它们可以用作命令语言。比如在使用Python的时候,我们大部分时间都非常依赖熊猫。这涉及到每种语言的模块和库,以及它们是如何执行的。
第三方支持
Python有PyPI,R语言有CRAN,两者都有Anaconda。
CRAN使用内置的install.packages命令。目前CRAN上大约有12000个包。数据科学中可以使用1/2以上的包。
PyPi中的包数是前者的10倍,大约有145438+00000个包。有3700个致力于科学工程。有些也可以用在科学上,只是没有贴标签。
两者都有重复之处。在搜索“随机森林”时,可以在PyPi中得到170个物品,但这些包并不相同。
虽然Python的包数是R的10倍,但数据科学相关的包数大致相同。
运行速度
拿数据框和熊猫比较更有意义。
我们进行了一个实验来比较复杂探索任务的执行时间,结果如下:
Python在大多数任务中运行速度更快。
http://nb viewer . jupyter . org/gist/Brian ray/4ce 15234 E6 AC 2975 b 335 c 8d 90 a 4 b 6882
如您所见,Python+Pandas比原生R语言数据帧更快。注意,这并不意味着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,两个同时用。例子如下:
之后可以传输熊猫的数据帧,然后通过rpy2自动转换成R的数据帧,用“-i df”转换:
http://nb viewer . jupyter . org/gist/Brian ray/734 BD 54 f 468d 9 a6 db 9171 B2 CFC 98405 a
预测
Kaggle上有人用R或者Python为开发者写了一个内核。他根据数据发现了以下有趣的结果:
如果你打算明年转Linux,你更有可能是Python用户;
如果你是学统计学的,你用r的可能性更大;如果你学的是计算机科学,你用Python的可能性更大;。
如果你还年轻(18-24岁),你更有可能是Python用户;
如果你参加一个编程比赛,你更有可能是Python用户;
如果你明年想用Android,你更有可能是Python用户;
如果明年想学SQL,你更有可能是R用户;
如果你用的是MS office,你更有可能是r用户;
如果明年想用Rasperry Pi,你更有可能是Python用户;
如果你是全日制学生,你更有可能是Python用户;
如果你使用敏捷方法论,你更有可能是一个Python用户;
如果你对人工智能的担忧多于兴奋,那么你更有可能是一个R用户。
公司和个人偏好
我和Google以及Stack Overflow大神Alex Martelli交流的时候,他给我解释了为什么Google一开始只官方支持少数几种语言。即使在谷歌这种相对发达的环境下,也有一些限制和偏好,其他企业也是如此。
除了企业偏好,企业中第一个使用语言的人也会起到决定性的作用。德勤第一个用R的人,现在还在公司工作,目前是首席数据科学家。我的建议是,选择自己喜欢的语言,热爱自己选择的语言,发挥带头作用,热爱自己的职业。
当你在研究重要的东西时,错误是不可避免的。然而,每一个设计良好的数据科学项目都会给数据科学家留下一些实验和学习的空间。保持开放的心态,拥抱多样性是很重要的。
最后,个人主要用Python,然后期待能多了解r。