R和 Python 用于统计学分析,哪个更好

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R和 Python 用于统计学分析,哪个更好相关的知识,希望对你有一定的参考价值。

根据我的使用经验,我认为一般性的科研可以使用numpy工具链做为主力。

首先,在写矩阵计算相关的语句时,numpy的语法几乎能逼近MATLAB的简洁程度,而其他语言相对来说稍微“难看、难写”一些。

其次,当程序不仅仅涉及到科学计算时,用Python就可以大发神威了。比如我自己遇到的一个实际问题:需要对点云进行一些非常复杂的优化操作,之后需要画出三维图且支持一些拉近拉远转视角的操作,并且还要做出一个不错的界面方便调整参数、载入数据等等。看到画三维点云的第一反应就是用OpenGL,但是使用C/C++写那些非常繁杂的数值优化...用MATLAB可以很舒服、很便捷地写出优化部分的代码,但是直接画大规模的三维点云的速度,以及它那令人忧伤的GUI...
那Python就行吗?是的。在数值计算方面,Numpy/Scipy,以及强大的机器学习包scikit.learn,让这个过程十分惬意。在画三维点云方面,PyOpengl包完全就是OpenGL的Python封装,速度非常快,而且语法几乎同OpenGL一样。最后,使用PyQt写出基于Qt的GUI,这至少是一个标准的完备的GUI包,外观功能都不错。最后的最后,这个程序不需改动就可以跨平台运行,只要Linux/Windows用户按照标准过程安装了相应的包就可以使用,不用折腾本地编译之类的事情。

还有一个问题是速度。Windows下使用python(x,y)、Linux下源里默认安装方法的Python链接的都是较慢的Blas/Lapack库,而MATLAB默认链接MKL,所以矩阵计算速度会慢非常多。但是至少在Linux下是很容易让Numpy链接上MKL的,这样的Numpy计算速度与MATLAB几乎相同,所以速度不是严重的问题。也许C++能在循环上秒杀Python,但是如果你涉及到矩阵计算,用的普通的BLAS/LAPACK库,那么在核心的某几步上会慢成渣,从而在总的速度上被Python超越,得不偿失。当然你也可以让C++程序链接上MKL库,但要移植到别的平台又是一番折腾。
最后就是开发环境,个人推荐Eclipse的Pydev,用起来几乎同MATLAB一样,尤其是调试和看变量值方面。

在统计问题方面,用R写起来最舒服,因为包全,这一点Python或者C比不上。而且R也能链接MKL大大加快速度。还有就是,如果你要写统计方面的论文,那论文里的代码用R似乎会“显得”你更“
专业”一些。

上学期有流形学习课,我用scikit.learn包,几乎每次只改一句话就能提交作业(把LLE变成ISOMAP什么的)。还有一门统计学习课,让我深刻感觉到R就是用来写老师布置的ESL后面的那些编程题的,因为那些方法的作者,以及这本书的作者,写的就是R的包。至于大规模计算、实际的大型工程问题,我没有经验,所以不能提供更多信息了。

补充:如果觉得自己链接MKL库编译Numpy和R麻烦的话,Python可以使用Canopy(就是之前的EPD),R可以使用Revolution R,都是一些商业公司帮配置好的完整发行版,链接了MKL库并支持其他一些特性(例如自带IDE等)。前者各平台都有,后者仅限Windows平台。
参考技术A 这个因人而异,推荐你看篇文章http://www.kdnuggets.com/2015/05/r-vs-python-data-science.html

python 的哪个统计模块支持单向方差分析和事后测试(Tukey、Scheffe 或其他)?

【中文标题】python 的哪个统计模块支持单向方差分析和事后测试(Tukey、Scheffe 或其他)?【英文标题】:What statistics module for python supports one way ANOVA with post hoc tests (Tukey, Scheffe or other)? 【发布时间】:2013-04-09 14:18:43 【问题描述】:

我已尝试查看 Python 的多个统计模块,但似乎找不到任何支持 one-way ANOVA 事后测试的模块。

【问题讨论】:

TukeyHSD 内置于 R 中。这是否符合您的要求? statsmodels 在沙盒中有一个tukeyhsd 函数,但我没试过。 我正在寻找相同的功能,我想我会使用 RPy,一个 R 的接口,它看起来像一个魅力! 见scikit-posthocs。 【参考方案1】:

单方面的方差分析可以像这样使用

from scipy import stats
f_value, p_value = stats.f_oneway(data1, data2, data3, data4, ...)

这是一种方差分析,它返回 F 值和 P 值。 如果 P 值低于您的设置,则存在显着差异。

Tukey-kramer HSD 测试可以像这样使用

from statsmodels.stats.multicomp import pairwise_tukeyhsd
print pairwise_tukeyhsd(Data, Group)

这是多重比较。 输出是这样的

Multiple Comparison of Means - Tukey HSD,FWER=0.05
================================================
group1 group2 meandiff   lower    upper   reject
------------------------------------------------
  0      1    -35.2153 -114.8741 44.4434  False 
  0      2     46.697   -40.4993 133.8932 False 
  0      3    -7.5709    -87.49  72.3482  False 
  1      2    81.9123    5.0289  158.7956  True 
  1      3    27.6444   -40.8751  96.164  False 
  2      3    -54.2679 -131.4209 22.8852  False 
------------------------------------------------

请参考this网站如何设置参数。 statsmodels 的 tukeyhsd 不返回 P 值。 因此,如果您想知道 P 值,请根据这些输出值计算或使用 R。

【讨论】:

将输出保存到变量res后,可以通过应用psturng(np.abs(res.meandiffs / res.std_pairs), len(res.groupsunique), res.df_total)得到p值,其中psturng来自from statsmodels.stats.libqsturng import psturng 我使用类似于@JavierdelaRosa 建议的方法将 p 值添加到表和输出属性。应该很快添加 - 请参阅pull request。 @ami_GS 你如何让它打印结果?当我这样做时,它只会在 0x0DBEBB10 处打印“tukeyHSDResults 对象....对不起基本问题...【参考方案2】:

我认为库 Pyvttbl 返回一个 ANOVA 表,包括事后测试(即 TukeyHSD)。事实上,Pyvttbl 的巧妙之处在于您还可以对重复测量进行 ANOVA。

查看 Anova1way 的文档here

【讨论】:

很遗憾,此库不再受支持。

以上是关于R和 Python 用于统计学分析,哪个更好的主要内容,如果未能解决你的问题,请参考以下文章

r语言write.xlsx在哪个包

R语言在统计中的应用都有哪些?

r语言需要下载啥软件

免费资料 |统计分析绘图软件整理了R语言学习资料集,拿走拿走别客气!

python和数据库比哪个处理数据块

机器学习 1R语言