Python语言凭借其简洁、易读及可扩展性等特点,已成为程序设计领域备受欢迎的语言之一。丰富的Python第三方包(又称“第三方库”)使得Python可以应用于多个领域,气象研究与应用领域也不例外。由NCL转化来的库很大程度地方便了读者的学习。
本书内容由浅入深且针对性强,示例丰富且涉及面广,系统地介绍Python语言的基本语法、高级特征以及与气象应用密切相关的工具包。本书从Python和Linux的基础知识开始讲解,无编程基础或需巩固基础的读者也能阅读;然后介绍气象数据的读取、处理等;接着介绍绘图基础知识与常用的气象绘图方案;继而介绍一些常用气象物理量计算以及统计方法与检验等;最后介绍简易机器学习入门和几种Python计算加速方案。
随着科技的发展,气象学的相关研究对从业人员提出了更高的计算机编程要求,气象与计算机技术的深度融合成为发展的趋势。
本书关注Python在气象数据处理与可视化方面的应用,循序渐进地介绍Python基础应用,内容涵盖了NumPy、pandas、xarray、SciPy、Metpy、Matplotlib等常用于气象领域的模块的具体用法。本书提供了大量浅显易懂的与气象相关的示例,涵盖多种常见应用场景,极大地降低了读者的学习成本。
通过阅读本书,读者可以在较短时间内掌握Python在气象数据处理与可视化中的常用编程技能。
杨效业,南京信息工程大学气象学博士在读,气象专业微信公众号“气海无涯”联合创始人,利用Python语言进行气象数据处理及可视化,并发表专业论文二十余篇,在气象家园、简书、哔哩哔哩等平台发布的Python气象编程系列教程受到广泛好评。
杨青霖,2019年毕业于南京信息工程大学大气科学专业。2016年起将Python作为主要工具来进行气象数据处理及可视化,致力于代码工程化。曾任某知名气象公司任Python工程师,现就职于百度网络科技公司。
张诗悦,南京信息工程大学气象学博士在读,主要研究方向为气候变化对大气污染的影响,以Python为主要语言进行数据处理及可视化,并发表多篇SCI论文。
第 1章 认识Python 1
1.1 Python简介 1
1.1.1 Python与气象 2
1.1.2 Python与NCL 2
1.1.3 为什么使用Miniconda 2
1.2 开始使用 3
1.2.1 Miniconda安装 3
1.2.2 设置conda与pip镜像源 9
1.2.3 conda环境 10
1.3 Linux与Bash 12
1.3.1 Linux发行版 12
1.3.2 目录结构 12
1.3.3 用户与用户组 13
1.3.4 目录权限管理 14
1.3.5 远程登录 15
1.3.6 输入输出重定向 15
1.3.7 常用命令 16
1.4 Python包管理 20
1.4.1 conda 20
1.4.2 pip 21
1.5 编辑体验 21
1.5.1 交互式笔记本——Jupyter 21
1.5.2 工程型开发环境工具 30
第 2章 Python语言基础 33
2.1 变量 33
2.2 原生数据类型 36
2.2.1 数值 36
2.2.2 空值 38
2.2.3 字符串 38
2.2.4 列表和元组 41
2.2.5 集合 47
2.2.6 字典 49
2.3 判断 53
2.3.1 比较操作 54
2.3.2 如果条件的值不是布尔值 54
2.3.3 多重条件 55
2.4 循环和迭代 55
2.4.1 循环 56
2.4.2 迭代 57
2.5 序列切片 60
2.6 解析式 61
2.6.1 列表解析式 61
2.6.2 字典解析式 63
2.6.3 集合解析式 63
2.6.4 生成器解析式 63
2.7 函数 64
2.7.1 定义函数 64
2.7.2 函数的参数 66
2.7.3 匿名函数 69
2.7.4 闭包与装饰器 70
2.7.5 高阶函数 73
2.8 面向对象基础 74
2.8.1 什么是对象 74
2.8.2 类和继承 75
第3章 NumPy:Python数值计算之源 80
3.1 安装 80
3.2 多维数组和列表 81
3.3 多维数组的特征 81
3.3.1 数据类型 81
3.3.2 轴与维度 82
3.4 创建多维数组 83
3.4.1 np.array()——直接创建 83
3.4.2 np.zeros()——根据shape参数创建数组 84
3.4.3 np.arange()——根据起点、终点和步长创建 84
3.4.4 np.linspace()——根据起点、终点和元素数量创建 85
3.4.5 np.random.randn()——生成符合标准正态分布的随机多维数组 85
3.5 数组间运算和广播运算 85
3.6 多维数组的索引和切片 88
3.6.1 普通索引和切片 88
3.6.2 高级索引 89
3.7 多维数组对象的方法 90
3.7.1 reshape()——改变数组形状 90
3.7.2 transpose()——交换轴 92
3.7.3 mean()——计算平均值 92
3.7.4 sum()——计算元素和 93
3.7.5 std()——计算标准差 94
3.7.6 min()——取最小值/max()——取最大值 94
3.7.7 round()——进行四舍五入 95
3.7.8 dot()——执行向量/矩阵乘法 95
3.7.9 astype()——转换数值类型 96
3.8 NumPy的常用函数 97
3.8.1 数学计算函数 97
3.8.2 三角函数 97
3.8.3 浮点函数 98
3.8.4 非通用函数 98
3.9 NumPy中的常量 99
3.10 文件读写 99
3.10.1 文本格式文件的读取 99
3.10.2 文本格式文件的写入 101
3.10.3 顺序二进制文件的读写 102
第4章 pandas:优秀的数据分析工具 104
4.1 安装 104
4.2 pd.Series——序列 104
4.2.1 创建序列 105
4.2.2 时间索引 106
4.2.3 pd.Series对象的算术运算 107
4.2.4 pd.Series对象的常用属性 108
4.2.5 pd.Series对象的常用方法 111
4.3 pd.DataFrame——数据框 123
4.3.1 创建数据框 123
4.3.2 pd.DataFrame的时间索引 125
4.3.3 读取CSV文件 125
4.3.4 pd.DataFrame的算术运算 128
4.3.5 提取满足条件的行 130
4.3.6 pd.DataFrame的常用属性 132
4.3.7 pd.DataFrame的常用方法 137
4.4 pandas的常用函数 156
4.4.1 to_numeric()——将序列转换为数值类型 156
4.4.2 to_datetime()——将序列转换为时间戳类型 157
4.4.3 to_timedelta()——将序列转换为时间差类型 158
4.4.4 date_range()——生成时间序列 159
4.4.5 merge()——按值连接两个pd.DataFrame 160
4.4.6 concat()——合并多个pd.DataFrame 162
第5章 栅格数据处理 163
5.1 xarray与气象栅格数据处理 163
5.1.1 xarray的安装 163
5.1.2 xarray基础知识 163
5.1.3 数据数组 164
5.1.4 数据集 169
5.1.5 数据数组与数据集的处理 173
5.2 MetPy入门 188
5.2.1 MetPy的安装 188
5.2.2 MetPy的单位制 188
5.2.3 MetPy的常用常数 190
第6章 常用气象数据读取和预处理 192
6.1 文本文件 192
6.1.1 什么是文件字符编码 192
6.1.2 CSV文件 194
6.1.3 空格(制表符)作为分隔符的文件 196
6.2 Excel文件 199
6.3 NetCDF文件 200
6.4 GRIB文件 201
6.4.1 使用PyNIO 201
6.4.2 使用cfgrib 203
6.5 GrADS二进制文件 205
6.5.1 站点数据 205
6.5.2 栅格数据 206
6.6 WRF-ARW输出文件 208
6.7 雷达基数据文件 211
6.8 CIMISS的使用 212
第7章 气象数据插值 213
7.1 空间插值 213
7.1.1 从站点到栅格 213
7.1.2 从栅格到站点 217
7.1.3 从栅格到栅格 219
7.2 时间插值 219
7.2.1 站点时间内插 220
7.2.2 栅格时间内插 221
第8章 Python绘图基础 222
8.1 Matplotlib与cartopy基础知识 223
8.1.1 绘图结构 223
8.1.2 Figure、Axes与GeoAxes 226
8.2 地理绘图基础 237
8.2.1 shapefile/GeoJSON数据读取 237
8.2.2 在GeoAxes上绘制 237
8.2.3 几何数据筛选示例 238
8.2.4 多边形合并 240
8.3 颜色表(colormap) 241
8.3.1 Matplotlib的内置色标 241
8.3.2 MetPy库的内置色标 241
8.3.3 创建自定义色标 242
8.4 图像显示与保存 246
8.4.1 图像显示 246
8.4.2 图像保存 247
第9章 基本绘图类型与气象绘图 248
9.1 折线图 248
9.1.1 基本折线图 250
9.1.2 多折线图 251
9.1.3 多y轴折线图 252
9.1.4 非等比坐标轴图 254
9.2 散点图 256
9.2.1 基础散点图 257
9.2.2 带有地图投影的散点图 257
9.3 柱状图 259
9.3.1 单变量柱状图 260
9.3.2 多变量柱状图 261
9.4 箱线图 263
9.5 等值线图 265
9.5.1 基本等值线图 266
9.5.2 带有地图投影的等值线图 269
9.5.3 垂直剖面等值线图 270
9.6 填色图 272
9.6.1 contourf() 272
9.6.2 pcolor() 275
9.7 轨迹绘制(以台风路径的绘制为例) 278
9.8 流线图 281
9.9 矢量箭头图 283
9.10 风向杆图 288
9.11 探空图 289
9.12 泰勒图 291
第 10章 常用气象物理量计算 293
10.1 干空气热力学(dry thermodynamics)物理量 293
10.1.1 高于给定气压水平的某高度的气压 293
10.1.2 高于给定高度一定气压的高度 293
10.1.3 空气密度 294
10.1.4 干静力能 294
10.1.5 位势与海拔高度的相互转换 294
10.1.6 位温 295
10.1.7 利用Sigma值计算气压 295
10.1.8 垂直剖面的静力稳定度 295
10.2 湿热力学(moist thermodynamics)物理量 296
10.2.1 露点温度 296
10.2.2 相当位温 297
10.2.3 气体混合比 297
10.2.4 湿静力能 298
10.2.5 可降水量 298
10.2.6 相对湿度 298
10.2.7 饱和水汽压 299
10.2.8 比湿 299
10.2.9 某层的厚度 300
10.2.10 虚位温 300
10.2.11 虚温 301
10.2.12 湿球温度 301
10.3 动力学(dynamics/kinetics)物理量 301
10.3.1 绝对涡度 301
10.3.2 平流 302
10.3.3 非地转风(地转偏差) 302
10.3.4 科里奥利参数 302
10.3.5 散度 302
10.3.6 温度场的二维运动学锋生函数 303
10.3.7 地转风 303
10.3.8 斜压位涡 304
10.3.9 正压位涡 304
10.3.10 水平风的剪切变形 305
10.3.11 水平风的拉伸变形 305
10.3.12 水平风的水平总变形 305
10.3.13 水平风的垂直涡度 306
10.3.14 利用u、v分量计算风速(场) 306
10.4 气象领域常用的数学计算方法 306
10.4.1 切向量与法向量 306
10.4.2 一阶导数 307
10.4.3 梯度 307
10.4.4 水平增量 307
10.4.5 拉普拉斯算子 308
10.4.6 二阶导数 308
第 11章 常用气象统计方法与检验 309
11.1 基本气候状态统计量 309
11.1.1 中心趋势统计量 309
11.1.2 变化幅度统计量 311
11.1.3 相关统计量 312
11.1.4 数据标准化 317
11.2 气候变化趋势分析 318
11.2.1 拟合 318
11.2.2 滑动平均 319
11.2.3 去趋势 321
11.2.4 滤波 323
11.3 气候序列突变检验 325
11.3.1 滑动t检验 325
11.3.2 曼-肯德尔法 327
11.4 气候变量场时空结构的分离(经验正交函数分解) 329
第 12章 机器学习初探 333
12.1 什么是机器学习 333
12.2 传统机器学习 333
12.2.1 安装 333
12.2.2 示例数据集 334
12.2.3 自己的数据 334
12.2.4 数据预处理 335
12.2.5 分割数据集 335
12.2.6 使用内建算法进行学习 335
12.2.7 使用其他指标评估模型 336
12.2.8 使用模型进行预测 337
12.2.9 保存/载入训练好的模型 337
12.3 深度学习框架 337
12.3.1 安装 338
12.3.2 使用 338
第 13章 计算加速与Fortran绑定 343
13.1 原生代码优化 343
13.1.1 将代码向量化 343
13.1.2 使用Numba对循环加速 345
13.2 独立语言绑定 346
13.2.1 Cython 346
13.2.2 Fortran 349