在许多教程或手册中,叙述似乎暗示R和python作为分析过程的补充组件共存。但是,对我而言,这两种语言似乎在做同样的事情。
所以我的问题是,这两种语言是否真的有专门的细分市场,还是使用一种或另一种只是个人喜好?
在许多教程或手册中,叙述似乎暗示R和python作为分析过程的补充组件共存。但是,对我而言,这两种语言似乎在做同样的事情。
所以我的问题是,这两种语言是否真的有专门的细分市场,还是使用一种或另一种只是个人喜好?
Answers:
它们是互补的。的确,两者都可以做相同的事情,但是对于大多数语言来说都是如此。每个都有其优点和缺点。普遍的看法是,Python最适合用于数据收集和准备以及文本分析。R被认为是最适合数据分析的,因为它首先是一种统计语言。
R有各种各样的软件包供您选择,但它的主要用途是统计分析-从基本的卡方检验到因子分析以及危害模型,它既简单又健壮。统计中的一些知名人士创建了R程序包,并且它有一个活跃的社区来满足您的各种需求。ggplot2
是数据可视化(图形等)的标准。R是一种向量化语言,旨在有效地遍历数据。它还将所有数据存储在RAM中,这是一把双刃剑-它在较小的数据集上比较快(尽管有些人可能会与我争论),但是它不能很好地处理大数据(尽管它具有绕过此包的软件包) ,例如ff
)。
Python比R更容易学习-特别是对于那些以前有编程经验的人。R只是...很奇怪。Python擅长数据检索,并且是用于Web抓取的语言(令人惊叹的beautifulsoup
)。Python以其在字符串解析和文本处理方面的实力而闻名。pandas
是用于数据操作,合并,转换等的出色库,并且运行速度很快(可能受R启发)。
当您需要进行一些编程时,Python很棒。这并不奇怪,因为它是通用语言。但是,R及其所有扩展都是由统计学家为统计学家建立的。因此,尽管在许多应用程序中Python可能变得更容易,更好,更快,但R将成为统计分析的首选平台。
data.table
R中的程序包专门用于围绕大型数据集进行有效的工作,并将插件插入精细的分布式处理中。
data.table
;我也很高兴地说这rvest
是一个出色的工具,能够处理大多数刮刮任务,比beautifulsoup
我将尝试使用这两种语言的人来提出一个答案,以解决这两种语言在数据科学/统计/数据分析等方面发挥作用的要点。
数据分析中的工作流程通常包括以下步骤:
在99%的时间内,获取数据的过程都取决于查询某种SQL或Impala数据库:Python和R都有特定的客户端或库,它们可以同时且同样好地完成工作(RImpala
,RmySQL
对于R和MySQLdb
Python工作顺利,没有太多补充)。在读取外部.csv文件时,Rdata.table
包提供的功能可以立即读取带有任何自定义解析选项的庞大而复杂的.csv文件,并将结果直接转换为具有列名和行号的数据帧。fread
我们希望将数据存储在某种表中,以便我们可以轻松访问任何单个条目,行或列。
所述ř包data.table
提供无与伦比的方式来标记,重命名,删除和访问数据。标准语法非常像SQL,就像dt[i, j, fun_by]
,它应该是这样dt[where_condition, select_column, grouped_by (or the like)]
;可以在其中以及j
子句中放置自定义的用户定义函数,这样您就可以完全自由地操作数据并将任何复杂或复杂的函数应用于组或子集(例如,第i行,第k行且仅当整列的标准偏差为“是”时,才将其求和到第(i-1)行的第(k-2)个元素,并按最后一列进行分组。看看基准测试以及关于SO的另一个令人惊奇的问题。列,行的排序,删除和重命名完成了它们必须要做的事情,并且标准向量化R方法apply, sapply, lapply, ifelse
对列和数据帧执行了向量化操作,而没有循环遍历每个元素(请记住,每当您在R中使用循环时,确实做错了)。
Python的反武器是pandas
库。最后,它提供了一种结构pd.DataFrame
(标准Python缺少,由于某种原因我仍然不知道),该结构将数据按其本身进行处理,即数据帧(而不是某些数据numpy array, numpy list, numpy matrix
或其他数据)。诸如分组,重命名,排序等操作很容易实现,在这里,用户也可以使用Python apply
或将任何自定义函数应用于分组的数据集或框架的子集lambda
。我个人不喜欢df[df.iloc(...)]
访问条目的语法,但这只是个人喜好,完全没有问题。分组操作的基准仍然比R稍差一些,data.table
但是除非您想节省0.02秒的编译时间,否则性能不会有太大差异。
在[R的方式来对待字符串是使用stringr
,允许任何文本操作,字谜,正则表达式,尾随空格或轻松类似的包。它也可以与JSON库结合使用,这些JSON库解压缩JSON字典并取消列出其元素,从而使人们拥有一个最终的数据框,其中的列名和元素就是它们所必须的,而没有任何非UTF8字符或空白在那里。
Python的Pandas .str.
在与正则表达式,尾随或其他方面的竞争中所起的作用相同,因此即使在口味上也没有太大差异。
我认为这是两种语言之间出现差异的地方。
[R到今天为止,已经拥有了无与伦比的库集,这些库使用户基本上可以在一到两行代码中完成他们想要的任何事情。标准函数或多项式回归在一线执行,并产生其系数易于读取的输出,以及其对应的置信区间和p值分布。同样,对于聚类,对于随机森林模型,对于树状图,主成分分析,奇异值分解,对数拟合,等等。上面每一个的输出很可能带有一个特定的绘图类,该类生成可视化的可视化内容,并用颜色和气泡表示系数和参数。假设检验,统计检验,Shapiro,
Python试图与SciPy
and 保持同步scikit-learn
。大多数标准分析和模型也都可用,但它们的编码时间稍长,而读取则不太直观(我认为)。尽管可以追溯到已经存在的库的某些组合,但是缺少更复杂的机器。我更喜欢在Python中而不是在R中做的一件事是使用二元语法,三元语法和更高阶的词袋文本分析。
两种语言都有漂亮的绘图工具,首先是R ggplot2
,以及相应的Python等效工具。虽然竞争并不多,但它们可以安全可靠地完成工作,尽管我相信,如果要展示结果,您可能必须使用其他工具-那里有许多花哨的色彩缤纷的设计工具,而Python和R都不意味着观众花哨的红色和绿色拖放。R最近发布了对其shiny app
功能的许多改进,基本上使它能够产生交互式输出。我从不想学习它,但是我知道它在那里并且人们很好地使用了它。
作为一个旁注,我想强调一下这两种语言之间的主要区别是Python是一种通用编程语言,由计算机科学,可移植性,部署等组成,并由它们制成。它的功能很棒,而且学习起来很简单;没有人不喜欢python。但这是一种进行编程的编程语言。
[R另一方面,它是由数学家,物理学家,统计学家和数据科学家发明并为他们发明的。如果您来自那个背景,那么一切都会非常有意义,因为它完美地反映并重现了统计和数学中使用的概念。但是,如果相反,您是计算机科学背景的,并且想在R中模拟Java或C,您将感到失望。它没有标准意义上的“对象”(嗯,有,但是没有人通常认为的东西...),它没有标准意义上的类(有,但是,但没有通常意义上的类)认为它们是...),它没有“指针”或所有其他计算机科学结构-只是因为它不需要它们。最后但是同样重要的:文档和软件包易于创建和阅读(如果您使用的是Rstudio);那里有一个庞大而充满激情的社区,而Google花费大约五秒钟的时间“如何在R中进行插入随机问题”,其第一项将您重定向到具有相应代码的问题的解决方案(由他人完成) , 立刻。
大多数工业公司的基础架构都使用Python(或Python友好环境)构建,可以轻松集成Python代码(几乎import myAnalysis
可以在任何地方完成)。但是,任何现代技术,服务器或平台都可以轻松运行后台R代码,也不会出现任何问题。
Python是一种通用的编程语言:因此,它除了执行数据分析外,还可以执行许多其他任务。例如,如果我们要在生产服务器中自动化模型执行,那么python是一个很好的选择。其他示例包括连接到硬件/传感器以读取数据,与数据库进行交互(诸如JSON之类的关系或非结构化数据),解析数据,网络编程(TCP / IP),图形用户界面,与Shell进行交互等(嗯,数据科学家为什么要执行这么多与预测模型无关的任务呢?我认为人们有不同的定义什么是数据科学家?在某些组织中,解析数据并使用仪表板进行描述性分析对业务而言足够好,而数据对于进行预测模型而言则不够成熟。另一方面,在许多小型公司中,人们可能希望数据科学家从事大量的软件工程。了解python将使您独立于其他软件工程师。)
R有很多统计软件包,它们比python或MATLAB好得多。通过使用R,人们可以真正地在模型级别而不是实现细节级别进行思考。这是开发统计模型的巨大优势。例如,许多人正在python中手动实现神经网络。进行此类工作可能无法帮助您理解神经网络为何起作用,而只是按照配方复制他人的工作以检查其是否起作用。如果我们在R中工作,我们可以轻松地关注模型背后的数学,而不是实现细节。
在许多情况下,人们会一起使用它们。使用python可以轻松构建软件,而使用R可以轻松构建模型。如果我们要在生产环境中交付模型而不是纸质文件,则可能需要两者。如果您的公司有很多软件工程师,则可能需要更多的R。如果您的公司有很多研究科学家,则可能需要更多的python。
scikit-learn
? scikit-learn.org/stable
各行各业的程序员低估了文化选择了多少语言。像Node.js这样的Web开发人员。科学家喜欢Python。作为一名能够同时处理Javascript的流畅性和Java的刚性的多语言软件工程师,我意识到这些语言对彼此的工作不利并没有任何内在的原因-只是大量的软件包,文档,社区,书籍,等围绕它们。
(出于内在原因,一种随机语言比其他某种语言要好,请参见即将对此答案发表的评论。)
我个人的预测是,Python是未来的方式,因为它可以做的一切R可以-或者说,就够了R可以是专门的程序员正在努力填补空白的-而且是远远更好的软件工程语言。软件工程是一门涉及以下方面的学科:
坦率地说,Python更容易学习。
科学家和统计学家将意识到他们是良好软件工程实践的利益相关者,而不是一个独立且不受干扰的职业。仅根据我的观点,但证明学术规范易碎的论文将支持此观点。
这个答案是我的全部观点-但您提出了一个很自以为是的问题,并且由于到目前为止它已广为接受,所以我认为您应该得到一个朴实无华,合理的(我希望!)观点作为回应。对于Python来说,关于R的争论是很认真的,当现实本身就是党派的时候,我会拒绝发布无党派的答案。
我是R用户,但我认为Python是未来(我不认为这是语法)
Python是未来Python
的好处在于,其他人已经提到了更广泛的支持,并且对于程序员来说,逻辑语法也更多。
而且,您可以将分析结果转化为生产系统的能力要简单得多。
也许是因为Python是通用的,而R不是,但当我看到生产化的R管道时,我甚至大为惊讶。
不仅如此,即使对于高级应用程序,Python也在迅速赶上(Scikit-learn,PyBrain,Tensorflow等),而R在如何实现统计方法方面仍然是学术界的通用语言,由于高级专业图书馆的问世。
但是R并不坏,
很多人似乎都喜欢使用“ R的语法不好”这一潮流。
我希望提出R的语法是一件好事!使用R时
,赋值函数,惰性求值,非标准求值和公式具有巨大的好处。
它节省了太多时间,不必担心转义摘要中引用的变量名或如何针对针对什么或查看名称,names()
然后通过添加来分配新名称<- c("A", "B", "C")
。
当人们抱怨R的怪异语法时,他们将其视为一种编程语言,而不是一种数据科学工具。
作为来自R并热爱dplyr的人,相比之下,pandas的语法有点笨拙。
是的,它稍微灵活一些,但是与R中的大多数任务相比,在R中执行简单的命令要花费更多的击键,仅仅是为了满足Python的解析器,而不是表达您的想法。
总结
当然,同时了解这两种知识是很明智的,而Python可以做到这一点,R的特定领域设计选择只是使其在临时工作中更加简单。R的巨大缺点是很难离开它的领域,一旦尝试以可持续的方式实施发现,基本上就必须这样做。
Python在科学之外被广泛采用,因此您将从中受益。正如“ R的愤怒指南”所指出的那样,R是由一个社区开发的,该社区必须一阶零软件开发人员。
我要说的是,今天R具有两个主要优点:在某些领域中一些真正成熟的高度专业化的软件包,以及最先进的可复制研究软件包knitr。
Python似乎更适合其他所有内容。
当然,这是该线程中几乎所有内容的一种见解。我对此线程仍然存在感到惊讶。
如其他答案所述,Python是一种很好的通用编程语言,而R 作为一种编程语言存在严重缺陷,但具有一组更丰富的数据分析库。近年来,Python通过开发成熟的数据分析库(例如scikit-learn)追赶R,而R永远不会被修复。实际上,我几乎所有内容都使用Python(实际上是Hy),而对于比较深奥的方法(例如分位数回归)(在Python的statsmodels中似乎无法实现)则只使用R。从Python调用R有几种方法。PypeR是一个非常简单的应用程序,以至于它可以在Windows服务器等恶劣环境中工作。
编辑:我鼓励任何想对此进行进一步辩论的人与链接的文章的作者进行讨论,而不是评论此答案。