参考文献
Jon Danielsson, Jia Rong Fan,Which numerical computing language is best: Julia, MATLAB, Python or R?,VOXEU,2018,https://voxeu.org/content/which-numerical-computing-language-best-julia-matlab-python-or-r
Aruoba S B, Fernández-Villaverde J. A comparison of programming languages in macroeconomics[J]. Journal of Economic Dynamics and Control, 2015, 58: 265-273.
Fernández-Villaverde J, Valencia D Z. A Practical Guide to Parallelization in Economics[R]. National Bureau of Economic Research, 2018.
注:图片来源于VOXEU.org
现代经济学研究已经越来越依赖于编程语言,就像我们曾经推送过
【香樟推文0818】Econmputer,你认识吗?
。经济学圈子有一个玩笑:我们是经济学专业,计算机方向的。Danielsson和Fan(2018)指出,经济学研究者最常用的编程语言是Matlab、Python、R,而最近由于Sargent的支持,Julia也越来越被经济学者们用于经济研究与数据分析。
自然出现的问题就是:哪种编程语言最好?
当然,这个问题的答案肯定是仁者见仁智者见智。Danielsson(2011)的“Financial risk forecasting”一书原本是用Matlab和R语言,最近他与Fan一起由更新了Python和Julia版本。因此,他们给出了六个标准来判断哪种编程语言更好。
1、语言的特征
R和Matlab首次开发于20世纪70年代从此以后,它们会不定期的更新版本。
有些R的函数前后不一致,并显示出有问题的结果,正如Burns(2011)在“R Inferno”(https://www.burns-stat.com/pages/Tutor/R_inferno.pdf)所显示的一样。
Matlab也有不合意之处,例如,矩阵存取用相同的括号类型()作为函数调用,这会使得代码读取不便。它们既没有type safe,也没有配置恰当的命名空间,它们的包通常重复使用函数名,从而导致难以诊断的错误。R只支持有限的面向对象编程,而Matlab在2015b升级后才支持面向对象编程。
Python则比上两种编程语言年轻20年。对于数值分析编程,Python最常使用两个包——pandas和NumPy。前一个包是用于数据结构,后一种则是计算。但是,这两个包的数据结构通常不一致。与R和Matlab相比,Python中常用的计算需要调用更长的函数。
Julia则更年轻,正因为如此,它也吸收了上述编程语言的有点。在Julia中,使用者可以有选择性地使用type declarations,而且多线程计算更自然。具有面向对象编程特征,multiple dispatch是其核心特征。
因此,根据语言特征,Julia是最优的。
2、速度
R、Matlab和Python是演绎语言,因此,它们会发费更多的处理时间。虽然它们现在都可以offer JIT(just-in-time)编译。,但是这并不是总是有所帮助。迭代循环尤其缓慢。
这对于Matlab并不是大问题,因为它被设计用于线性代数,函数功能都是作为用FORTRAN或者C语言编写的数值函数库的前端开放的。R也或多或少类似。但是它们有许多技巧可以提升计算速度。然而,从实施的角度来看,这些技巧又使得它们变得更加复杂。
在Python中,Cython通常被用于提升运行速度。人们也使用Numba。但是它仅仅只能用于某些特别简单的例子。
而Julia则显示了与FORTRAN或C一样快的速度。用户并不用使用其它技巧来提升代码运行速度,因此,这种语言更简单,更容易编程。
Aruoba and JFV(2015)也比较了不同编程语言的速度。
3、数据处理
实现数据通常有多种格式,例如,text files, CSV files, Excel, SQL databases, noSQL databases and proprietary data formats。
R在这方面是绝对的领先。它就是被设计来处理科学数据。它能处理许多种格式和来源、不同数据结构的复杂数据。而且包非常丰富。而且它还能处理超过内存的数据集。
Python在这方面表现也很出色。使用pandas和NumPy包可以处理许多数据,而且还包括一些R做不了的事情。但是它没有R那么灵活,NumPy数组没有列名称。数值分析编程要求迅速有效的重构和改变数据结构中的元素。而使用pandas来做这项工作则需要特殊的命令。
Matlab在最近的更新中已经极大的改进了数据类型的适用性。
Julia在这个方面则表现不佳。相关包缺乏。
也就是说,在数据处理方面,Julia最差,R最好。
4、包
四种语言都只提供基本的架构,但是许多专业的功能都需要依靠外部包来实现。
Matlab就是被设计用于数值分析,它内嵌了许多有用的函数。其包非常丰富,尤其用于工程应用方面的包很多。
R包更多:它几乎可以使用所有的统计函数。其缺点在于有些包的质量很差,说明文档不够友好,还可能有多个包实现相同的功能,而输出的类型又不一致。
Python也有许多包可用,但是和R与Matlab无法相提并论。
Julia的包则更少。
但是Python,Julia和R的可以相互调用函数,因此,这可以在某种程度上消除Python和Julia包少的问题。但是这也只是用于某些特殊的情形。
5、授权许可
R、Python和Julia都是开源的,而Matlab则是收费的。这就意味着,前三种编程语言可以在任何平台,任何人都可以安装使用它们。
而且数值计算编程工具箱的费用较为昂贵。例如JFV就在他的并行计算文章中比较了各种并行计算工具箱的价格。
从这个角度来看,Matlab最差。
6、易用性
Matlab拥有非常nice的集成开发环境(IDE),Matlab桌面。
R也有很大的进展,带有Rstudio IDE,甚至比Matlab更好一些。Shiny允许交互式网页应用和界面嵌入R中,因此,提供了联网式的数据呈现形式。R的作图功能强大。
Python的Anaconda也是一个很不错的IDE。作图主要通过Matplotlib来实现,与Matlab的界面类似。
Julia的IDE是Juno。
因此,从这个角度来看,Matlab是最好的,Julia有待发展。
领取专属 10元无门槛券
私享最新 技术干货