R与Python进行数据分析[关闭]


60

我已经进行了大约一年的编程,并且我对数据分析和机器学习非常感兴趣。我正在参加一些在线课程,并且正在阅读几本书。

我正在做的所有事情都使用R或Python,并且我正在寻找有关是否应该专注于一种语言(如果需要的话)还是同时使用这两种语言的建议。他们互相补充吗?

-我应该提到我在学校使用C#,但是通过自学熟悉了Python。


这可能是一个有趣的链接:coursera.org/course/compdata
Giorgio

Answers:


39

我同时使用Python(用于数据分析,包括numpy和scipy)和R。但是,我仅使用R来执行数据分析,而使用Python来执行更通用的编程任务(例如,计算机模型的工作流控制)。

就基本操作而言,例如对数组的操作以及sort,R和Python + numpy的操作非常相似。R在很大的统计函数库中占有优势。另外,matplotlib似乎不如ggplot2好,但是我没有那么多地使用过matplotlib。另外,我将首先专注于一种语言,并擅长于特定语言。您似乎首先对数据分析感兴趣,而不对软件工程感兴趣。我会选择R并坚持下去。就是说,我认为选择Python + numpy + scipy + scikit绝对是绝佳选择,只是我觉得R更加出色。

我还将环顾您周围的同事和您所在领域的其他人所使用的内容。如果他们都使用Python,那么为了更轻松地向他们学习并交换代码,请务必坚持使用。

免责声明:请注意,我是R的重度用户,因此尽管我试图使回答尽可能客观,但我的看法可能有偏见。另外,我还没有广泛使用Python + numpy,尽管我认识到在其中进行所有数据分析的同事。

ps:此链接可能很有趣:http : //seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps:或此帖子的引文:

我在所有研究中都使用R和Python(根据需要使用Rcpp或Cython),但如果可以避免的话,我宁愿避免使用C或C ++编写。R是一种很棒的语言,很大程度上是因为用户社区令人难以置信。它是由统计学家创建的,这意味着数据分析是语言的核心。我认为这是该语言的主要功能,也是无法在短期内取代它的重要原因。通常,Python是一种更好的整体语言,尤其是当您考虑将功能编程与面向对象结合在一起时。与Scipy / Numpy,Pandas和statsmodels相结合,可提供强大的组合。但是Python仍然缺少一个严肃的统计学家/数学家社区。


3
说R比Python强大,您是说Python + numpy / blaze + scipy还是纯Python?
9000

5
我的意思是Python + numpy是的,否则选择会更加容易。我认为就基本操作而言,说对数组的操作和排序,R和Python + numpy是非常可比的。R在很大的统计函数库中占有优势。另外,matplotlib似乎不如ggplot2好,但是我没有那么多地使用过matplotlib。
Paul Hiemstra

就是说,我认为选择Python + numpy + scipy + scikit绝对是绝佳选择,只是我觉得R更加出色。
Paul Hiemstra 2013年

@PaulHiemstra-如果在问题中重新提出问题,并且您有机会,则您在评论中会指出一些不错的观点,可能会改善您的答案。
psr

@psr我在评论中进行了编辑,如果要编辑它,显然不需要打开问题(也许只有我可以编辑它...)。
Paul Hiemstra 2013年

36

背景:我是奥斯汀一家初创公司的数据科学家,来自研究生院(物理)。我每天都使用Python进行数据分析,但是稍微使用R。我也使用C#/。NET和Java(大约每天使用),我在研究生院大量使用C ++。

我认为将Python用于数字(超过R)的主要问题是用户社区的规模。由于这种语言已经存在了很长时间,所以很多人都做了您可能想做的事情。这意味着,当遇到难题时,您只需下载该软件包即可开始工作。而R“很有效”:给它一个数据集,它知道哪些汇总统计信息有用。您给它一些结果,它知道您想要什么图。您想要制作的所有常见情节都在那里,甚至您必须在Wikipedia上查找的一些非常深奥的情节。和scipy / numpy / pandas / statsmodels / etc一样好。适用于Python,它们不在R标准库级别。

与R相比,Python的主要优点是它是C系列中真正的编程语言。它易于扩展,因此可以想象,沙箱中的任何内容都可以用于生产。Python引入了Object Orientation,与R相比,R感觉像是事后的想法(因为确实如此)。Python还具有其他出色的功能:线程和并行处理非常简单,而且我不确定R中是否是如此。学习Python也会为您提供强大的脚本工具。还有非常好的(免费)Python IDE,如果您愿意支付(少于$ 100)更好的IDE,但我不确定R是否如此-我知道的唯一R IDE是R Studio非常好,但以我的经验却不如PyDev + Eclipse。

我将其添加为一点点:由于您还在上学,因此您应该考虑工作。与熟练的R开发人员相比,与熟练的Python开发人员相比,您会发现更多的职位发布。在奥斯丁,Django开发人员的工作是从天而降的。如果您真的很了解R,那么可以在一些地方利用该技能(例如,Revolution Analytics),但是很多商店似乎都在使用Python。即使在数据分析/数据科学领域,似乎也有越来越多的人转向Python。

并且不要低估您可能与/只认识(比如说)Java的人一起工作。这些人将能够轻松阅读您的Python代码。如果您在R中完成所有工作,则不一定是这种情况。(这来自经验。)

最后,这听起来也许是肤浅的,但是我认为Python文档和命名约定(事实证明,这是虔诚遵守的)比实用R文档更好。我敢肯定,这将是一个激烈的辩论,但是Python的重点是可读性。这意味着Python函数的参数具有您可以读取的名称,这意味着某些含义。在R中,参数名称通常会被截断---我发现在Python中这不太正确。这听起来有些古怪,但是当您可以轻松地将参数x_label命名为“ x_label”(仅举一个例子)时,它使我发疯了写“ xlab”之类的东西-当您尝试学习一个新的模块/软件包API。阅读R doc就像阅读Linux手册页一样-如果这是使您浮出水面的东西,那么您将获得更多的力量。

综上所述,我建议采取以下措施(这也是我的典型工作流程):由于您了解Python,因此请使用它作为您的第一个工具。当您发现缺少Python时,请学习足够的R以执行所需的操作,然后执行以下任一操作:

  1. 用R编写脚本并使用subprocess模块​​从Python运行它们,或者
  2. 安装RPy模块。

将Python用于Python的优势,并用上述方法之一填补空白。这是我正常的工作流程-我通常使用R来绘制事物,而使用Python来进行繁重的工作。

综上所述:由于Python强调可读性(“ Pythonic”的搜索语法),良好的免费IDE的可用性,C语言家族的事实,因此您更有可能利用大写字母技巧,语言的全面更好的文档样式,我建议您将Python用作入门工具,并仅在必要时依赖R。


好的,这是(到目前为止)我在堆栈站点上最受欢迎的答案,它甚至不是#1 :)我希望这对沿途的一些人有所帮助。

无论如何,经过几年的实践,我得出了以下结论:

这可能是错误的问题。

问“我应该学习这种特定技术”是一个不好的问题。为什么?

  1. 技术的变化。您将始终必须学习另一项技术。如果您在Twitter上工作,他们将运行Scala。有些地方是Python商店。有些地方不在乎。您不会被雇用是因为您知道或不知道某项特定技术—如果您不能学习一项新技术,则可以(并且应该)被解雇。就像,如果出现了一个新的管钳,而您是水管工,却无法弄清新管钳的工作原理,则您可能是个糟糕的水管工。
  2. 如果选择“我要学习这项技术”还是“我花更多的时间解决实际问题”,则应始终选择后者,无一例外。

作为数据科学家,您的工作是解决问题。在您参加的每次会议或聚会上,那种智慧几乎总是会丢失的-我见过的每一次“大数据”演讲都集中在技术上,而不是解决问题上。最后,实际的问题解决方法通常只剩下几张幻灯片:

[演讲标题=“在Cool New Startup上进行深度学习”] ... [45分钟的图表和技术知识,在此期间我要进行区域划分并检查我的电话] ...然后,在实现我们的Hadoop集群和[Ben进行了区域划分之后再次],我们可以运行我们的深度学习例程,[唤醒:这就是我来这的原因!]详细信息是专有的。有什么问题吗

这给人一种不好的印象,那就是该领域是关于技术的,事实并非如此。如果您真的很擅长Scala,Python或R,但是您真的不擅长解决问题,那么您将成为一个糟糕的数据科学家

帕科·内森(Paco Nathan)几个月前在奥斯丁举行了为期一天的“大数据”会议上,他说“化学与试管无关”。这几乎可以总结一下-数据科学与Scala,Hadoop,Spark或其他任何其他技术都无关。归根结底,我想雇用的是有思想的人,而不是那些精通使用Stack Overflow学习工具包的人。

同样,如果您去求职面试,而他们不仅仅因为您不懂某种编程语言而雇用您,那该公司也很烂。他们不了解“数据科学家”的含义,如果解决不了,可能对您更好。

最后,如果您的问题解决能力微不足道(对自己诚实),或者您真的只是喜欢技术方面的东西,或者学习技术是您真正喜欢的(再次诚实),那么请学习很多技术。您将始终能够找到适合您技能的“数据工程师”类型的角色。这不是一件坏事,数据工程师可以润滑轮子,使您有可能从事数据科学家的工作。(区别类似于软件架构师与开发团队。)


3
不过,我要说的是,如果我在交易大厅里工作,而首席交易员向我介绍了期权价格的csv,并希望我用对数线性分布拟合它们,并返回均值和标准差,我什至不考虑使用Python。我觉得它像三行代码执行此操作在R.
BenDundee

12

因此,我主要在Matlab中进行了数据分析,但在Python中做了一些(以及更多用于通用的Python),并且我也开始使用R。我在这里不建议您使用蟒蛇。原因是因为您是从机器学习的角度进行数据分析的,而不是统计数据(其中R占主导地位)或数字信号处理(Matlab占主导地位)。

机器学习和统计之间显然存在大量重叠。但是重叠不是身份。机器学习使用CS中我不想在R中实现的想法。当然,您可以在R中计算最小生成树。不过,它看起来像是一团糟。机器学习人员会假设您可以轻松访问哈希表,二进制搜索树等。在我看来,在必要时重新实施统计算法要比尝试将基本上是领域特定语言的语言转换为通用编程语言要容易得多。

Python进行数据分析的附带好处也更高。您将同时学习一种真正的编程语言,该语言可以处理脚本,创建更大的应用程序等。R实际上是stats社区的利基语言,甚至Matlab的使用也更为广泛。

我想,我先看一些论文,看看他们用什么语言发布代码。如果它不在R中,请不要使用它。


1
非常感谢你。我绝对对ML方面更感兴趣。
The_Cthulhu_Kid

1
只是一个很小的附录:我敢肯定R也可以以某种方式做到这一点,但是Python众所周知,它能够使用Cython以最小的开销调用C或将函数编译为C。因此,通常您可以花更少的精力就能更快地获得数据,这是查看实际数据的主要考虑因素。另一个(最终)异乎寻常的注解:Java有一些非常好的机器学习库(例如WEKA)。但是,很酷的是,您也可以使用Jython从Python调用它们:-)
Nir Friedman 2013年

7

作为一所古老的(超过50岁的)科学家,他拥有并继续使用许多这样的工具,我将加两分钱。我曾与仍然使用Fortran编写每段代码的同事一起工作,从琐碎的一次性数据分析工作到主导世界某些超级计算机的代码。最近的Fortran方言(F90,F95,F2003,F2008)是恕我直言,它是现有的一些最佳设计语言。数十年的高性能计算经验导致了令人印象深刻的语言开发。

我有时只使用过Python,并且会重新使用它(主要是因为Sage),但是我使用了经过时间检验的语言套件,这些套件对我来说很有效。Fortran,C,Perl,R和Scheme(带有tcl以编写VMD脚本)。我发现R和Fortran和C的组合非常舒适。与在R中关于对象模型的其他评论相反,它是基于CLOS泛型函数和方法分派的概念,是用于交互式工作的良好对象模型。与新程序包交互工作时,您通常可以依靠通用功能(例如“打印”和“绘图”)来完成一些生产工作。

Fortran和C的API非常易于使用。如果您曾经使用过Fortran和C进行建模和数据分析,那么这将是一大优势。动态生成R代码并对其进行评估的能力虽然不如Lisp和C中的宏系统那么干净,但是在处理动态数据集时非常有用。

R对于实际数据的一些限制包括按值调用方法。尽管有CS原因需要按值进行调用,但在具有大量数值数据的现实世界编程中,需要某种形式的按引用进行调用(请注意,旧代码中的Fortran通用块或新代码中的模块数据的重要性)。在这方面,PDL(Perl数据语言)采用的方法特别优雅。(除非请求复制,否则Pdl本质上是通过引用调用的。Sub-pdl引用父pdl的子部分,其语法比Fortran或C提供的语法简洁得多。)

学习许多语言是很好的。毫无疑问,Python是一种重要的语言,但是R在它的领域中也是如此。但是,当橡胶确实需要走上科学之路时,Fortran和C(有些则为C ++)将很难取代。


1

R的一个关键特性是,它既是一种程序包,又是一种程序包库。原则上,每个程序包编写者都可以访问其他每个程序包中的内容。这大大减少了重新发明,重新编写文档,重新学习的需求。这适用于包作者和用户。当然,这种基础设施是有代价的。软件包作者必须适应随着时间的流逝变得越来越挑剔的标准。其中一些可能会溢出到用户遇到的情况中。

据我了解,Python没有软件包管理系统。没有R的全面R存档网络(http://cran.r-project.org)的等效项,也没有R任务视图(http://cran.csiro.au/web/views/)的直接等效项。因此,在某种程度上,对于R而言并非如此,它是一种程序员的工具,几乎可以自己完成工作,而不是作为依靠已有资源进行社区努力的一部分。

对于数据分析和机器学习,在很大程度上肯定需要建立并利用已经具备的能力。对于更通用的编程任务,Python可能具有优势。您是否会做足够的工作来证明学习Python所付出的努力?


3
Python有一个称为pip的软件包管理系统。它不是标准库的一部分,但它将随Python 3.4(自下个月(2014年3月)发布)一起提供。
科迪·皮尔斯尔

2
全面R存档网络的Python等效项是PyPI:pypi.python.org/pypi
Wilfred Hughes,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.