Python作为统计工作台


355

许多人使用主要工具(例如Excel或其他电子表格,SPSS,Stata或R)来满足其统计需求。他们可能会针对非常特殊的需求转向某些特定的程序包,但是可以使用简单的电子表格或常规统计信息包或统计信息编程环境来完成很多事情。

我一直很喜欢Python作为一种编程语言,对于简单的需求,编写一个简短的程序来计算我的需求很容易。Matplotlib让我可以绘制它。

有没有人完全从R切换到Python?R(或任何其他统计信息包)具有许多特定于统计信息的功能,并且它具有的数据结构使您可以考虑要执行的统计信息,而不必考虑数据的内部表示形式。Python(或其他一些动态语言)的好处是允许我使用熟悉的高级语言进行编程,并且它使我能够与驻留数据或可以进行测量的真实系统进行编程交互。但是我还没有找到任何可以让我用“统计术语”表达事物的Python软件包-从简单的描述统计到更复杂的多元方法。

如果我想将Python用作“统计工作台”来代替R,SPSS等,您能推荐什么?

根据您的经验,我会有什么得失?


5
仅供参考,有可能会引发新的蟒蛇统计版(Subreddit):reddit.com/r/pystats
naught101

当您需要在命令行中移动内容时,pythonpy(github.com/Russell91/pythonpy)是一个不错的工具。
RussellStewart 2015年

Answers:


307

很难忽视R / CRAN中丰富的统计软件包。就是说,我在Python领域花费了很多时间,从不劝阻任何人像我一样开心。:)以下是一些可能对统计工作有用的库/链接。

  • NumPy / Scipy您可能已经知道这些。但是,请允许我指出该菜谱,您可以在其中阅读许多可用的统计工具以及“ 示例列表”,它是功能(包括数据操作和其他操作)的重要参考。另一个方便的参考是John Cook的《Scipy中分布》

  • pandas这是一个非常不错的库,用于处理统计数据-表格数据,时间序列,面板数据。包括许多内置功能,用于数据汇总,分组/聚合和数据透视。还具有统计/计量经济学库。

  • 拉里带 标签的数组,可与NumPy配合使用。提供NumPy中不存在的统计功能,非常适合数据处理。

  • python-statlib最近的一项工作,它结合了许多分散的统计资料库。如果您不使用NumPy或熊猫,则对基本和描述性统计有用。

  • statsmodels统计建模:线性模型,GLM等。

  • scikits 统计和科学计算软件包-特别是平滑,优化和机器学习。

  • PyMC满足您的贝叶斯/ MCMC /分层建模需求。强烈推荐。

  • PyMix混合物模型。

  • Biopython可用于将生物学数据加载到python中,并提供一些基本的统计/机器学习工具进行分析。

如果速度成为问题,请考虑Theano,它由深度学习者成功使用。

还有很多其他的东西,但这是我发现您所提到的最有用的东西。


16
所有答案都是有益和有用的,都应被接受。然而,这个在回答这个问题上做得非常好:使用Python,您必须将很多部分组合在一起才能完成所需的工作。这些指针无疑对任何想要进行统计/建模/等等的人都非常有用。使用Python。谢谢大家!
Fabian Fagerholm,2010年

1
@ars,请问您知道在Windows上使用Python的最佳方法是什么吗?
斯蒂芬·洛朗

1
@StéphaneLaurent我通常自己安装各种组件,但是为了快速开始/安装,您可以考虑:pythonxy
ars 2012年

该脚本安装上述许多库的引用:fonnesbeck.github.com/ScipySuperpack
神父。

Pythonxy很不错,但是如果您想进行大型计算,可能会很烦,因为它仅适用于32位。这是用于安装许多python软件包的非官方二进制文件。如果您决定在Windows下工作,它们可能会非常有用。lfd.uci.edu/~gohlke/pythonlibs @StéphaneLaurent
JEquihua

140

作为数值平台和MATLAB的替代品,Python至少在2-3年前就达到了成熟,现在在许多方面都比MATLAB更好。那时,我试图从R切换到Python,但失败了。我每天使用的R包太多,没有Python等效项。缺少ggplot2足以使其脱颖而出,但还有更多。除此之外,R还具有更好的数据分析语法。考虑以下基本示例:

Python

results = sm.OLS(y, X).fit()

R

results <- lm(y ~ x1 + x2 + x3, data=A)

您认为更具表现力的是什么?在R中,您可以根据变量进行思考,并且可以轻松地将模型扩展为

lm(y ~ x1 + x2 + x3 + x2:x3, data=A)

与R相比,Python是用于模型构建的低级语言。

如果我对高级统计功能的需求较少,并且已经在一个较大的项目中进行Python编码,那么我会认为Python是不错的选择。当由于速度限制或R软件包无法提供优势而需要采用裸机方法时,我也会考虑采用这种方法。

对于那些现在进行相对高级统计的人来说,答案是肯定的,不是。实际上,我相信Python将限制您对数据分析的思考方式。要生产100个基本R软件包的模块替代品将花费几年和很多年的精力,即使到那时,Python仍将感觉像是一种使用了数据分析功能的语言。由于R已经在多个领域占据了应用统计学家相对最大的份额,所以我认为这不会很快发生。话虽如此,这是一个自由的国家,我知道人们在APL和C中从事统计工作。


9
+1我很喜欢这个回复,因为您强调R为一种统计语言,可以使用公式等处理数据。话虽这么说,我期望熊猫(与statsmodels结合)在Python社区中产生巨大的积极影响。
chl

28
在Python社区中,patsy正在解决您所描述的“公式”的需求,有时会改进R的功能:patsy.readthedocs.org/en/v0.1.0/index.html Python的优点是所有这些方面是正交处理的。熊猫将负责时间序列和数据帧/序列表示。的公式。numpy用于数组表示和向量化。statsmodels包装统计算法。scipy进行优化以及其他一些功能。结果是更清洁的界面。相比之下,R更成熟,但却是毛发。../ ..
blais 2012年

3
../ ..我认为,从长远来看,这些力量将推动越来越多的Python集成,您会发现它会成为R的竞争对手。与Python相比,R中的清洗数据是如此PIA,并且这绝不是一项琐碎的工作。– blais
chl

9
作为更新:statsmodels文档中的第一个示例现在是results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()。Statsmodels在覆盖率方面仍远远落后于R等其他统计软件包,但是在必须掌握另一种语言或统计软件包之前,您可以在python中做更多的事情。(GEE和Mixed将在下一个版本中发布。)
约瑟夫(Josef

4
“在Python中,所有这些方面都是正交处理的。。。” 我在很多方面不同意。numpy,scipy和statsmodel之间存在明显的重叠。R的设计更加模块化和经济。此外,并非所有面向数据语言的概念创新中的大多数(不仅是公式,而且还有数据框架,图形语法,插入符号(如medels,knitr的语法)以及仍在发展的dplyr数据语法)起源于R。Python社区似乎总是落后于一步,并且过分关注性能。
gappy 2014年

95

首先,我同意约翰·D·库克(John D Cook)的回答:Python不是像R这样的领域特定语言,因此,在以后的工作中,您将可以做更多的事情。当然,R是DSL意味着JASA中发布的最新算法几乎肯定会包含在R中。如果您主要从事临时工作,并且想尝试使用最新的套索回归技术,那么R很难被击败。如果您要进行更多的生产分析工作,并与现有软件和环境集成在一起,并且担心速度,可扩展性和可维护性,那么Python将为您提供更好的服务。

其次,ars通过良好的链接给出了一个很好的答案。这里有一些我认为对Python分析工作必不可少的软件包:

  • matplotlib提供精美的,出版质量的图形。
  • IPython,用于增强的交互式Python控制台。重要的是,IPython为Python中的交互式并行计算提供了强大的框架。
  • Cython可以轻松地用Python编写C扩展。该软件包可让您采用大量计算密集型Python代码并将其轻松转换为C扩展。然后,您可以像加载其他Python模块一样加载C扩展名,但是由于它在C语言中,因此代码将运行得非常快。
  • PyIMSL Studio提供了数百种数学和统计算法的集合,这些文件已得到全面记录和支持。您可以使用几乎相同的API从Python和C调用完全相同的算法,并且可以获得相同的结果。全面披露:我正在使用此产品,但我也经常使用它。
  • xlrd可轻松读取Excel文件。

如果您想要更像MATLAB的交互式IDE /控制台,请查看SpyderEclipsePyDev插件。


15
在通常意义上,R不是DSL。这是一种完整的图灵完整的编程语言。
哈德利2011年

4
@hadley:也许我在口语中使用“ DSL”,但是出于其价值,DSL上的Wikipedia页面明确列出了S +和R作为DSL的示例,而Python作为通用语言。请参阅en.wikipedia.org/wiki/Domain-specific_language。同样,SAS是图灵完备的(仅在使用IML宏组件的情况下),但是从实际意义上讲,我很难称其为完整的语言。我发现R在我的工作中具有无价的价值,但我尝试尽可能多地使用通用语言进行编码,而不是尝试使用R(或Excel)来完成所有工作。
乔什·赫曼

16
我认为将R和S与维基百科中的其他语言包含在同一列表中是不公平的-在R中没有什么可以像在python中一样。当然,有很多东西更适合另一种编程语言,但是Python也是一样。
哈德利2011年

6
在2011年10月13日我们交换评论的同一天,哈德利(Hadley)从Wikipedia页面上删除了R和S +。因此,我经常听到“ R是由统计学家并为统计学家开发的”口头禅。显然,现在它也是通用语言……
Josh Hemann 2012年

5
好吧,我可以在R中使用多线程代码吗?网络异步I / O?相信我,这些用例实际上是在科学计算中出现的。我认为R是DSL。它在统计方面很强,而在大多数其他方面则很差。
盖尔·瓦罗夸

61

我不认为有任何论据可以证明cranBioconductor中的统计软件包的范围远远超过其他语言提供的任何软件包,但这并不是唯一要考虑的问题。

在我的研究中,我会尽可能使用R,但有时R太慢了。例如,大型MCMC运行。

最近,我结合使用python和C来解决这个问题。简介:用〜60个参数拟合一个大型随机种群模型,并使用MCMC推断大约150个潜在状态。

  1. 读入python中的数据
  2. 使用ctypes在python中构造C数据结构。
  3. 使用python for循环,调用C函数来更新参数并计算可能性。

快速计算表明该程序在C函数上花费了95%。但是,我不必编写痛苦的C代码来读取数据或构造C数据结构。


我知道还有rpy,python可以在其中调用R函数。这可能很有用,但是如果您只是在做统计,那么我将使用R。


29
为Rcpp插入无耻的插头:)
Dirk Eddelbuettel

想知道您是否尝试过PyMC,以及模型的性能如何比较(相对于python / C)。
ARS

@ars:在上述情况下,每个迭代(10 ^ 8个迭代)涉及求解5个ODE。这确实必须用C来完成。其余的代码相当简单,因此C代码很简单。我的申请是非标准的,因此PyMC不适用-也是2年前。
csgillespie 2010年


36

我还没有看到上面的答案中明确提到的scikit学习。这是用于Python机器学习的Python软件包。它还很年轻,但是发展非常迅速(免责声明:我是一个scikit学习开发人员)。它的目标是在统一的界面中提供标准的机器学习算法工具,重点是速度和可用性。据我所知,您在Matlab中找不到任何类似的东西。它的优点是:

  • 一个详细的文件,与许多例子

  • 高质量的标准监督学习(回归/分类)工具。特别:

  • 使用多个CPU通过交叉验证执行模型选择的能力

  • 可在无监督学习中探索数据或进行一维降维,可以轻松地将其链接到有监督学习。

  • 开源,BSD许可。如果您不是在纯粹的学术环境中(我在该州的国家实验室中),那么这很重要,因为Matlab的成本非常高,您可能会考虑从您的工作中获得产品。

Matlab是一个很棒的工具,但是在我自己的工作中,scipy + scikit-learn开始让我在Matlab上占一席之地,因为Python的视图机制(并且我拥有大数据)在内存方面做得更好。 scikit-learn使我可以轻松地比较不同的方法。


29

转向Python的好处之一是可以用一种语言完成更多工作。Python是进行数字运算,编写网站,管理脚本等的合理选择。因此,如果您使用Python进行统计,则无需切换语言即可执行其他编程任务。

更新:2011年1月26日,Microsoft Research宣布了Sho,这是一个基于Python的新数据分析环境。我还没有机会尝试它,但是如果想运行Python并与.NET库进行交互,这听起来像是一个有趣的可能性。


4
我在R中做了很多数字运算,一个网站和几个管理脚本的工作,它们运行得很好。

28

也许这个答案是作弊的,但似乎没有人提到rpy项目,该项目在R和Python之间提供了接口,这似乎很奇怪。您可以获得R的大部分功能的pythonic api,同时保留了(我认为更好)的语法,数据处理以及某些情况下的Python速度。Python不可能拥有像R一样多的前沿统计工具,仅因为R是dsl并且统计社区比其他任何语言都对R的投入更大。

我认为这类似于使用ORM来利用SQL的优势,而让Python为Python而让SQL为SQL。

其他专门用于数据结构的有用软件包包括:

  • pydataframe复制data.frame并可以与rpy一起使用。允许您使用类似R的过滤和操作。
  • pyTables使用下面的快速hdf5数据类型,已经存在了很长时间
  • h5py也是hdf5,但专门用于与numpy互操作
  • pandas另一个管理data.frame之类的项目,与rpy,pyTables和numpy一起使用

1
我一直都觉得rpy很松散。例如,它需要带有一些简单功能的大型代码行。
内斯托尔·

也许IPython的rmagic扩展(如@CarlSmith所指出的)可以使其更易于使用rpy2?请参阅ipython.org/ipython-doc/dev/config/extensions/rmagic.html
乔纳森

26

我实际上是一家R商店的生物统计学家(大约80个人使用R作为他们的主要工具)。尽管如此,我仍然花费大约3/4的时间在Python中工作。我主要归因于我的工作涉及贝叶斯和机器学习方法进行统计建模这一事实。至少对于迭代式或基于仿真的统计方法而言,Python比R更接近于性能/生产率的最佳结合点。如果我要进行方差分析,回归和统计检验,那么我肯定会主要使用R。但是,我需要的大多数内容都无法作为R罐头包装提供。


5
+1用于区分您从事统计工作的领域。Python中存在许多统计计算领域(例如非结构化文本分析和计算机视觉),Python似乎是这些子域中的通用语言。我认为Python社区必须赶上的地方是改善R的设计非常擅长的经典统计建模周围的数据结构和语义。scikits.statsmodels开发人员在这方面取得了很多进展:scikits.appspot.com/statsmodels
Josh Hemann,2011年

26

我想说的是,从某些人的统计工作中高度依赖线性模型,并且在我的工作的其他方面喜欢Python的角度来看,我对Python作为除基本统计之外的任何事情的平台都感到非常失望。

我发现R在统计界提供了更好的支持,在线性模型上实现了更好的方法,并且坦率地说,即使在像Enthought这样出色的发行版方面,Python仍然有点像Wild West。

而且,除非您是独自工作,否则此时拥有使用Python进行统计的合作者的可能性很小。


26

无论如何,实际上并不需要放弃R for Python。如果您使用具有完整堆栈的IPython,则具有R,Octave和Cython扩展,因此您可以轻松,干净地在IPython笔记本中使用这些语言。您还支持在它们和Python名称空间之间传递值。您可以使用matplotlib将数据以图表形式输出,也可以以正确呈现的数学表达式形式输出。还有很多其他功能,您可以在浏览器中完成所有这些操作。

IPython已经走了很长一段路:)


19

您正在寻找的被称为Sage:http : //www.sagemath.org/

它是将Python的数学工具精良组合而成的出色在线界面。


4
关于思灿烂的部分是,它本质上是工会的一些数学,统计,数据分析,伟大的自由工具等等。这不仅仅是Python的; 它可以访问R,最大值,GLPK,GSL等。
shabbychef 2011年

18

Rpy2-玩R留在Python中...

根据Gung的要求进一步详细说明:

可以在http://rpy.sourceforge.net/rpy2/doc-dev/html/introduction.html上找到Rpy2文档。

根据文档, rpy2中的高级接口旨在促进Python程序员使用R。R对象作为Python实现类的实例公开,在许多情况下R函数作为这些对象的绑定方法。本节还介绍了带有R:网格(格子)图的图形,以及在ggplot2中实现的图形语法,使人们只需编写很少的代码就可以制作复杂而内容丰富的图,而基本的网格图形则概述了所有可能的自定义。

我为什么喜欢它:

我可以使用python的灵活性来处理数据,使用numpy或pandas将其转换为矩阵,然后在R中进行计算,然后取回r对象进行后期处理。我使用计量经济学,而python根本不会具备R的优势统计工具。R不可能像python一样灵活。这确实需要您了解R。幸运的是,它有一个不错的开发人员社区。

Rpy2本身得到了很好的支持,支持它的绅士经常光顾SO论坛。Windows安装可能会有些痛苦-https: //stackoverflow.com/questions/5068760/bizzarre-issue-trying-to-make-rpy2-2-1-9-work-with-r-2-12-1-using -python-2-6-un?rq = 1可能有帮助。


1
欢迎使用该网站@pythOnometrist。我怀疑这是有益的。您介意对Rpy2进行简要介绍,以便读者确定是否是他们想要的吗?
gung

17

我使用Python进行统计分析和预测。正如上面其他人提到的,Numpy和Matplotlib是很好的主力军。我还使用ReportLab生成PDF输出。

我目前正在查看Resolver和Pyspread,它们都是基于Python的类似Excel的电子表格应用程序。解析器是一种商业产品,但Pyspread仍然是开源的。(抱歉,我仅限于一个链接)


1
再次提供一些有趣的工具。我了解Numpy,Matplotlib和ReportLab,但是Pyspread似乎是一个有趣的主意。至少我想在电子表格单元格中键入Python表达式。尽管它不能解决所有可能的问题,但对于原型设计和数据处理来说可能是一件好事。
Fabian Fagerholm,2010年

1
+1哇python电子表格!还没有听说过。我一直希望OpenOffice / LibreOffice能够在他们的电子表格软件中真正采用python脚本并将其集成到
用户中

15

到目前为止的概述。自从在大学工作三年以来,我一直在使用python(特别是scipy + matplotlib)作为matlab的替代品。有时我还是回去,因为我熟悉特定的库,例如matlab wavelet包纯粹很棒。

我喜欢http://enthought.com/ python发行版。它是商业性的,但出于学术目的是免费的,据我所知,它是完全开源的。当我与许多学生一起工作时,在使用enthought之前,对于他们来说安装numpy,scipy,ipython等有时会很麻烦。Enthought提供了Windows,Linux和Mac的安装程序。

另外两个值得一提的软件包:

  1. ipython(已经开始提供)强大的高级shell。一个很好的介绍在showmedo上http://showmedo.com/videotutorials/series?name=PythonIPythonSeries

  2. nltk-自然语言工具包http://www.nltk.org/很棒的软件包,以防您想对任何语料库进行一些统计/机器学习。




9

我在这里找到了关于熊猫的精彩介绍,建议您查看。Pandas是一个了不起的工具集,并提供了R的高级数据分析功能以及丰富的Python库和生产质量。

这篇博客文章从一个完整的初学者的角度很好地介绍了Pandas:

http://manishamde.github.com/blog/2013/03/07/pandas-and-python-top-10/


3
您能否写出几句话来说明什么使它“很棒”,以便读者可以预先确定查看它是否适合他们?
ub

1
抱歉。刚意识到我在原始帖子中附加了错误的链接。
Padawan 2013年

8

我应该为Sho(基于IronPython构建的数值计算环境)大声疾呼。我现在正在斯坦福机器学习课程中使用它,它真的很有帮助。它内置线性代数包和图表功能。作为.Net,可以轻松地使用C#或任何其他.Net语言进行扩展。我发现,作为Windows用户,开始学习比直接使用Python和NumPy容易得多。


8

之前没有人提到过橙色

通过可视化编程或Python脚本进行数据挖掘。机器学习的组件。生物信息学和文本挖掘的附加组件。包含用于数据分析的功能。

我不是每天都在使用它,但是对于那些比命令行界面更喜欢GUI的人来说,这是一个必看的地方。

即使您喜欢后者,Orange也是熟悉的一件好事,因为您可以轻松地将Orange的片段导入Python脚本中,以防您需要其某些功能。


7

请注意,SPSS Statistics具有集成的Python接口(也为R)。因此,您可以编写使用Statistics过程的Python程序,并产生通常格式正确的Statistics输出或将结果返回到程序中以进行进一步处理。或者,您可以在统计信息命令流中运行Python程序。您仍然必须知道Statistics命令语言,但是您可以利用Statistics提供的所有数据管理,演示输出等以及过程。


7

DataCamp的最新比较提供了有关R和Python的清晰图片。

数据分析字段中这两种语言的用法。当数据分析任务需要与Web应用程序集成或需要将统计代码合并到生产数据库中时,通常使用Python。R主要用于数据分析任务需要在单个服务器上进行独立计算或分析的情况。

我在此博客中发现它非常有用,希望它也可以帮助其他人了解这两种语言的最新趋势。朱莉娅也在该地区。希望这可以帮助 !


6

我相信Python是我领域中的佼佼者。我做了很多工作,包括数据抓取,数据整理,大数据工作,网络分析,贝叶斯建模和仿真。所有这些事情通常都需要速度和灵活性,因此在这些情况下,我发现Python比R更好地工作。这是我喜欢的关于Python的一些信息(上面提到了一些,其他方面则没有):

-更干净的语法;更具可读性的代码。我相信Python是一种更现代且语法一致的语言。

-Python具有Notebook,Ipython和其他出色的工具,用于代码共享,协作和发布。

-iPython的笔记本使一个人可以在自己的Python代码中使用R,因此始终可以回到R。

-无需求助于C的方法,速度要快得多。使用Cython,NUMBA和其他C集成方法会使您的代码达到与纯C相当的速度。据我所知,这在R中无法实现。

-熊猫,Numpy和Scipy将标准R吹出水面。是的,R可以在一行中完成一些工作,但是需要Pandas 3或4。但是,总的来说,Pandas可以处理更大的数据集,更易于使用,并且在与其他Python集成方面提供了令人难以置信的灵活性。包和方法。

-Python更稳定。尝试将2gig数据集加载到RStudio中。

-上面似乎没有提到的一种简洁的软件包是PyMC3,它是大多数贝叶斯模型的通用软件包。

-有些,上面提到了ggplot2和grub关于它在Python中的缺失。如果您曾经在Python中使用过Matlab的绘图功能和/或使用过matplotlib,那么您就会知道,后者选项通常比ggplot2更强大。

但是,也许R更容易学习,如果我对建模过程不太熟悉,我会经常使用它。在那种情况下,R的现成统计库的深度是无与伦比的。理想情况下,我会充分了解两者,以便能够根据需要使用。


5

对于那些必须在Windows下工作的人,Anaconda(https://store.continuum.io/cshop/anaconda/)确实有很大帮助。在Windows下安装软件包令人头疼。安装Anaconda后,您可以使用单行代码设置一个现成的开发环境。

例如,

conda create -n stats_env python pip numpy scipy matplotlib pandas

所有这些软件包都将自动获取并安装。


5

Python与R相比,还有很长的路要走。它的软件包比R少得多,而且质量较低。坚持基础知识或仅依赖其自定义库的人可能只能在Python中完成他们的工作,但是如果您是需要更高级的定量解决方案的人,那么我敢说没有什么比R更适合您了。

还应该指出,到目前为止,Python还没有可与R-Studio媲美的适当的科学Matlab风格的IDE(请不要说Spyder),并且您需要在控制台上进行所有工作。一般来说,整个Python体验需要大多数人缺乏且不关心的大量“怪癖”。

不要误会我的意思,我喜欢Python,它实际上是我最喜欢的语言,与R不同,它是一种真正的编程语言。尽管如此,在纯数据分析方面,我还是依赖R,R是迄今为止最专业和开发的解决方案。当我需要将数据分析与软件工程相结合时,我会使用Python,例如,创建一个工具,该工具将对我首先在肮脏的R脚本中编程的方法执行自动化。在很多情况下,我使用rpy2从Python调用R,因为在大多数情况下,R包要好得多(或者根本不存在于Python中)。这样,我尝试兼顾两全其美。

我仍然使用Matlab进行纯算法开发,因为我喜欢它的数学风格的语法和速度。

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.