哪些编程语言适合统计学?

32

最近我在进行一些更多的统计分析,我想知道有没有特别适合这种目的的编程语言。我知道 R,但我希望有一个更通用的语言(或者说R就是通用的吗?)。

你们有什么建议吗?有没有语法/语义特别面向此领域的语言?或者有没有出色的库的语言?


2
有趣的问题,因为有普适性的限制。当您只想在该领域中完成部分工作时,使用DSL可能会很麻烦。 - dsimcha
Jason的通用性约束,正如在对Dirk答案的评论中所描述的那样,实际上非常适合R的优势。在这方面将R与SAS、Stata、Matlab或其他任何东西进行比较是错误的。 - Eduardo Leoni
16个回答

52
没有争议 - R 是S语言的主要实现(同时也是一个真正的开源和GNU项目)。
不仅如此,S语言是专门为此目的设计的(请参阅John Chambers的书),而CRAN上领域特定软件包的支持更是首屈一指:超过2000个软件包,具有适当的质量控制,通常由该领域的专家撰写。
ACM在1998年将ACM软件系统奖授予John Chambers时也认同了这一点,附带以下引文

John M. Chambers

出于S系统,它永远改变了人们分析、可视化和操作数据的方式。

作为参考,该奖项的其他获得者包括TeX、Smalltalk、Postscript、RPC、'the web'、Mosaic、Tcl/Tk、Java、Make等。 这不是一个坏公司。
现在,如果你“只想”收集和汇总一些数据,任何过程性或函数性语言都可以胜任。 但是如果您想要设计用于数据编程的东西,那么R作为主要的S实现就是它。

2
我完全理解R作为一种统计语言的强大之处。然而,除了统计之外,我需要做一些其他的事情(如解析日志文件和访问sqlite数据库)。R能做到吗? - Jason Baker
2
是的!例如,RSQLite软件包具有读取/写入SQLite文件所需的一切。此外,它使用DBI接口,因此可以在不同的后端上重复使用代码。至于解析,R包含多个正则表达式引擎,包括基本、扩展和Perl——请参见help(regex)——因此也非常擅长这方面的处理。您可以通过Windows、OS X、Linux上的“Rscript”可执行文件以及OS X和Linux上的“r”(“littler”)来使用R进行脚本编写。【我共同编写/维护littler】。 - Dirk Eddelbuettel
9
在R中,你可以做任何想做的事情,但你可能不想这么做。我的建议是学习R以及其他与R协作良好的语言。如果你正在构建重型应用程序,也许需要Java或Scala。如果你正在构建中等规模的系统,这些系统大多是R的包装器,那么可能需要Python或Ruby。然后,在需要进行数据和统计方面的复杂工作时,使用人们编写的各种库来从其他语言调用R。 - Harlan
你知道那句话吗,“有一个应用程序可以解决这个问题”。当涉及到R语言时,“有一个包可以解决这个问题”。甚至还有幸运饼干的包! - Brandon Bertelsen
CRAN无与伦比:超过2000个包,具有适当的质量控制。显然,您对数学软件的适当质量控制标准与我的不同。许多CRAN包非常(在数值上)不稳健,委婉地说。 - Mark L. Stone

15

毫无疑问,正如Dirk所说,R是用于统计的最佳语言。我想在此添加一些观点:

首先,我认为您应该使用R的主要原因是由于社区的支持。它已经被学术界和工业界的专家广泛使用,以至于没有其他语言能够与之相比。

其次,应该承认,R语言很容易使用。它是我的主要语言,尝试过其他选择后,我绝不会放弃它。但是它并没有在数据编程方面的优势垄断,这一点可能有些过分。所有的Lisp和函数式语言在数据编程方面都很强大。毕竟,Lisp来源于“list programming”,而正是Lisp对R的影响使得R成为了现在的样子。

R社区中有些成员(例如Ross Ihaka)实际上将Lisp视为未来的统计语言(请参见“回到未来”论文),因为R语言存在一些深层设计问题(例如没有多线程)。

因此,虽然R无疑是用于统计计算的最佳语言,但我认为熟悉另一种语言像OCaml、Haskell或(可能)Clojure/Incanter也有一定的价值。


10

看看基于ClojureIncanter吧。"Incanter是一个类似R的统计计算和图形平台,基于Clojure实现。"Clojure是一种基于Lisp语言的,运行在JVM上的编程语言。它可以轻松访问Java库。再也找不到更通用的了。


+1 for Incanter。虽然它还没有像R那样发展得那么好,但由于您可以获得所有Java / Clojure库和功能,因此如果您想同时进行统计和通用开发,它非常有用。 - mikera

6

从我的经验来看,R在以下领域具有异常强大的语言能力:

  1. 数据的操作和转换。

  2. 统计分析。

  3. 图形。

但是,R并不仅限于这三个方面。我还将该语言应用于一些不完全适合上述类别的任务。以下是一些例子:

  • 一个脚本,通过识别和匹配不同架构的静态和动态库,然后运行结果组通过lipo以协助创建OSX通用二进制文件。

  • 从网页上抓取信息的脚本。

  • 一组脚本,用于创建地理参考影像,使用GDAL将图像划分为瓷砖集,形成描述输出的JSON清单,并将结果上传到网站以供OpenLayers立即显示。

我最喜欢使用R的部分是我经常会说:

哇!有一个包可以做那个?!


5
您可以查看程序 sage,它是Python解释器的重新实现,允许您使用Python语法调用不同的编程语言进行统计(R、Matlab、Octave等)。
在编写统计程序时,一个主要问题是可能会有许多不同的小脚本,每个脚本都执行单独的任务,这可能会导致混乱的文件夹和结果不清晰。
因此,除了选择编程语言(我认为其他人已经回答了您的问题),您还需要一种定义脚本流水线的语法:您可以使用程序 'gnu/make'(例如参考这个链接)或者使用这个 sage,或者还有其他解决方案。

4

我认为R语言是最好的选择,因为我们大学的大部分统计课程都使用R语言,而且我的朋友们也对其功能和范围感到非常满意。

我甚至尝试过MATLAB,发现它也很方便。

祝好!


4
R在统计学方面非常优秀,具有良好的交互界面和可视化工具。然而,由于其语法和语义高度针对统计学,因此作为通用编程语言使用相当困难。如果您需要一种更通用的语言,Python与SciPy是一个不错的选择,尽管我曾经使用过它并发现其中的统计例程有些不成熟。它们经常在角落案例中效率低下或失败。
如果您正在处理大型数据集进行数据挖掘,性能很重要,或者您不介意使用类似alpha的工具,则D编程语言和dstats库可能非常好。D是一种最通用的语言,但是我认为dstats非常容易使用,因为模板元编程使得即使在静态编译、接近底层的语言中也很容易设计出一个好的API。(完全披露:我写了大部分dstats代码,所以我当然认为它很好。)

3
R 在通用编程方面表现非常出色--例如,CRANberries HTML 和 RSS 摘要背后的代码不到 200 行 ... R。同样,R 用于构建 R、运行测试、从类似 LaTeX 的元格式更新文档的幕后脚本越来越多地使用 R。而且没有其他编程语言能够接近 CRAN 和其 2000 多个软件包。 - Dirk Eddelbuettel
3
我猜这很主观,但我发现大多数以数学为导向的语言(如R、Matlab等)在通用编程方面非常笨拙和奇怪,不仅仅是R。 - dsimcha
许多比较都是主观的。此外,R != Matlab,这种比较通常不是一个好的比较。其次,我给了你一些关于R作为通用编程环境的具体例子。由于众多的POSIX调用、文件系统/操作系统级别调用的封装、正则表达式库等等,这是完全可能的。因此,我仍然反驳你的“如果你所做的全部只是统计学”的说法。 - Dirk Eddelbuettel
2
我不同意这个观点,R很快就取代了Perl成为我在大多数通用编程任务中的首选工具。 - Sharpie

3

针对统计分析,pystats库(适用于Python)非常合适。


3
看起来该项目的文件自2005年以来没有进行更新。这通常是一个非常不好的迹象。 - signalseeker
5
我有一辆2005年的吉普车,仍然跑得非常好! - AJ.
我有一点2005年的奶酪! - Thomas
2
@AJ - 可能不足以产生影响。然而,这可能意味着自2005年以来没有人维护该库,因此可能很难获得帮助/修复错误。当然,这并不总是情况,但如果可以的话,我会避免这样的项目。 - Jason Baker
2
现代Python数据人员通常使用scipymatplotlibpandasstatsmodelsscikit-learn等组合,具体取决于您正在做什么。当您需要的东西在Python中没有实现时,rpy2也是与R交互的好接口。 - Danica
显示剩余2条评论

3
你考虑过使用类似于MatLab的东西吗?它有许多先进的功能可以进行数据分析,并且你可以在环境中进行一些编程。

3

那么Stata怎么样?我有一个经济学博士的朋友,他总是对Stata赞不绝口。而我个人则偏爱Mathematica


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接