个人感觉Python的火主要由于其应用广泛,对我来说属于万金油一样的存在。
财经类科研常用的数据处理和分析软件有SAS、Stata、R、MATLAB等。他们各自有自己擅长的领域:SAS的两大优势是直接在硬盘上操作,以及与SQL的融合。前者适用于处理数据超过内存的情况(虽然dask也可以做到,但不如SAS方便),后者采用SQL语句可以方便地merge不同数据表格(虽然sqlite3也可以做到,但对函数的支持不如SAS SQL方便)。缺点是不够flexible,对数值计算的支持不够好(也是懒得学SAS/IML),比起在内存中操作,直接操作硬盘的数据速度也慢一些。
Stata可以方便地做各种计量模型,语句简洁。比如一些python要写很长的操作,Stata只需要很短的命令就可以实现。很多计量模型Stata有成型的命令可以直接调用,而python这方面弱一些,可能需要自己写命令。很多人嫌弃Stata不够flexible,但其实Stata底层的Mata语言功能强大,速度快,可以随意定义函数(甚至有些C-style),但拓展包不足,调试不方便。
R好久不用了,之前学着本来是为了替代Stata的,但后来发现缺少一些我需要的计量模型,于是就放弃了。它本身和Python有一点像。
MATLAB做矩阵和数值运算超级快,其他方面略逊色不够方便。
Python虽然不至于博采众家之长而严格优于这些软件,但也确实很大程度上综合了这些软件的功能,并且还有额外的加成。比如在下面的情境中我会用python代替这些软件:SAS和Stata缺少一些函数,又懒得学SAS/IML+嫌弃Mata调试很不友好,可以用python方便地自己写。
一些可以通过并行运算加快速度的操作,在Stata或SAS中无法方便地实现。在python中就很方便。
网络爬虫方面自不必说,python比其他这些软件方便多了。
暂时想到这些
Python也确实有很多缺点,比如速度慢等,代码冗长等。但好在Python的拓展性足够强,总能找到一些方法来部分地弥补这些缺点:比如做rolling-window regression,数据多的时候计算量很大。用Python可以通过Numba方便地加速,再加上joblib实现并行,速度能快很多倍。
再比如pandas的一些语句与Stata相比太冗长了。但自己完全可以把常用操作写成函数,每次调用函数即可。
对于数据大于内存的情况,可以用dask解决(或部分解决)。
暂时想到这些
当然了,也确实有些地方无法用python很好地完成,所以我最终的选择是搭配SAS、python和Stata。好钢用在刀刃上。比如先用SAS处理大的数据表、合并数据表,最后得到了比较小的数据之后再用Python或者Stata。比如需要的计量模型比较专业,最后就用Stata而不用python。