1. 引言
数学地质(数学地球科学(mathematical geoscience))作为面向地学类专业学生开设的一门选修课,对于提高大学生数学素养、认识数学的重要性以及在地学数据的定量化研究方面都有重要意义 [1] [2]。但是由于数学地质课程涉及到较多的数学内容,不少同学都有一种畏难情绪,不敢选、不愿意选修数学地质。然而这个短板在本科毕业论文或研究生工作、学习期间就有了明显的表现。如Excel绘图不规范、不美观;对于Excel绘制的一些的图件(如回归分析中的拟合线)未能正确理解,对于Excel软件本身的错误(如一元回归分析中,出现拟合优度系数R2 < 0的明显错误)没有意识到等。这些问题都说明部分学生对于概率统计分析中的一些基本概念不很清楚,特别是对于概念后面的真正含义没有完全弄懂。而数学地质课程,恰好能弥补这一短板,让学生真正理解数学公式的含义及其背后的物理意义,从而更好地培养其数学素养。
为了克服学生对数学地质的畏难情绪,增强对基本概念的理解,在数学地质教学过程中,需要采用一些新的教学环节。其中的两个重要环节是实践教学和计算过程和结果的可视化。
实践教学环节主要是运用常用的多元统计软件对实际数据进行处理和分析。运用不同的算法对实际数据进行处理,不但可以让学生进一步理解各种算法的原理,同时也掌握常用的多元统计软件的使用方法,增加学生对数学地质的兴趣。对于数学地质课程中涉及的多元统计方法,Excel + SPSS或Excel + Minitab基本可以满足实验课的教学需求。Excel软件提供了非常丰富的函数库,对于一些简单的运算,如均值、方差、距离计算、相关系数与相关系数矩阵、协方差与协方差矩阵、简单的方差分析、一元与多元回归分析、随机数的产生等都可以实现,结合函数的嵌套功能,可以完成一些比较复杂的公式运算。而且Excel还提供了丰富的绘图功能,加上Excel应用广泛,基于Excel进行数据处理、分析与可视化是大学生必须掌握的一项基本技能。SPSS和Minitab是常用的统计分析软件。SPSS和Minitab 界面与Excel相似,操作也比较简单,同时功能比较强大,除一般的数据预处理功能外,两类软件都提供了常用的多元统计方法,包括回归与逐步回归分析、层次聚类与K-means聚类、判别与逐步判别分析、主成分分析和因子分析等。但是这两种软件总的来说,图形功能较弱,除通用的多元统计方法外,一些新的机器学习方法没有提供。而且这两个软件都是商业软件,涉及版权问题。
计算过程的可视化,则是把不同算法的计算过程和结果进行可视化表达,从而可以更直观的展示算法的特征和计算过程,加强对算法的理解。这方面,Excel、SPSS、Minitab难以满足要求,需要新的工具来补充。而Python语言则是比较适合的选择。
把Python语言引入数学地质教学中,有很多的优势。首先Python是开源、跨平台语言,而且函数库非常丰富;其次,随着Python语言的广泛应用,Python用于地学数据数据分析已经越来越广泛 [3];再者,相对于C语言,Python容易上手。作为理工科学生,一般都学过C语言。C语言是所有编程语言的基础,对于编程方法、思路的训练是其它语言很难替代的。但是C语言比较难学,特别是学完以后,很难直接用于解决实际问题,因此不少同学会认为C语言难学,而且学了也没有用。Python则恰恰相反。与C语言相比,Python语言非常容易上手,因此容易使学生有成就感,从而增加其学习兴趣。基于这方面的考虑,在数学地质教学中,尝试把Python引入数学地质教学。既让学生初步了解Python语言的特点及编程方法,同时提高学生学习数学地质的兴趣。同时,很多地学软件,如ArcGIS、ENVI等都支持Python的脚本语言。因此,掌握好Python可以增强学生运用计算机解决实际问题的能力。
相对于Matlab在数字信号处理、高等数学、线性代数教学过程中的广泛应用,Python应用于辅助教学还比较少。
2. Python语言及其特点
Python语言的出现要追朔到上世纪80年代,1989年开始启用。目前已经发展到3.7版。
表1为TIOBE统计的近20年来几种语言的排名情况。由表1可知,Python开始启用5年后,其用户使用量已经排名到了20位,从本世纪初开始,其排名一直上升,进入编程语言的前10位。到2019年,更是超过C++,上升到第3位,其优势自不待言。而且在2007年、2010年以及2018年3次成为年度语言(Hall of Fame)。

Table 1. Annual rankings of Python language in recent 20 years (Data source: www.tiobe.com)
表1. Python语言近20年来年度排名情况(数据来源:www.tiobe.com)
之所以越来越多的用户选择Python 语言作为编程语言,主要有以下几方面的原因。
1) Python语言是开源语言,可以免费获取。同时也是跨平台语言。
2) 相对于在数值分析中广泛应用的Matlab语言,Python语言更紧凑,可读性更强。据统计,完成同一个任务,Python语言比Matlab语言代码要少10%~20%。
3) Python语言相对于许多其它编程语言,更容易学习和掌握。
4) Python语言有非常丰富的数值分析库、统计库和数据可视化库。
5) 作为开源语言,Python网络资源非常丰富,在线帮助文件也非常多。
基于以上原因,国内外很多地学科研机构及研究人员都首选Python作为软件开发平台或开发语言。如GEOS-Chem技术支持团队基于Python开发了GCPy工具,并替代以前基于IDL (Interactive Data Language)开发的应用GAMAP [4]。而且有不少基于Python语言开发的第三方库也可以免费获取。比较常用的地学Python库有:Geopandas、EarthPy库、eo-learn、PVGeo [5]。为了普及与交流Python的地学应用,还有专门的国际学术会议。如专门面向地学领域Python应用的国际学术会议GeoPython (http://www.geopython.net),从2016年开始举办,参会人员逐年增加,2018年有来自30个国家的参会代表。
3. 国内外高校地学相关专业Python语言应用情况
地学数据具有海量、非结构化以及空间位置的相关性、多尺度性等显著的特点。与传统多元统计方法中研究的数据特征有很大的区别。Python语言出现的时间并不长,广泛应用也是近10年才出现。由于Python语言在大数据处理、人工智能、网络数据获取等方面的广泛应用,为了适应Python快速发展的要求,很多高校或研究机构都开设了相关课程或速成班。国内有关Python教学的文章主要有两类,一类是Python本身的教学方法研究,另一类是Python辅助教学方法研究。图1是知网公开发表的论文中以 Python+教学作为关键词检索得到得的文章数。由图1可知,近3年相关文章快速增加。但是这些文章有关Python语言辅助地学类专业教学的论文鲜有报道。高校的课程设置方面,主要还是以Python语言编程方法为主。把Python语言用于辅助地学教学目前还报道得较少,用于辅助数学地质教学更是鲜有报道。

Figure 1. Number of articles on Python teaching collected by CNKI in recent 10 years
图1. 近10年知网发表的有关Python教学方面的文章数目
国外Pythony语言的应用比国内早。把Python用于地学数据分析也同样比较早。同时,为了满足地学数据大数据分析与人工智能处理的需要,国外许多高校的地学类专业纷纷开设Python地学数据分析方面的课程。表2列出了部分国外高校地学相关专业开设Python语言用于地学数据分析方面的课程。这些课程不是纯粹的Python语言编程课程,而是Python语言如何用于地学数据处理。部分课程名称尽管没有包含“Python”,但应用平台仍然是以Python为主。

Table 2. Python courses open to students of geoscience major from some universities
表2. 国外地学类相关专业开设与Python语言相关课程情况
4. Python辅助数学地质教学内容设计
Python用于数学地质教学中,如何设计教学内容,是需要考虑的重点。首先,目的要明确。在数学地质教学中引入Python语言,其目的有两个,一是通过引入Python语言,让学生对Python语言有基本的了解,引起学生的兴趣。其次,对教学过程中涉及的算法及结果运用Python进行可视化,让学生直观的了解算法的实质,同时也激发学生学习Python的兴趣。其次分清主次。由于Python主要是用于辅助教学,Python语言应该是从属的,因此Python的编程方法不能作为主要内容。基于以上考虑,Python用于数学地质教学主要从以下几方面入手。
4.1. Python安装与开发环境的选择
Python语言作为一门开源语言,有各种各样的安装包,让初学者难以选择,同时,学习运用Python语言,离不开代码编辑器或集成开发环境(IDE, Integrated Development Environment)。因此,首先需要给学生大致介绍Python语言的安装方法及IDE。根据作者Python编程体会,初学者采用Anaconda安装包是一种高效、快速的方法。关于Python的编程环境,目前到底有多少Python IDE,并没有一个明确的统计,而且新的IDE还在不断涌现。但最常用的IDE还是有共识的。据统计,目前最常用的Python开发环境主要有:Jupyter、PyCharm、Spyder、visual studio code、IDLE、Sublime Text等 [6]。而Anaconda安装包集成了Jupyter和Spyder两个开发环境。基于以上考虑,在Python教学中采用了Anaconda以及提供的Spyder开发环境。
4.2. Python常用库介绍
丰富的开源函数库是Python的一大亮点,也是Python语言近年来快速成为重要的开发语言的一个主要原因。Python库包括两类:标准库和第三方库,两种库的调用方式是一样的。我们讲的Python语言丰富的函数库,实际暗指的就是第三方库,即非Python语言自带的库,需要下载安装方能使用。由于Anaconda安装包集成了多达1500个库,这些库包括了数学地质教学内容所涉及的所有函数,因此安装好Anaconda后,一般情况,不需要再安装其它库,这也是推荐学生采用Anaconda包的一个重要原因。尽管库非常多,但最常用,最重要,学生必须掌握的库主要有以下几个:Numpy、Scipy、Pandas、Matplotlib、Scikit-learn。其中Numpy、Scipy、Pandas为科学计算与数据分析软件包,Matplotlib为图形可视化包。Numpy、Scipy、Pandas、Matplotlib 4个函数库构成了Python科学计算与可视化的支柱。而Scikit-learn函数库则是建立在Numpy、Scipy、Matplotlib上的机器学习工具,提供了非常丰富的机器学习算法 [7]。包括了常用的监督学习与非监督学习常用算法:线性模型(普通最小二乘法、岭回归、Lasso回归模型)、线性和二次判别分析、支持向量机分类、贝叶斯分类、最近邻分类、决策树分类、神经网络分类、随机森林分类(Random forest)、梯度树提升算法(Gradient Tree Boosting)、自适应增强算法(Adaboost),层次聚类、K-means聚类、基于密度的聚类(DBSCAN)、谱聚类(Spectral Clustering)等。显然,这些机器学习算法比数学地质教学内容要丰富得多。教学过程中应该结合具体的方法,通过示例,简要介绍这些库的使用方法。
4.3. 基于Python进行计算结果的可视化
结果的可视化,指的是运用Python编程展示一些无法或者难以通过Excel、SPSS、Minitab软件展示的图件。在教学过程中可视化的图件主要有以下几类:曲线的填充(如概率分布、假设检验拒绝域等图件中部分区域的填充)、散点图矩阵(多变量中两两变量散点图的矩阵排列)、相关系数热力图(图2)、不同线性判别函数对比、K-Means聚类过程(图3)、样本的高维映射(利用核函数把二维变量映射到三维特征空间)等。

Figure 2. Heatmap of correlation matrix
图2. 相关系数矩阵热力图
(a) 初始中心
(b) 第1次迭代
(c) 第2次迭代
(d) 第3次迭代
Figure 3. The change of clustering center in K-means clustering
图3. K-means聚类过程中聚类中心的变化
5. 结语
本文结合作者引入Python辅助数学地质教学的体会,作了简单的总结。由于是首次把Python语言用于数学地质教学,因此对于教学内容的设计以及教学过程的把控还存在不少问题,需要在以后的教学过程中不断完善。