Python地球科学数据分析

978-7-115-60258-9
作者: 毛里齐奥·彼得雷利(Maurizio Petrelli)
译者: 李明巨陶旸王圣尧
编辑: 胡俊英

图书目录:

详情

随着计算机技术的发展,通过编写计算机程序来解决相关领域的难题已经成为人们普遍认同的解决方案。Python语言凭借其简洁、高效的特点赢得了越来越多人的青睐。 本书旨在结合Python语言讲解其在地球科学数据分析方面的应用。本书内容分为12章,从搭建Python环境开始讲解,陆续介绍了一系列适用于地球科学领域的Python知识,不仅涉及基础的编程语法,也涵盖实际的编程案例及程序运行结果。本书还结合统计学知识演示了一系列数据分析及可视化案例,通过一些典型的案例和编程方法展现了高效的Python解决方案。 本书适合地球科学领域的师生阅读,也适合相关领域的科研工作者阅读,不要求读者有编程经验。

图书摘要

版权信息

书名:Python地球科学数据分析

ISBN:978-7-115-60258-9

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [意]毛里齐奥•彼得雷利(Maurizio Petrelli)

译    李明巨 陶 旸 王圣尧

责任编辑 胡俊英

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内容提要

随着计算机技术的发展,通过编写计算机程序来解决相关领域的难题已经成为人们普遍认同的解决方案。Python语言凭借其简洁、高效的特点赢得了越来越多人的青睐。

本书旨在结合Python语言讲解其在地球科学数据分析方面的应用。本书内容分为12章,从搭建Python环境开始讲解,陆续介绍了一系列适用于地球科学领域的Python知识,不仅涉及基础的编程语法,也涵盖实际的编程案例及程序运行结果。本书还结合统计学知识演示了一系列数据分析及可视化案例,通过一些典型的案例和编程方法展现了高效的Python解决方案。

本书适合地球科学领域的师生阅读,也适合相关领域的科研工作者阅读,不要求读者有编程经验。

译者序

近年来,Python语言和地理信息科学、地球科学等应用领域的结合愈加紧密,地学相关专业软件都相继推出了诸如ArcPy等专业化脚本编程模块。本书主要面向地球科学数据分析的实际应用进行设计,通过“概念解释→代码示例→应用示范”的模式进行组织,其间穿插了丰富的图表及代码示例,尤其适合初学者开展相关学习和研究。本书为方便读者的学习,同步介绍了微积分、概率论与数理统计等方面的知识,便于读者对地球科学数据分析背后的数学知识进行系统了解。

为进一步提升专业技术人员在地学数据分析方向的编程能力,在人民邮电出版社的邀请之下,江苏省基础地理信息中心结合业务工作实践经验对本书进行了翻译整理。本次译文保留了英文原版图书的体例风格,全书共五部分(共12章),其中,李明巨负责第一部分(第1~3章)的翻译,陶旸负责第二、三部分(第4~8章)的翻译,王圣尧负责第四、五部分(第9~12章)及附录的翻译。全书由李明巨负责统稿。江苏省基础地理信息中心刘善磊、张大骞高级工程师对本书关键代码进行了验证,河海大学苏红军教授、硕士研究生向源君、黄绮祯等对本书进行了全面细致的校对,人民邮电出版社编辑同志和相关专家也对本书提出了许多宝贵意见,在此一并表示感谢。

希望本书能起到抛砖引玉的作用,为国内从事地球科学数据分析相关应用研究的专业技术人员、研究生等提供参考。受译者水平所限,书中难免存在疏漏或不当之处,恳请同行及广大读者朋友们批评指正。

江苏省基础地理信息中心 李明巨

2023年1月于江苏南京

序  言

早在2015年,我就萌生了写本书的想法,那时候我开始在意大利佩鲁贾大学物理和地质系教“地球科学数据分析与解释”课程。刚开始上这门课的时候,我发现许多学生对利用Python进行数据管理、可视化和建模非常感兴趣,但市面上没有适合地质学的Python学习参考书。尽管介绍Python的书很多,也面向各层次的程序员(从初学者到专家),但它们大多只关注编程技术,没有讨论真正的应用,尤其是地质学方面的应用。换句话说,市面上缺少面向地球科学方面的Python专业图书。2018年12月和2020年2月,我分别在匈牙利厄特沃什•罗兰大学和德国汉诺威大学给地球科学家们讲授Python基础课程时,写书这个想法才开始不断成熟,内容规划也渐成体系。令人遗憾的是,2020年3月初,因受到新冠疫情的影响,意大利政府紧急封锁了全国所有学校,我只能和大部分意大利人一样待在家里。在人生中最困惑、最不安的时刻,我决定开始撰写本书。无论是学生,还是研究员,抑或是专家教授,任何希望利用Python进行可视化、分析和对地理数据进行建模的地球科学研究人员都可以参考本书,本书不要求读者具备任何编程经验。如果你正在地球科学领域学习或工作,还不熟悉编程,但又希望能够充分利用Python的强大功能,那么,恭喜你,本书非常适合你。

毛里齐奥•彼得雷利(Maurizio Petrelli)

2021年3月

致  谢

我想感谢所有在项目规划之初鼓励我、在写作过程中支持我的人。首先是Diego Perugini,在我中断研究3年之后的2014年,他通过Chronos项目让我重启学术生涯。我还要感谢Erasmus Plus(E+)项目,是它支持我在匈牙利和德国从事海外教学活动,感谢管理E+项目的Roberto Rettori 和 Sabrina Nazzareni,还有佩鲁贾大学的Sonia Trinari和Francesca Buco,以及Tiber Umbria Comett教育计划(Maria Grazia Valocchia)的E+项目主管人员。同时,也非常感谢汉诺威大学的Francois Holtz教授和厄特沃什•罗兰大学的Szabolcs Harangi教授,感谢他们允许我在他们的机构中开设“地球科学中的Python”这门课程。佩鲁贾大学的物理和地质系通过Engage FRB2019项目支持了本书,我也对此表示感谢。衷心感谢我的家人,感谢他们对我的包容。最后,我真诚地感谢Aviva Loew(学术语言专家)、Giuseppe la Spina、Eleonora Carocci和Diego González-García,感谢他们的批评与建议,让我受益匪浅。

写致谢之前,我手机上收到一条信息,通知我成功预约了2021年3月4日接种COVID-19疫苗,那天距离意大利政府封锁全国所有学校正好一年零一天。我把这条信息视为希望的信号。我希望,全球范围内正在开展的疫苗接种行动预示着我们的生活会开启珍贵的“新正常时代”,届时“抗击新冠疫情的时代”也会结束。现在应该是共鸣、合作和重生的时刻。

前  言

自我介绍

你好,欢迎阅读本书,我叫Maurizio Petrelli,目前在佩鲁贾大学物理和地质系工作。我致力于火山的岩石学特征研究,重点研究火山爆发前的动力学和时间尺度。在这方面,我将传统技术和创新技术结合。自2002年以来,我一直在实验室工作,致力于激光烧蚀电感耦合等离子体质谱(laser ablation inductively coupled plasma mass spectrometry, LA-ICP-MS)设备的开发。2006年2月,我以题为《岩浆相互作用过程中的非线性动力学及其对岩浆杂化的影响》(“Nonlinear Dynamics in Magma Interaction Processes and their Implications on Magma Hybridization”)的论文获得了博士学位。目前,我正在物理和地质系开发一个新的研究方向,将机器学习技术应用于地质研究。此外,我还负责管理LA-ICP-MS实验室。

本书结构

本书共5个部分,外加4个附录。第一部分是“地质学家应知应会的Python基础知识”,重点介绍Python编程的基础知识,从搭建科学的计算环境到使用Python解决你的第一个地质问题。第二部分是“地质数据描述”,说明如何将单变量和双变量可视化(即绘制图表)并生成描述性统计数据。第三部分是“地质学中的积分与微分方程”,讨论积分和微分方程,重点讨论其在地质学中的各种应用。第四部分是“概率密度函数与误差分析”,讨论其在地球科学数据评价和建模中的应用。第五部分是“稳健统计与机器学习”,讨论从统计学角度分析偏离正态分布的数据集的方法,以及机器学习技术在地球科学数据建模中的应用。

格式约定

在本书中,我使用约定来标识不同类型的信息。例如,正文中使用的Python语句、命令和变量都设置为斜体。

以下面引用的文本为例。

在matplotlib中有许多选项可以创建各式各样的子图。在我看来,最简单的方法之一是创建一个空的图形,比如先使用fig = plt.figure(),然后使用fig.add_subplot(nrows, ncols, index)添加多个轴(即subplot)。参数nrowsncolsindex分别表示行、列以及索引。其中,索引从左上角的1开始,向右增加。为了更好地理解,请参考代码清单4.4中的代码。

下面突出显示了一段Python代码。

代码清单1 Python代码列表示例

1  import pandas as pd
2  
3  #Example 1
4  my_dataset1 = pd.read_excel('Smith_glass_post_NYT_data.xlsx',
5                              sheet_name='Supp_traces')

共享代码

本书提供的所有代码都在Anaconda Individual Edition 2021.05(Python 3.8.8)上进行了测试,可以在异步社区网站和我的GitHub仓库(Petrellim)上找到。

参与合作

我始终对全球范围内的新合作持开放态度。请随时通过邮箱(maurizio.petrelli@unipg.it)与我联系,提出新的想法或合作意向。

服务与支持

本书由异步社区出品,社区(https://www.epubit.com)为您提供后续服务。

配套资源

本书提供配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

提交勘误信息

作者、译者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“发表勘误”,输入错误信息,单击“提交勘误”按钮即可,如下图所示。本书的作者和编辑会对您提交的错误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区投稿(直接访问www.epubit.com/contribute即可)。

如果您所在的学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发送给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。

异步社区

微信服务号

第一部分 地质学家应知应会的Python基础知识

第1章 轻松搭建Python环境

1.1 Python编程语言

Python是一门高级、模块化的解释型编程语言。高级编程语言的特点是高度抽象,它不涉及计算机本身的细节,容易理解。Python是模块化的,它支持使程序灵活和代码复用的模块和程序包。具体来说,Python包括一个处理所有基本操作的“核心”,以及庞大的用于执行特定任务的专用程序包生态系统。需要说明的是,Python包是代码中可以重复使用的部分,它是函数和模块(即一组函数)的集合,允许用户完成指定任务,比如读取Excel文件或者绘制可发布的图表。

Python是一种解释型语言(同MATLAB、Mathematica、Maple和R一样)。相反,C语言和Fortran则是编译型语言。编译型语言和解释型语言有什么区别呢?粗略来讲,在编译型语言中,编译器需要编译可执行文件中列出的每一句代码。编译成功后,任何目标计算机都可以直接运行该可执行文件。而解释型语言需要在每次执行过程中实时编译代码。对于编程初学者而言,两者的主要区别在于解释型语言的运行速度通常要比编译型语言慢。然而,在大多数日常操作中,性能早已不是问题。在复杂的流体动力学模拟或者三维(3D)图形应用等计算密集型任务中,性能的重要性日趋体现。如果需要,基于特定程序包支持,比如可以编译Python代码的Numba包等,Python的性能可以得到显著改善。在这种情况下,Python代码的运行速度可以接近C和Fortran。

作为一种解释型语言,Python凭借其快速的原型设计和极高的灵活性,促进了不同平台上代码的交换(即跨平台代码交换)。

吸引地球科学家们开始学习Python的原因是它有如下特点:(1)语法简单易学;(2)高度灵活;(3)拥有广大用户和开发者群体的支持;(4)免费、开源;(5)能提高个人技能的熟练程度。

1.2 编程范例

编程范例是编写代码的一种方式或通用方法。作为零阶近似,两种典型范例占主导地位:命令式和声明式。命令式编程主要关注“如何”解决问题,而声明式编程主要关注解决“什么”问题。以这两种范例为基础,程序员开发了许多派生范例,比如过程式、面向对象、函数式、逻辑式、面向切面等。根据项目的总体性质和工作的最终范围,你可以选择特定的编程范例来开发代码。针对并行计算,函数式编程提供了完善的框架。然而,考虑到关于编程范例的详尽介绍超出了本书的讨论范畴,所以我只阐述一些Python支持的范例。

Python编程语言主要为面向对象编程而设计,尽管它也支持(不一定完全支持)纯命令式、过程式和函数式范例。

命令式。命令式编程是最古老、最简单的编程范例之一,我们只需向计算机提供一个定义好的指令序列。

过程式。过程式编程是命令式编程的一个子集,过程式编程并非简单提供一个指令序列,而是将部分代码存储在一个或多个过程(即子程序或函数)中。任何指定步骤都可以在程序执行期间的任意时间点被调用,允许代码组织和重复使用。

面向对象。与过程式编程一样,面向对象编程是命令式编程的一个子集(即演变)。在面向对象编程中,对象是关键元素。其优势是,与现实世界的实体(比如网站购物车等所见即所得的环境)保持紧密联系。

函数式。函数式编程是一种声明式编程。纯函数式范例将计算建立在评价数学函数的基础之上,非常适合高负载的并行计算应用程序。

本书将充分利用Python的灵活性,不会过多关注特定的代码样式或特定的范例。具体来说,对于简单的任务,所用范例仍以命令式为主,而对于更加高级的模型,代码所用范例会以过程式为主。此外,我们也受益于许多为Python开发的面向对象库(例如pandas、matplotlib)。

1.3 本地Python环境

在个人计算机上搭建能够科学运行的Python环境主要有两种方法:(1)安装Python主程序并分别添加所有必需的科学包;(2)安装“即用型”Python环境。你可以两者都尝试,但是我建议从方法(2)开始,因为它几乎不需要任何编程技能,你可以很快地准备好并且轻松地开始你的“Python世界之旅”。

Anaconda Python发行版是“即用型”Python环境的样例之一。Anaconda公司(前身是Continuum Analytics)开发和维护的Anaconda Python发行版,包括一个免费版和两个付费版。其中免费版是个人版(也是我们的选择);它易于安装且提供社区支持。要安装Anaconda Python发行版的个人版,我建议参考官方文档给出的指引。首先,下载并安装适合你的操作系统(即Windows、mac OS或者Linux)的最新、稳定的安装程序。对Windows和mac OS操作系统来说,图形界面安装程序是可用的,安装过程与其他软件的一样。Anaconda安装程序会自动安装Python主程序和Anaconda Navigator,以及大约250个包,它们组成了一个完整的可以科学可视化、分析和建模的环境。根据需要,可以使用“conda”包管理系统,从Anaconda仓库中单独安装7500多个额外的程序包。

Anaconda Navigator是一个桌面图形用户界面(graphical user interface, GUI),如图1.1所示,这意味着你不需要使用命令行指令就可以启动应用程序、安装包和管理环境。

利用Anaconda Navigator可以启动两个主程序(Spyder和JupyterLab),用于编写代码、运行模型和可视化结果。

图1.1 Anaconda Navigator的截图

Spyder是一个集成开发环境(integrated development environment, IDE),即为软件开发和科学编程提供一套全面的工具的软件应用程序。它结合了用于编写代码的文本编辑器、用于调试代码的检查工具和用于执行代码的交互式控制台。图1.2展示的是Spyder IDE的屏幕截图。

图1.2 Spyder IDE的屏幕截图

JupyterLab是一个基于Web的开发环境,用来管理Jupyter Notebook。Jupyter Notebook是一个Web应用程序,可以创建和分享包含实时代码、方程、可视化结果和描述性文本的文档。图1.3所示是Jupyter Notebook的截图。

图1.3 Jupyter Notebook的截图

Spyder和JupyterLab都可以用于编写代码、运行程序和导出结果。两者各有特色,我个人的选择是将Spyder用于研究,JupyterLab用于教学。

1.4 远程Python环境

远程Python环境是指运行在可以在线访问的计算机系统或虚拟机上的环境。例如,Python环境可以安装在学术机构(大多数大学都有提供这种机会的计算中心)或者商业机构(通常提供基础免费计划)托管的远程机器上。前面描述的安装本地Python环境的概念和过程对于远程Python环境仍然有效。然而,访问和在线操作远程Python环境需要掌握额外的技能(例如需要了解Secure Shell,或基于Linux和基于Windows的远程桌面协议)。因此,为简单起见,我再次建议从本地安装Anaconda Python发行版开始学习。

不需要安装本地环境就可以在线使用Python的另一种方法是使用远程IDE。例如,像Repl.it和PythonAnywhere这样的商业机构都提供免费和完整的Python IDE,允许用户先开始简单编程,再开发高级的应用程序。然而,这种方法的一个缺点是,这些IDE都不是专门为科学计算而设计的。因此,运行本书中的代码需要安装核心发行版默认不包含的额外库。因此,为了轻松复制本书中给出的代码和示例,我再次建议,在你的计算机上安装最新的Anaconda Python发行版。

1.5 Python包

Python的关键特征是它的模块化本质。本节将列举一些我们将在本书中广泛使用的通用程序包。对每一个库,我都会提供从官方文档中摘录的简要描述以及可能进一步阅读的参考资料。

NumPy是一个Python库,它提供了一个多维数组对象和一系列用于对数组进行快速操作的混合程序,包括数学、逻辑、形状操作、排序、选择、输入/输出、离散傅里叶变换、基本线性代数、基本统计操作、随机模拟等。

Pandas是一个开源库,它为Python编程语言提供了高性能、使用便捷的数据结构和数据分析工具。

SciPy是一个基于数学算法和函数的集合库,它建立在Python的NumPy扩展之上。它向用户提供高级命令和类,用于操作和可视化数据,为交互式Python会话提供了强大的功能。利用SciPy,交互式Python会话成为一个数据处理和系统原型环境,可与MATLAB、IDL、Octave、R和Scilab等系统相媲美。

Matplotlib是一个可以对静态、动态和交互式数据进行可视化的Python库。

SymPy是一个用于符号计算的Python库。符号计算主要处理数学对象。这意味着数学对象得精确地表达,不能模糊,并且带有待求值变量的数学表达式以符号形式保留。

Scikit-learn是一个开源的机器学习库,支持监督学习和非监督学习。它还提供了各种用于模型拟合、数据预处理、模型选择和评估的工具,以及许多其他实用工具。

1.6 专门为地质学家开发的Python包

许多Python包是为解决地质问题而开发的,它们形成了一个广阔、多样化、实用的生态系统,能够完成特定的地质学任务,例如Devito、ObsPy和Pyrolyte等,其中大多数都可以通过conda包管理系统轻松安装,只有少数有一些额外的步骤和技能要求。本书不会涉及特定包的用法,因为它们都是为了解决非常具体的地质学问题而开发出来的。然而,Python新手可能会从中受益,并且可能需要学习本书介绍的概念才能使用这些包。本书的附录A和配套资源将提供一系列全面的、为解决地质问题而开发的、面向地质学家的Python包和资源。

相关图书

算者生存:商业分析的方法与实践
算者生存:商业分析的方法与实践
数据结构与算法(Rust语言描述)
数据结构与算法(Rust语言描述)
R语言医学多元统计分析
R语言医学多元统计分析
Python数据分析(第3版)
Python数据分析(第3版)
Python数据分析入门与实战
Python数据分析入门与实战
Python贝叶斯分析(第2版)
Python贝叶斯分析(第2版)

相关文章

相关课程