banner
大数据平台>大数据技术与应用>R语言和Python比较

R语言 vs Python:数据分析哪家强?

作者: afenxi来源: afenxi时间:2017-04-07 12:14:01

摘要:这篇文章旨在更客观地看待这两门语言。我们会平行使用Python和R分析一个数据集,展示两种语言在实现相同结果时需要使用什么样的代码。这让我们了解每种语言的优缺点,而不是猜想。在Dataquest,我们教授两种语言,并认为两者在数据科学工具箱中都占据各自的地位。

我们将会分析一个NBA数据集,包含运动员和他们在2013-2014赛季的表现,可以在这里下载这个数据集。我们展示Python和R的代码,同时做出一些解释和讨论。事不宜迟,现在就开始这场硬碰硬的对决吧!

读取CSV文件

R

nba <- read.csv("nba_2013.csv")

Python

import pandas nba = pandas.read_csv("nba_2013.csv")

上面的代码分别在两种语言中将包含2013-2014赛季NBA球员的数据的nba_2013.csv文件加载为变量nba。Python中实际的唯一不同是需要加载pandas库以使用Dataframe。Dataframe在R和Python中都可用,它是一个二维数组(矩阵),其中每列都可以是不同的数据类型。在完成这一步后,csv文件在两种语言中都加载为dataframe。

统计球员数量

R

print(dim(nba))

[1] 481 31

Python

print(nba.shape)

(481, 31)

两者分别输出球员数量和数据列数量。我们有481行,或者说球员,和31列关于球员的数据。

查看数据的第一行

R

print(head(nba, 1))

player pos age bref_team_id 1 Quincy Acy SF 23 TOT [output truncated]

Python

print(nba.head(1))

player pos age bref_team_id 0 Quincy Acy SF 23 TOT [output truncated]

它们几乎完全相同。两种语言都打印出数据的第一行,语法也非常类似。Python在这里更面向对象一些,head是dataframe对象的一个方法,而R具有一个单独的head函数。当开始使用这些语言做分析时,这是一个共同的主题,可以看到Python更加面向对象而R更函数化。

计算每个指标的均值

让我们为每个指标计算均值。如你所见,数据列以类似fg(field goals made)和ast(assists)的名称命名。它们都是球员的赛季统计指标。如果想得到指标的完整说明,参阅这里。

R

 

这将创建一个包含两个列表的列表,第一个是CLE的比分,第二个是GSW的比分。两个都有标题,以及每个球员和他们的比赛统计。我们现在不会将其转换为更多的训练数据,但是如果需要把它们加入nbadataframe,转换可以很容易地完成。

R代码比Python更复杂,因为它没有一个方便的方式使用正则表达式选择内容,因此我们不得不做额外的处理以从HTML中得到队伍名称。R也不鼓励使用for循环,支持沿向量应用函数。我们使用lapply做到这一点,但由于需要处理的每一行都因是否是标题而异,需要传递保留项的索引和整个rows列表给函数。

我们使用rvest,一个广泛使用的新R网络抓取包实现抽取数据,注意这里可以直接传递url给rvest,因此上一步在R中并不是必须的。

在Python中,我们使用了BeautifulSoup,一个最常用的web抓取包。它让我们可以在标签间循环,并以一种直接的方式构建列表的列表。

结论

我们已经看到了如何使用R和Python分析一个数据集。还有很多任务没有深入,例如保存和分享分析结果,测试,确保生产就绪,以及构建更多的可视化。我们会在近期继续探讨这些,从而得到更明确的结论。现在,下面是一些能够得到的:

R更加函数化,Python更面向对象

就像我们在lm,predict和其他函数中看到的那样,R用函数完成大部分工作。对比Python中的`LinearRegression类,还有dataframe的sample方法。

R包含更多的数据分析内建功能,Python依赖于第三方软件包。

当我们查看汇总统计量时,在R中可以直接使用summary内建函数,但是Python中必须依靠statsmodels包。dataframe是R内置的结构,而在Python中由pandas包引入。

Python拥有“主要的”数据分析包,R拥有由较小的包组成的更大的生态系统

在Python中,我们可以使用scikit-learn完成线性回归,随机森林和许多其他任务。它提供了一致的API,并很好的维护。在R中,我们有多种多样的包,但是也更加碎片化和不一致(线性回归是内置的lm,randomForest是单独的包,等等)。

总体上R有更多的统计支持

R是作为统计语言被构建的,它也显示了这一点。Python中的statsmodels和其他软件包提供了统计方法的大部分实现,但是R的生态系统要大的多。

Python中完成非统计任务通常更加直接

有了类似BeautifulSoup和request这样良好维护的软件包,Python中的网页抓取远易于R。这种说法也适于我们还未关注的其他任务,例如保存数据库,部署web服务器或运行复杂的工作流。

数据分析工作流在两者之间有许多相似之处

R和Python之间有一些互相启发的地方(pandas的Dataframe受到R中dataframe的影响,rvest包来自BeautifulSoup的启发),两者的生态系统都在不断发展壮大,对两种语言中许多共同的任务来说,语法和实现都是非常相似的。

总结

在Dataquest,我们首先教授Python,但是最近也加入了R的课程。我们看到这两种语言是互补的,虽然Python在更多领域更强大,但R是一种高效的语言。它可以作为Python在数据探索和统计等领域的补充,或者你惟一的数据分析工具。正如本篇文章中所显示的,两种语言有许多相似的语法和实现方法,你不能在一个或另一个,或者两者中出错。

Vik Paruchuri 原文链接

原创文章,作者:古思特,如若转载,请注明出处:《R语言 vs Python:数据分析哪家强?》http://www.afenxi.com/post/8975

banner
看过还想看
可能还想看
最新文章
Yonghong Z-Suite一站式大数据分析平台 —— 以卓越的数据技术为客户创造价值,实现客户成功。