Python与R的区别和联系

转载:http://bbs.pinggu.org/thread-3078817-1-1.html

有人说Python和R的区别是显而易见的,因为R是针对统计的,python是给程序员设计的,其实这话对Python多多少少有些不公平。2012年的时候我们说R是学术界的主流,但是现在Python正在慢慢取代R在学术界的地位。不知道是不是因为大数据时代的到来。

Python与R相比速度要快。Python可以直接处理上G的数据;R不行,R分析数据时需要先通过数据库把大数据转化为小数据(通过groupby)才能交给R做分析,因此R不可能直接分析行为详单,只能分析统计结果。所以有人说:Python=R+SQL/Hive,并不是没有道理的。

Python的一个最明显的优势在于其胶水语言的特性,很多书里也都会提到这一点,一些底层用C写的算法封装在Python包里后性能非常高效(Python的数据挖掘包Orange canve 中的决策树分析50万用户10秒出结果,用R几个小时也出不来,8G内存全部占满)。但是,凡事都不绝对,如果R矢量化编程做得好的话(有点小难度),会使R的速度和程序的长度都有显著性提升。

R的优势在于有包罗万象的统计函数可以调用,特别是在时间序列分析方面,无论是经典还是前沿的方法都有相应的包直接使用。
      相比之下,Python之前在这方面贫乏不少。但是,现在Python有了pandas。pandas提供了一组标准的时间序列处理工具和数据算法。因此,你可以高效处理非常大的时间序列,轻松地进行切片/切块、聚合、对定期/不定期的时间序列进行重采样等。可能你已经猜到了,这些工具中大部分都对金融和经济数据尤为有用,但你当然也可以用它们来分析服务器日志数据。于是,近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大替代方案。

做过几个实验:
1. 用python实现了一个统计方法,其中用到了ctypes,multiprocess。
之后一个项目要做方法比较,又用回R,发现一些bioconductor上的包已经默认用parallel了。(但那个包还是很慢,一下子把所有线程都用掉了,导致整个电脑使用不能,看网页非常卡~)
2. 用python pandas做了一些数据整理工作,类似数据库,两三个表来回查、匹配。感觉还是很方便的。虽然这些工作R也能做,但估计会慢点,毕竟几十万行的条目了。
3. 用python matplotlib画图。pyplot作图的方式和R差异很大,R是一条命令画点东西,pylot是准备好了以后一起出来。pyplot的颜色选择有点尴尬,默认颜色比较少,之后可用html的颜色,但是名字太长了~。pyplot 的legend比R 好用多了,算是半自动化了。pyplot画出来后可以自由拉升缩放,然后再保存为图片,这点比R好用。

总的来说Python是一套比较平衡的语言,各方面都可以,无论是对其他语言的调用,和数据源的连接、读取,对系统的操作,还是正则表达和文字处理,Python都有着明显优势。   而R是在统计方面比较突出。但是数据分析其实不仅仅是统计,前期的数据收集,数据处理,数据抽样,数据聚类,以及比较复杂的数据挖掘算法,数据建模等等这些任务,只要是100M以上的数据,R都很难胜任,但是Python却基本胜任。

结合其在通用编程方面的强大实力,我们完全可以只使用Python这一种语言去构建以数据为中心的应用程序。
      但世上本没有最好的软件或程序,也鲜有人能把单一语言挖掘运用到极致。尤其是很多人早先学了R,现在完全不用又舍不得,所以对于想要学以致用的人来说,如果能把R和Python相结合,就更好不过了,很早看过一篇文章——让R与Python共舞,咱们坛子里有原帖,就不多说了,看完会有更多启发。

BTW: 如果之前没有学过R,可以先学Python然后决定是不是学R,如果学了R,学Python的时候会更快上手。

时间: 2024-10-26 01:46:04

Python与R的区别和联系的相关文章

Python与R的争锋:大数据初学者该怎样选?

作者:个推大数据工程师李树桓在当下,人工智能的浪潮席卷而来.从AlphaGo.无人驾驶技术.人脸识别.语音对话,到商城推荐系统,金融业的风控,量化运营.用户洞察.企业征信.智能投顾等,人工智能的应用广泛渗透到各行各业,也让数据科学家们供不应求.Python和R作为机器学习的主流语言,受到了越来越多的关注.数据学习领域的新兵们经常不清楚如何在二者之间做出抉择,本文就语言特性与使用场景为大家对比剖析. 一.Python和R的概念与特性 Python是一种面向对象.解释型免费开源高级语言.它功能强大,

做数据分析,Python和R究竟哪个更强?

作者: Enoch Kan编译: Mika本文为 CDA 数据分析师原创作品,转载需授权 几十年来,研究人员和开发人员一直在争论,进行数据科学和数据分析,Python和R语言哪种才是更好的选择.近年来,数据科学在生物技术.金融和社交媒体等多个行业迅速发展.数据科学的重要性不仅得到了业内人士的认可,而且还得到了许多学术机构的认可,目前越来越多的学校都开始设立数据科学学位. 随着开源技术的迅速取代了传统的闭源技术,Python和R语言在数据科学中变得越来越受欢迎. 数据科学就业增长图--Indeed

用蒙特卡洛方法计算派-python和R语言

用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却想搞数据分析) 有趣的是书里面有一块讲蒲丰投针计算Pi,这是一种随机模拟法,也就是蒙特卡洛法.蒲丰投针之于我太难,暂时没想到怎么用计算机模拟这一过程. python课中,老师也提到用随机模拟法,也就是蒙特卡洛法(MonteCarlo),用计算机模拟几千次实验,计算pi的近似值.好巧. 就拿python课中的

[Python] NotImplemented 和 NotImplementedError 区别

NotImplemented 是一个非异常对象,NotImplementedError 是一个异常对象. >>> NotImplemented NotImplemented >>> NotImplementedError <type 'exceptions.NotImplementedError'> >>> type(NotImplemented) <type 'NotImplementedType'> >>>

python 调用 R,使用rpy2

python 与 R 是当今数据分析的两大主流语言.作为一个统计系的学生,我最早接触的是R,后来才接触的python.python是通用编程语言,科学计算.数据分析是其重要的组成部分,但并非全部:而R则更偏重于统计分析,毕竟R是统计学家发明的,本身就是为统计而生.python的优势在于其全能性,几乎所有的领域都有python的身影,而R则在统计及其相关领域非常专业.二者各有优势.那么这么好的两个东西,能不能结合到一起呢?答案是肯定的.要想实现这种功能,一般必须要提供相应的调用接口.rpy2这个第

简谈-如何使用Python和R组合完成任务

概述 和那些数据科学比赛不同,在真实的数据科学中,我们可能更多的时间不是在做算法的开发,而是对需求的定义和数据的治理.所以,如何更好的结合现实业务,让数据真正产生价值成了一个更有意义的话题. 数据科学项目的完整流程通常是这样的五步骤: 需求定义=>数据获取=>数据治理=>数据分析=>数据可视化 一.需求定义 需求定义是数据科学项目和数据科学比赛的最大不同之处,在真实情景下,我们往往对目标函数.自变量.约束条件都并不清晰.需要通过访谈.论文.文档等等形式对问题进行系统地分析,将实际问

Python 和 R 数据分析/挖掘工具互查

如果大家已经熟悉python和R的模块/包载入方式,那下面的表查找起来相对方便.python在下表中以模块.的方式引用,部分模块并非原生模块,请使用 pip install * 安装:同理,为了方便索引,R中也以::表示了函数以及函数所在包的名字,如果不含::表示为R的默认包中就有,如含::,请使用 install.packages("*") 安装. 连接器与io 数据库 类别 Python R MySQL mysql-connector-python(官方) RMySQL Oracl

《Python和R数据挖掘技术》50本内部教材,全免费邮寄!

随着互联网.移动互联网的发展,我们已经迎来了一个大数据的时代. 如何对海量数据进行挖掘和分析? Python是一个数据分析和图形显示的程序设计环境,用于统计分析.绘图的语言和操作环境.python有简便而强大的编程语言:可操纵数据的输入和输入,可实现分支.循环,用户可自定义功能. 2017年8月2日,培训中心将举办"Python和R数据挖掘技术-基于Python和R语言的数据挖掘和统计分析技术"公开课. 很多学员由于工作等原因不能到北京进行现场学习,为使更多学员了解这个课程,本培训中心

【转载】 C++中回车换行(\n\r)和换行(\r)的区别

原文:http://blog.csdn.net/xiaofei2010/article/details/8458605 windows下的点一下回车,效果是:回车换行,就是\r\n unix系统下的回车一下就是一个\n 给出如下代码: #include <iostream> using namespace std; int main() { cout << "this is the first line\n"; cout << "this