-
R
和
Python
(numpy scipy pandas)
用于统计学分析,
哪个更
好?
知乎精选
总的概
括:
R
主要在学术界流行,
pytho
n(numpy scipy)
在工程方便比较实用。
R
是
S
(
Splus
)的开源版本,或者下一代。发源地在新西兰
< br>奥克兰。
这个软件的统计背景很浓烈。
我这里浓烈的意思
是,
如果你不熟习统计知识(历史)的话,
R
< br>的帮助文档看起来
是很累的。由统计背景的人开发。
R<
/p>
的维护组叫
CRAN-R
。
在生物信息方便,有个叫
bioconductor
的组织,里面有很多
生物信息方面可以用的软件包,
他们有一套
自己维护
package
系统。
p>
Python
是个综合语言
(这里特指指<
/p>
CPython
解释器)
,
numpy
scipy
是数值计算的扩展包,
p>
pandas
是主要用来做数据处理
(
p>
numpy
依赖)
,
sympy
做符号计算(类似
mathematica
?)
此外还有一些不太成熟的包如
sciki
learn
,
statistical models
。
成熟度不如
R
。但是
已经到了可用的水平了。是读计算机的
人写的统计包。
ipyt
hon
更新到
1.0
以后,
功能基本完善,
其
notebook
非常强大(感觉就像
mathematica)
而
且还是基于
web
,在合作分享方面非常好用。
性能:
大家都说
R
慢,特别是
CS
的人
。其实这里主要是两点:一
个
R
里面数
组的调用都是用复制的,二是
Rscript
慢。三是
处理大数据慢。如果
R
用的好的话,
R
是不太慢的。具体来
说就是
Rscript
用的少,多用命令,跑点小数据。这样的话,
实际在跑的都是背后的
fortran
和
C
库。
他们都有快二三十年
历史了
。可谓异常可靠,优化得不能再优化了(指单线程,
如果去看源代码挥发先许多莫名的常
数,永用了以后精度高
速度快!
)
。比
如一个自己编写一个
R
脚本,
loop
套
loop
的
那种,那真是想死的心都会有。外加一点,
R
处理文本文件
p>
很慢!
Python
归根揭底还是个有解释器的脚本语言,
而且有致命伤
——<
/p>
GIL
,但
python
最难能可贵的就是它很容易变得更快。
比如
pypy<
/p>
,
cython
,或者直接
ctypes
挂
C
库。纯<
/p>
python
写
个原型,然后就开是不断
的
profiling
和加速吧。很轻易可以
< br>达到和
C
一个数量级的速度,但是写程序、调试的时间少
了
很多。
并行计算:
R v15
之后有了自带的
parallel
包,
用挺轻松的。
不过其实就
是不停的
fork
,或者
mpi
,内存
消耗挺厉害的。
parSapply
,
parApply
什么的,真是很好用。
Python
虽然有
GIL
——并
行计算的死敌,但是有
multiprocessing(fork
依赖
)
,是可以共享数据的什么的,估
< br>计内存消耗方面比
R
好点,
数据
零散的话
overhead
很多。
到<
/p>
了
MPI
的话,
mpi4py
还是挺好用的。用
cython
< br>的话结合
openmp
可以打破
GIL
,
但是过程中不能调用
pyth
on
的对象。
学习曲线:假设什么编程都不会的同学。
R
一开始还是很容易上手的,
查到基本的命令,
包,
直接
print
一下
就有结果了。
但是如果要自己写算法、
优化性能的时候,
学习难度陡增。
Python
么,
挺好学的,
绝大多数的帮助文档都比
R
好了许多。
有些包用起来没
R
方便。总的来说深入吼
R
陡。<
/p>
扩展资源:
基本上新的统计方法都会有
R
的
pac
kage
,安装实用都不麻
烦。但是基本上都是搞统计的人写的
计算机包。所以效能上
可能有问好。比较出名的有两个包的管理网站,
< br>cran-r
和
bioconductor
。
所以搞生化的估计
R
用起来很方便。
python
的统计计算包们比
R
少,多很年轻,
还在不断的开发
中。优于是计算机人写的统计包,用起来的时候要多涨个
心
眼。
画图:
R
自
带的那些工具就挺好用了,然后还有
ggplot
这种非常优<
/p>
美的得力工具。
python
有
matplotlib
,
< br>画出来效果感觉比
R
自带的好一些些,
< br>而且界面基于
QT
,跨平台支持。可能是
R
用得多了,
pyplot
用
起来还是不太顺手,觉得其各个组建的统一性不高。
IDE
:
R
studio
非常不错,提供类
matlab
< br>环境。
(本人过去用
vim-r-
plugin
,现在用
emacs +
ess
。
)
windows
下有
python(x,y)
还有许
多商业的工具。
(本人现在
的
emac
s
环境还不是很顺手
~
)
建议:
如果只是处理(
小)数据的,用
R
。结果更可靠,速度可以
接受,上手方便,多有现成的命令、程序可以用。
要自己
搞个算法、处理大数据、计算量大的,用
python
。开
p>
发效率高,一切尽在掌握。
ps
:
盲目地用
R
的包比盲
目的地用
python
的包要更安全。
起
码
R
会把你指向一篇论文,而
python
只是指向一堆代码。
R
出问题了还有论文作者、审稿人陪葬。
题外话,个人经验:
我首先用
python
实现了一个统计方法,其中用到了
ctypes
,
multiprocess
< br>。之后一个项目要做方法比较,又用回
R
,发现
一些
bioconductor
上的包已经默认
用
parallel
了。
(但那个包<
/p>
还是很慢,一下子把我所以线程都用掉了,导致整个电脑使
用不能
,看网页非常卡
~
)后来用
pytho
n pandas
做了一些数
据整理工作,类似数据库,两三个
表来回查、匹配。感觉还
是很方便的。虽然这些工作
R
也能做,但估计会慢点,毕竟
几十万行的条目了。
整理好之后开始尝试用
python matplotlib
画图。
pyplot
作图的方式和
R<
/p>
差异很大,
R
是一条命令画点
东西,
pylot
是准备好了以后一起出来。
p>
pyplot
的颜色选择有
点蛋疼,
默认颜色比较少,
之后可用
html
的颜色,
但是名字
太长了
~
。
pyplot
的
legend
比
R
好用多
了,
算是半自动化了。
pyplot
画
出来后可以自由拉升缩放,然后再保存为图片,这
点比
R
好用多了。
【知乎用户的回答
(41
票
)
】
:
的确,
如同
@
周则禹
在回答中说到的,
R
是统计学家的东西。
统计学家是一种什么生物呢?
“哈希表?二叉树?链表?这是啥,可以吃吗?”
“循环?递归?没学过,不会!
”
<
/p>
所以,在
R
中没有我们在计算机课上学的
各种数据结构(至
少不安装扩展包就没有)
。如果你写的代码中
还用循环来处
理数据,而不是用
apply
、
aggregate
之类的函数,那么在
R
圈里会被人嘲笑。如果你的思维还是无法从计算机编程习惯
< br>中切换到
R
的话,那么还是用
P
ython
吧。
也是由于上述问题,
R
完全没有考虑内存优化和算法加速之
类的问题(
R
中不会关心
sort
p>
函数是用快排还是冒泡实现
的)
,所以数据
量一大,计算机的内存就被占光了。不过有
关内存和加速的问题已经有了许多的解决方案
,例如用
ICC
编译
R
源代码链接
MKL
加速
R
p>
数值计算,使用扩展包实现
内存映射硬盘,等等。这些对于一个经验
丰富的码农来说完
全不在话下。所以,决定使用
R
还是
Python
的关键,就是
你是否能够接受
R
的思想。
p>
在
R
中,没有变量,只有数据!
没有循环,只有批处理!
没有计算机算法,只有数学模型!
如
果决定使用
R
,那么就必须将自己从数据结构,算法策略
这些知识中解脱出来。一个函数就是一个数学模型(回归、
假设检验、
方差估计)
,用统计和概率的思路去理解数据挖
掘和机器学习的
算法。使用
R
,能够将工作者从习惯的算法
中解脱出来,真正去思考模型本身的数学意义,在数学层面
去修改算法。忘记我们经
常思考的算法复杂度和内存消耗之
类的问题,推动机器学习和数据挖掘的关键动力,就是
数学
模型!
最后总结一下:
R
< br>能够用最短的代码实现一个新的统计模型和机器学习模型
(前提是对
R
和扩展库很熟悉)
,并且每一句代码都有对应
p>
的数据和数学意义;因此
R
适用与建立新模
型,新算法,并
且对模型进行统计意义的评价。
Python
能够让程序员在尽量不受语言细节的干扰下,
< br>将一个
已经证明成熟和可靠的算法实现出来,并且投入工程应用,
开发出实用的决策系统。
对语言的选择其实也是程序员对自我的定位:
-
-
-
-
-
-
-
-
-
上一篇:秋西师大版语文三上第三单元《可爱的大熊猫》教案
下一篇:“熊猫眼”是什么原因