R 和 python两种编程语言

网站建设知识 phpacg 2年前 (2018-04-24) 126次浏览 0个评论

总的概括:R主要在学术界盛行,python(numpy scipy)在工程方便比拟适用。

R是S(Splus)的开源版本,或许下一代。发源地在新西兰奥克兰。这个软件的统计背景很浓郁。我这里浓郁的意思是,假设你不熟习统计知识(历史)的话,R的协助文档看起来是很累的。由统计背景的人开发。R的维护组叫CRAN-R。在生物信息方便,有个叫bioconductor的组织,外面有很多生物信息方面可以用的软件包,他们有一套自己维护package系统。

Python是个综合言语(这里特指指CPython解释器),numpy scipy是数值计算的扩展包,pandas是主要用来做数据处置(numpy依赖),sympy做符号计算(相似mathematica?)此外还有一些不太成熟的包如sciki learn,statistical models。成熟度不如R。但是曾经到了可用的水平了。是读计算机的人写的统计包。ipython 更新到1.0以后,功用基本完善,其notebook十分弱小(觉得就像mathematica)而且还是基于web,在协作分享方面十分好用。

功用:

大家都说R慢,特别是CS的人。其实这里主要是两点:一个R外面数组的调用都是用复制的,二是Rscript慢。三是处置大数据慢。假设R用的好的话,R是不太慢的。详细来说就是Rscript用的少,多用命令,跑点小数据。这样的话,实践在跑的都是面前的fortran和C库。他们都有快二三十年历史了。可谓异常牢靠,优化得不能再优化了(指单线程,假设去看源代码挥发先许多莫名的常数,永用了以后精度高速度快!)。比如一个自己编写一个R脚本,loop套loop的那种,那真是想死的心都会有。外加一点,R处置文本文件很慢!

Python归根揭底还是个有解释器的脚本言语,而且有致命伤——GIL,但python最屡见不鲜的就是它很容易变得更快。比如pypy,cython,或许直接ctypes挂C库。纯python写个原型,然后就开是不时的profiling和减速吧。很随便可以到达和C一个数量级的速度,但是写顺序、调试的时间少了很多。

并行计算:

R v15 之后有了自带的parallel包,用挺轻松的。不过其实就是不停的fork,或许mpi,内存消耗挺凶猛的。parSapply,parApply什么的,真是很好用。

Python虽然有GIL——并行计算的死敌,但是有multiprocessing(fork依赖) ,是可以共享数据的什么的,估量内存消耗方面比R好点,数据零散的话overhead很多。到了MPI的话,mpi4py还是挺好用的。用cython的话结合openmp可以打破GIL,但是进程中不能调用python的对象。

学习曲线:假定什么编程都不会的同窗。

R一末尾还是很容易上手的,查到基本的命令,包,直接print一下就有结果了。但是假设要自己写算法、优化功用的时分,学习难度陡增。

Python么,挺好学的,绝大少数的协助文档都比R好了许多。有些包用起来没R方便。总的来说深化吼R陡。

扩展资源:

基本上新的统计方法都会有R的package,装置适用都不费事。但是基本上都是搞统计的人写的计算机包。所以效能上能够有问好。比拟知名的有两个包的管理网站,cran-r 和bioconductor。 所以搞生化的估量R用起来很方便。

python的统计计算包们比R少,多很年轻,还在不时的开发中。优于是计算机人写的统计包,用起来的时分要多涨个心眼。

画图:

R自带的那些工具就挺好用了,然后还有ggplot这种十分优美的得力工具。

python 有matplotlib,画出来效果觉得比R自带的好一些些,而且界面基于QT,跨平台支持。能够是R用得多了,pyplot用起来还是不太随手,觉得其各个组建的一致性不高。

IDE:

Rstudio十分不错,提供类matlab环境。(自己过去用vim-r-plugin,如今用emacs + ess。)

windows 下有python(x,y) 还有许多商业的工具。(自己如今的emacs环境还不是很随手~)

建议:

假设只是处置(小)数据的,用R。结果更牢靠,速度可以接受,上手方便,多有现成的命令、顺序可以用。

要自己搞个算法、处置大数据、计算量大的,用python。开发效率高,一切尽在掌握。

ps:自觉地用R的包比自觉的地用python的包要更平安。最少R会把你指向一篇论文,而python只是指向一堆代码。R出效果了还有论文作者、审稿人陪葬。

题外话,团体阅历:

我首先用python完成了一个统计方法,其中用到了ctypes,multiprocess。

之后一个项目要做方法比拟,又用回R,发现一些bioconductor上的包曾经默许用parallel了。(但那个包还是很慢,一下子把我所以线程都用掉了,招致整个电脑运用不能,看网页十分卡~)

后来用python pandas做了一些数据整理任务,相似数据库,两三个表来回查、婚配。觉得还是很方便的。虽然这些任务R也能做,但估量会慢点,毕竟几十万行的条目了。

整理好之后末尾尝试用python matplotlib画图。pyplot作图的方式和R差异很大,R是一条命令画点东西,pylot是预备好了以后一同出来。pyplot的颜色选择有点蛋疼,默许颜色比拟少,之后可用html的颜色,但是名字太长了~。pyplot 的legend比R 好用多了,算是半自动化了。pyplot画出来后可以自在拉升缩放,然后再保管为图片,这点比R好用多了。

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址