现在看,在统计学或(理论/应用)计量经济学领域,python 能完美地代替 R 和 stata 吗?
回复内容:
更新:谢谢大家的赞同、感谢和评论。我再贴一个之前用Python做的数据处理,定义了一个比较复杂的新变量,算是简单的feature engineering吧。这个任务如果用Stata来做就会比较头疼。另外,这个例子也可以用来体验一下IPython Notebook (要用网页版看,手机版效果不佳)。
GitHub链接:Machine-Learning-Mini-Project/Feature Engineering.ipynb
------
原回答:我来分享一下自己关于Python和Stata的经验,算是抛砖引玉(我R用得很少就不讨论了)。我要强调一下,我对Stata和Python都只能算是入门,所以下面对二者的比较很可能限于我的水平而不够中肯。还望指正。
先说结论:对于应用性的数据分析,从只使用Stata,到较为流利地使用Python,很可能会受益匪浅,并伴随着豁然开朗的愉悦体验。这些技能适用面比Stata更广,并且只要肯花些力气,学会基本的东西起来并不会有太多困难。加之Stack Overflow之类社区对学习效率的巨大提升,学习Python的投资回报率很高。
我是做应用微观的,大部分的研究项目不涉及任何高深的计量方法,基本上是走用心问问题,然后下苦功夫搜集一手数据的“苦情”路线(偏经济史方向的研究是从原始历史档案中搜集的数据,偏管理科学方面的研究是从用的一家公司的员工互相评价的绩效考核数据)。所以对软件的需求主要是数据清理、变换、可视化之类。
我最初是用Stata. 当时觉得Stata还是蛮方便的,特别是定义一下新变量(bysort: gen之类的语法很好用),以及跑跑OLS/Logit回归,然后输入表格到Latex. 这些基础功能Stata实现起来真是非常方便。不过,美中不足的是,一旦要自己写写函数,就开始不习惯Stata编程的方式了,所以代码不容易重复使用,Do File一长,慢慢就觉得有些乱。再就是矩阵操作和运算功能不太好用。
后来随着自己对data science和machine learning的兴趣,在edX, Coursera, Udacity等平台上了一些基于Python的课程。其中对实用工具的学习收获最大的是edX上MIT的两门Python课程(6.00.1x和6.00.2x),以及Udacity上的Intro to Data Science. 上了这些课以后,自己做了一些machine learning的小项目。当时学习的目的本不是为了应用到自己的经济学研究中去——那段时间里,除了一个博弈论的模型我无从下手分析,用Python做了一下agent-based simulation刻画了均衡的性质外,并没有真正拿来完整地做一个项目。
有意思的是几个月以后,我开始了一个新的项目,虽然仍然不需要高深的统计和计量,但是在数据的处理上,比之前更复杂——需要把数据汇总成一些转换矩阵 (transition matrix),然后做一些计算,以及做大量的数据可视化。有感于之前使用Stata的力不从心,开始新的项目的时候,我尝试着完全用Python Pandas来做数据操作(data manipulation)、用Matplotlib画图。另外一个原因是,当我开始用IPython Notebook以后,便欲罢不能了——代码和分析结果(图表)被整合在一个文档里(一块代码后面紧跟着输出结果),非常适合整理和分享。谁用谁知道。
最开始从Stata转到Python的时候,还是不太习惯Pandas DataFrame,特别是对于Reshaping, MultiIndex, pivot_table等功能。所以还是蛮怀念Stata. 后来慢慢感受到Pandas强大的数据操作功能。
简单来说,使用Python以后,我最满意的效率提高在于所有的分析都自动化了,从原始数据到最终所需要的图表、结果,不需要一些半自动化的手工调整。而且代码的可重复利用程度显著提升。另外就是,使用Python以后,得益于数据操作能力的增强,我变得比之前更频繁地将数据可视化,几乎所有的回归分析我都会做相应地描述性分析和可视化。
最后,不得不提的是Python相关社区的强大。我有不会的就Google,搜索出来的Stack Overflow的问答、以及一些技术博客里面的内容,基本上都能解决问题。然而,使用Stata的时候,常常会有无力感,卡住了就卡住了,纠结很久只能靠读文档然后自己摸索。
---
补充:有朋友问到我用什么做图。我就用Matplotlib. 虽然觉得算不上太好用,但是目前基本的功能也差不多够了。下面贴一些我一个经济史研究中的一些图。都是一些很基本的东西,只是为了让感兴趣的朋友大概了解一下我的使用情况。见笑啦:)
你是统计学家不是程序员你是统计学家不是程序员你是统计学家不是程序员
计算机语言是一种用来实现你想法的工具,但支撑你想法的不是python 或者R ,是概率和统计,是数学。
我以前也有过类似的困惑所以特地找教授聊过,以上就是我得到的答案。
当然我并不是在为年年喊着我要学python 到现在还没动手找借口,以及R 大法好。
R的一个优势是它是统计学家写的,R的劣势也是它是由统计学家写的。
在我的定义里,R/python/matlab,是基本可以相互替代的,越难选择越是说明都可以。我修ML的时候曾问过老师哪个最适合,老师回答皆可。不管统计计量还是时间序列,我一直用的是R,相当满意,毕竟玩统计的写给自己用的,知道自己需要什么,足够专业。
至于stata,我是与spss/eviews归为一类,称为计量软件,与R这种统计语言还是有本质区别的。
谢谢邀请.这个方面,我只接触过皮毛的生物信息.强行答一下.
认识的一些做生物信息方面的还有专门做数据分析的,用python的还算可以,毕竟数据挖掘方便一些.
python,各方面都可以,但是各方面都不是最好(必然是没有最好,只有更好).
代替应该不会,毕竟R之类的专业做这个的,
我觉得学术界和业界的情况会不太一样。
学术界就像现在最高票答主说的, R 或者PYTHON 只是工具,更重要的是思想。 所以Python的出现只是给研究人员提供了一些新的工具。 之前搞运筹学的老板好像就是用Python比较多(另外一位运筹学教授用C...) 。 可能这个很大程度决定于教授本身的风格和研究方向吧。所以在python没有出现足够碾压其他语言的优势的时候,R应该还是不会被取代的。
业界就不一样了。 python因为容易上手,可读性强等总总原因,取代R还是有机会的。
如果仅仅只想做数据处理,R不错。
如果想将来数据处理之余再自己爬爬网页挖挖数据顺便做个博客,还是一开始学Python比较方便。
厚着逼脸答一下。着重说一下统计/大数据/数据科学领域啊。stata没有什么可比性。别说stata。。sas都逐渐没有了可比性。python和r各有各的好。简单讲,这俩工具是cs和统计两个流派气息很重的工具。相较之下python更能体现cs的思维,而r对于统计的人来说基本是承载着从理论到实现的一个应用。当然这也跟这两个语言的历史有深远关系。python本身就是和c联系紧密,而r是基于s语言。虽然现在他们都有各自可以call其他底层语言的能力,但是这些历史原因也造就了他们的特质。python更像是一个全能型工具,拿来写ui什么的也是完全没问题(这不是说r 不可以做ui只是难用)。另外在大数据背景下,python的兼容性明显要强很多。python那些nlp的东西也是很大的优势。而r的明显优势也是跟他的统计思维有关系。就像有答案说的,这统计的人写给自己使用的,因此关于分析的那一套东西,r的各种包太多了太丰富了,一旦统计上有一丁点的突破,就会有developer写出一个包把理论转化为易操作的函数也就是做了理论的算法实现。当然其他领域有一点能用的,r也会有人给写个包。。。这一点如果不长期关注统计,不深入的使用python和r可能无法体会。python其实也有这个特质但是跟r还不能比。这也跟python的传统用户多为cs背景而不是统计分析背景有关系。python跟底层语言的交互带来的方便也是一大特点,所以你看很多做量化交易的不会选r而自然选python(当然底层语言的大牛在这个领域有着不可动摇的话语权)。直接对比,个人觉得r比较适合用来做策略,模型开发。python比较适合拿来整体实现你的模型。总的来说这两种语言是不断的在相互学习。未来的话,这两种语言很有可能会长期存在,不断吃掉其他分析语言比如sas, matlab的市场份额。曾经让很多分析语言商业化进而得以大规模推广的策略,已经逐渐的不适应这个新的大数据时代了。开源成为了很大的一个优势,知识共享成果共享很重要。闭门造车的速度毕竟太慢。再一个是老的语言,特别是像sas这种,夸张一点讲,还存在的一个很大的原因就是有一大帮传统用户,企业用户。然而这些传统用户在今天已经很难创造大的价值了。特别是以coperate america,500 强很多公司为代表的那些企业。不过说两句题外话,1数据科学除了分析之外也会有很多底层开发的需求,所以能懂一两种底层语言是很大的优势。2另外未来也很看好scala。
求轻拍。
当然可以 相比python来说r是高级程序语言 相对而言比较user friendly 但是局限性也更大 如果编程足够强 当然可以用python做所有r可以做的事情 而且速度更快
其实都是工具而已,精通一个,剩下的也不难吧。
查了一下,statsmodels的开发者曾经说过一段话:
“from twitter:
‘I can see that. much of python stats strikes me as poor imitation of R. like matplotlib:matlab, OO:MS Office’
referring to statsmodels
I'm not sure whether the implied criticism is on "poor" or "imitation"
I would like to "officially" correct this :)
statsmodels is not only a poor imitation of R, it is also a poor imitation of Stata. It is in some parts a poor imitation of SAS, and maybe even in some parts a poor imitation of Matlab or GAUSS or ...., and maybe in some parts it's even a good imitation.
But I think it is a good imitation of statsmodels,
although with still some very important gaps in coverage of statistics and econometrics.”