引言
上半年自己在弄毕业设计时负责的是一个与Python数据分析相关的课题,最终取得了个不错的成绩,觉得其中的技术方案选型部分很有分享出来的价值,对在科学计算(现在流行的说法是数据科学)方面还是一知半解的人起到一个入门科普的作用,故撰写此文。
2.1.1 科学计算编程语言的比较
MATLAB语言介绍:
Matlab是MathWorks公司开发的科学计算软件,软件模式为本体加扩展工具箱。它具有强大的矩阵计算和数据可视化能力,一方面可以实现数值分析、优化、统计偏微分方程数值求解、自动控制、信号处理等多个领域的数学计算,另一方面可以实现二维、三维绘图、三维场景生成和渲染、科学计算可视化、图像处理、虚拟现实与地图制作等功能[13]。不过,值得注意的是MATLAB是商业性软件,软件售价不菲,而且就软件社区生态来看,目前在数据科学领域越来越不受待见。以“MATLAB Machine Learning”和“python machine learning”作为关键词在谷歌分析中比较[14],如图2.1所示,会发现MATLAB的数据科学社区活跃度远不及Python数据科学社区。从拥抱活跃的数据科学社区从而方便自己遇到问题时可以寻求解决方案的角度考虑,使用Python显然更有利于课题的后续研究发展。
图2.1“MATLAB Machine Learning”和“python machine learning”谷歌分析结果比较
R语言介绍:
与MATLAB相似,R语言用于数据处理和统计分析,为大多数统计学家所钟爱。R语言脱胎于AT&T实验室开发的统计语言S语言,且与s语言基本兼容[15]。R语言是开源免费的,由一个庞大活跃的全球性研究型社区维护,深受众多统计学家的欢迎。
Julia语言介绍:
Julia是专门为高性能数值计算而设计的高级动态程序设计语言,它在分布式并行化、精确数值计算等方面提供了独特的支持,并包含了大量可扩展的数学函数库。特别是在线性代数、随机数生成、信号处理和字符串处理等领域,Julia集成了许多成熟的、优秀的基于C和FORTRAN的开源库,具有很高的性能和效率[16]。不过,Julia面世于2012年,目前还处于蓬勃发展之中,尽管前景可观,但目前在科学计算领域的普及度还远不如Python。
Python语言介绍:
Python语言诞生于1989年,创始人为Guido Van Rossum。其为一种弱类型的高级动态语言。目前最新版本为3.9。Python开源免费,有着十分活跃的科学计算社区生态,社区活跃度远超R语言社区。由Tiobe公司发布的编程语言排行榜显示,Python排行位置已跃居第三位,而R语言处于第九位,如图2.2。不同于MATLAB、R和Julia等专注于科学计算领域,Python在Web应用开发领域也备受追捧。基于Python编写的Django、Flask等web框架在软件开发领域得到了大规模的应用。从易于将本课题的研究成果最终转化为特定的数据分析解决方案的角度出发,选择Python作为本课题的编程语言显然较其他几种语言更有优势。一致的语言特性,可以显著减少未来成果转化时的学习成本,所以本课题选用Python3.8.2作为统计模型构建分析的编程语言。
图2.2 Tiobe编程语言排行榜历史数据
2.1.2 开发平台的比较
PyCharm[17]介绍:
Pycharm是由JetBrains打造的Python集成开发环境,具有调试、语法高亮、项目管理、代码跳转、智能提示、自动补全、单元测试、版本控制等强大功能。PyCharm分为社区开源版和专业版,其中专业版提供了支持Django、Flask等框架的Web开发、数据库连接等功能。
Visual Studio Code[18]介绍:
Visual Studio Code是由微软公司推出的一款轻量级编辑器,其软件架构为平台加插件模式。加载Python插件后,Visual Studio Code可以视为一款十分出色的小型Python IDE,但功能完备性方面相较PyCharm还有不少距离。不过,鉴于其完全开源免费的特性,拥簇者甚众,社区参与度十分活跃。
Spyder[19]介绍:
一款面向Python语言的开源科学计算IDE(Integrated Development Environment),其设计思想类似于MATLAB,模仿了MATLAB的“工作空间”功能,方便观察和修改数组值。 其集成了Numpy、SciPy、Matplotlib等科学计算软件包,内置交互式环境以处理数据,对于数据科学家来说十分友好,且被Python的科学计算发行版Anaconda所收录。项目目标是促进Python在科学和工程领域的软件开发的使用。
Jupyter Notebook介绍:
一个基于Web的交互式计算环境,用于创建Jupyter Notebook文档。不同于Spyder的整个Python文件运行后生成交互页面式的交互风格,Jupyter Notebook的交互是基于Python代码块进行的,这意味着用户可以依照自己的意愿有选择性地运行某些代码块并得出结果,相较于Spyder具有更强大的灵活性。和Spyder一样,Jupyter Notebook也被Python的科学计算发行版Anaconda所收录。
2.1.3 数据库技术的比较
MySQL[20]数据库介绍:
一款高性能、低成本、可靠性好且十分流行的开源数据库,有着二十多年的历史,是目前最好的关系型数据库管理系统之一,广泛应用在互联网上的中小型网站上。随着MySQL的不断成熟,它也逐渐被用于更多大规模的网站和应用。MySQL目前归于Oracle旗下,其数据库查询语言为SQL。
MongoDB[21]数据库介绍:
一种面向文档的数据库管理系统,被定义为非关系型数据库,致力于为Web应用提供可扩展的高性能数据存储解决方案。与MYSQL中的表不同,它支持的查询文档的数据结构非常松散,为类似于JSON的BSON格式,因此可以存储更为复杂的数据类型。MongoDB的特点是强大的查询语言。它的语法遵循面向对象的思想,可以实现类似关系数据库中单表查询的大部分功能,也可以对数据进行索引。
尾声
以上内容涉及到的技术栈仅仅针对数据集大小为中小规模时的情况,对于大规模或者超大规模的数据集,则需要额外借助一些大数据方面的技术栈,如Apache Hadoop、Apache Hive和Apache Spark等,还请具体情况具体分析。
参考文献
[5] MATLAB[EB/OL]. https://www.mathworks.com/products/matlab.html, 2020.05.11.
[6] R[EB/OL]. https://www.r-project.org/about.html, 2020.05.11.
[7] Julia[EB/OL]. https://julialang.org/, 2020.05.11.
[10] Anaconda[EB/OL]. https://www.anaconda.com/, 2020.05.11.
[11] Jupyter Notebook[EB/OL]. https://jupyter.org/, 2020.05.11.
[12] Christian Hill. Learning Scientific Programming with Python[M]. Cambridge University Press, 2015:160-317.
[13] (美)Holly Moore. MATLAB实用教程(第二版)[M]. 高会生, 对童娜, 李聪聪等译. 北京: 电子工业出版社, 2010:1-2.
[14] 王树义. 学Python,能提升你的竞争力吗?[EB/OL]. https://www.jianshu.com/p/4445fe0a7e16, 2020.05.11.
[15] (美)麦特洛夫(Matloff, N.). R语言编程艺术[M]. 陈堰平, 邱怡轩, 潘岚锋等译, 北京: 机械工业出版社, 2013.6:1-2.
[16] 魏坤编著. Julia语言程序设计[M]. 北京: 机械工业出版社, 2018.10:1-2.
[17] PyCharm[EB/OL]. https://www.jetbrains.com/pycharm/, 2020.05.11.
[18] Visual Studio Code[EB/OL]. https://code.visualstudio.com/, 2020.05.11.
[19] Spyder[EB/OL]. https://www.spyder-ide.org/, 2020.05.11.
[20] MySQL[EB/OL]. https://www.mysql.com, 2020.05.11.
[21] MongoDB[EB/OL]. https://www.mongodb.com/, 2020.05.11.