Python語言憑借其簡潔、易讀及可擴(kuò)展性等特點(diǎn),已成為程序設(shè)計(jì)領(lǐng)域備受歡迎的語言之一。豐富的Python第三方包(又稱“第三方庫”)使得Python可以應(yīng)用于多個(gè)領(lǐng)域,氣象研究與應(yīng)用領(lǐng)域也不例外。由NCL轉(zhuǎn)化來的庫很大程度地方便了讀者的學(xué)習(xí)。
本書內(nèi)容由淺入深且針對(duì)性強(qiáng),示例豐富且涉及面廣,系統(tǒng)地介紹Python語言的基本語法、高級(jí)特征以及與氣象應(yīng)用密切相關(guān)的工具包。本書從Python和Linux的基礎(chǔ)知識(shí)開始講解,無編程基礎(chǔ)或需鞏固基礎(chǔ)的讀者也能閱讀;然后介紹氣象數(shù)據(jù)的讀取、處理等;接著介紹繪圖基礎(chǔ)知識(shí)與常用的氣象繪圖方案;繼而介紹一些常用氣象物理量計(jì)算以及統(tǒng)計(jì)方法與檢驗(yàn)等;最后介紹簡易機(jī)器學(xué)習(xí)入門和幾種Python計(jì)算加速方案。
隨著科技的發(fā)展,氣象學(xué)的相關(guān)研究對(duì)從業(yè)人員提出了更高的計(jì)算機(jī)編程要求,氣象與計(jì)算機(jī)技術(shù)的深度融合成為發(fā)展的趨勢(shì)。
本書關(guān)注Python在氣象數(shù)據(jù)處理與可視化方面的應(yīng)用,循序漸進(jìn)地介紹Python基礎(chǔ)應(yīng)用,內(nèi)容涵蓋了NumPy、pandas、xarray、SciPy、Metpy、Matplotlib等常用于氣象領(lǐng)域的模塊的具體用法。本書提供了大量淺顯易懂的與氣象相關(guān)的示例,涵蓋多種常見應(yīng)用場(chǎng)景,極大地降低了讀者的學(xué)習(xí)成本。
通過閱讀本書,讀者可以在較短時(shí)間內(nèi)掌握Python在氣象數(shù)據(jù)處理與可視化中的常用編程技能。
楊效業(yè),南京信息工程大學(xué)氣象學(xué)博士在讀,氣象專業(yè)微信公眾號(hào)“氣海無涯”聯(lián)合創(chuàng)始人,利用Python語言進(jìn)行氣象數(shù)據(jù)處理及可視化,并發(fā)表專業(yè)論文二十余篇,在氣象家園、簡書、嗶哩嗶哩等平臺(tái)發(fā)布的Python氣象編程系列教程受到廣泛好評(píng)。
楊青霖,2019年畢業(yè)于南京信息工程大學(xué)大氣科學(xué)專業(yè)。2016年起將Python作為主要工具來進(jìn)行氣象數(shù)據(jù)處理及可視化,致力于代碼工程化。曾任某知名氣象公司任Python工程師,現(xiàn)就職于百度網(wǎng)絡(luò)科技公司。
張?jiān)姁偅暇┬畔⒐こ檀髮W(xué)氣象學(xué)博士在讀,主要研究方向?yàn)闅夂蜃兓瘜?duì)大氣污染的影響,以Python為主要語言進(jìn)行數(shù)據(jù)處理及可視化,并發(fā)表多篇SCI論文。
第 1章 認(rèn)識(shí)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 設(shè)置conda與pip鏡像源 9
1.2.3 conda環(huán)境 10
1.3 Linux與Bash 12
1.3.1 Linux發(fā)行版 12
1.3.2 目錄結(jié)構(gòu) 12
1.3.3 用戶與用戶組 13
1.3.4 目錄權(quán)限管理 14
1.3.5 遠(yuǎn)程登錄 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 編輯體驗(yàn) 21
1.5.1 交互式筆記本——Jupyter 21
1.5.2 工程型開發(fā)環(huán)境工具 30
第 2章 Python語言基礎(chǔ) 33
2.1 變量 33
2.2 原生數(shù)據(jù)類型 36
2.2.1 數(shù)值 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 循環(huán)和迭代 55
2.4.1 循環(huán) 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 函數(shù) 64
2.7.1 定義函數(shù) 64
2.7.2 函數(shù)的參數(shù) 66
2.7.3 匿名函數(shù) 69
2.7.4 閉包與裝飾器 70
2.7.5 高階函數(shù) 73
2.8 面向?qū)ο蠡A(chǔ) 74
2.8.1 什么是對(duì)象 74
2.8.2 類和繼承 75
第3章 NumPy:Python數(shù)值計(jì)算之源 80
3.1 安裝 80
3.2 多維數(shù)組和列表 81
3.3 多維數(shù)組的特征 81
3.3.1 數(shù)據(jù)類型 81
3.3.2 軸與維度 82
3.4 創(chuàng)建多維數(shù)組 83
3.4.1 np.array()——直接創(chuàng)建 83
3.4.2 np.zeros()——根據(jù)shape參數(shù)創(chuàng)建數(shù)組 84
3.4.3 np.arange()——根據(jù)起點(diǎn)、終點(diǎn)和步長創(chuàng)建 84
3.4.4 np.linspace()——根據(jù)起點(diǎn)、終點(diǎn)和元素?cái)?shù)量創(chuàng)建 85
3.4.5 np.random.randn()——生成符合標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)多維數(shù)組 85
3.5 數(shù)組間運(yùn)算和廣播運(yùn)算 85
3.6 多維數(shù)組的索引和切片 88
3.6.1 普通索引和切片 88
3.6.2 高級(jí)索引 89
3.7 多維數(shù)組對(duì)象的方法 90
3.7.1 reshape()——改變數(shù)組形狀 90
3.7.2 transpose()——交換軸 92
3.7.3 mean()——計(jì)算平均值 92
3.7.4 sum()——計(jì)算元素和 93
3.7.5 std()——計(jì)算標(biāo)準(zhǔn)差 94
3.7.6 min()——取最小值/max()——取最大值 94
3.7.7 round()——進(jìn)行四舍五入 95
3.7.8 dot()——執(zhí)行向量/矩陣乘法 95
3.7.9 astype()——轉(zhuǎn)換數(shù)值類型 96
3.8 NumPy的常用函數(shù) 97
3.8.1 數(shù)學(xué)計(jì)算函數(shù) 97
3.8.2 三角函數(shù) 97
3.8.3 浮點(diǎn)函數(shù) 98
3.8.4 非通用函數(shù) 98
3.9 NumPy中的常量 99
3.10 文件讀寫 99
3.10.1 文本格式文件的讀取 99
3.10.2 文本格式文件的寫入 101
3.10.3 順序二進(jìn)制文件的讀寫 102
第4章 pandas:優(yōu)秀的數(shù)據(jù)分析工具 104
4.1 安裝 104
4.2 pd.Series——序列 104
4.2.1 創(chuàng)建序列 105
4.2.2 時(shí)間索引 106
4.2.3 pd.Series對(duì)象的算術(shù)運(yùn)算 107
4.2.4 pd.Series對(duì)象的常用屬性 108
4.2.5 pd.Series對(duì)象的常用方法 111
4.3 pd.DataFrame——數(shù)據(jù)框 123
4.3.1 創(chuàng)建數(shù)據(jù)框 123
4.3.2 pd.DataFrame的時(shí)間索引 125
4.3.3 讀取CSV文件 125
4.3.4 pd.DataFrame的算術(shù)運(yùn)算 128
4.3.5 提取滿足條件的行 130
4.3.6 pd.DataFrame的常用屬性 132
4.3.7 pd.DataFrame的常用方法 137
4.4 pandas的常用函數(shù) 156
4.4.1 to_numeric()——將序列轉(zhuǎn)換為數(shù)值類型 156
4.4.2 to_datetime()——將序列轉(zhuǎn)換為時(shí)間戳類型 157
4.4.3 to_timedelta()——將序列轉(zhuǎn)換為時(shí)間差類型 158
4.4.4 date_range()——生成時(shí)間序列 159
4.4.5 merge()——按值連接兩個(gè)pd.DataFrame 160
4.4.6 concat()——合并多個(gè)pd.DataFrame 162
第5章 柵格數(shù)據(jù)處理 163
5.1 xarray與氣象柵格數(shù)據(jù)處理 163
5.1.1 xarray的安裝 163
5.1.2 xarray基礎(chǔ)知識(shí) 163
5.1.3 數(shù)據(jù)數(shù)組 164
5.1.4 數(shù)據(jù)集 169
5.1.5 數(shù)據(jù)數(shù)組與數(shù)據(jù)集的處理 173
5.2 MetPy入門 188
5.2.1 MetPy的安裝 188
5.2.2 MetPy的單位制 188
5.2.3 MetPy的常用常數(shù) 190
第6章 常用氣象數(shù)據(jù)讀取和預(yù)處理 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二進(jìn)制文件 205
6.5.1 站點(diǎn)數(shù)據(jù) 205
6.5.2 柵格數(shù)據(jù) 206
6.6 WRF-ARW輸出文件 208
6.7 雷達(dá)基數(shù)據(jù)文件 211
6.8 CIMISS的使用 212
第7章 氣象數(shù)據(jù)插值 213
7.1 空間插值 213
7.1.1 從站點(diǎn)到柵格 213
7.1.2 從柵格到站點(diǎn) 217
7.1.3 從柵格到柵格 219
7.2 時(shí)間插值 219
7.2.1 站點(diǎn)時(shí)間內(nèi)插 220
7.2.2 柵格時(shí)間內(nèi)插 221
第8章 Python繪圖基礎(chǔ) 222
8.1 Matplotlib與cartopy基礎(chǔ)知識(shí) 223
8.1.1 繪圖結(jié)構(gòu) 223
8.1.2 Figure、Axes與GeoAxes 226
8.2 地理繪圖基礎(chǔ) 237
8.2.1 shapefile/GeoJSON數(shù)據(jù)讀取 237
8.2.2 在GeoAxes上繪制 237
8.2.3 幾何數(shù)據(jù)篩選示例 238
8.2.4 多邊形合并 240
8.3 顏色表(colormap) 241
8.3.1 Matplotlib的內(nèi)置色標(biāo) 241
8.3.2 MetPy庫的內(nèi)置色標(biāo) 241
8.3.3 創(chuàng)建自定義色標(biāo) 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 非等比坐標(biāo)軸圖 254
9.2 散點(diǎn)圖 256
9.2.1 基礎(chǔ)散點(diǎn)圖 257
9.2.2 帶有地圖投影的散點(diǎn)圖 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 軌跡繪制(以臺(tái)風(fēng)路徑的繪制為例) 278
9.8 流線圖 281
9.9 矢量箭頭圖 283
9.10 風(fēng)向桿圖 288
9.11 探空?qǐng)D 289
9.12 泰勒?qǐng)D 291
第 10章 常用氣象物理量計(jì)算 293
10.1 干空氣熱力學(xué)(dry thermodynamics)物理量 293
10.1.1 高于給定氣壓水平的某高度的氣壓 293
10.1.2 高于給定高度一定氣壓的高度 293
10.1.3 空氣密度 294
10.1.4 干靜力能 294
10.1.5 位勢(shì)與海拔高度的相互轉(zhuǎn)換 294
10.1.6 位溫 295
10.1.7 利用Sigma值計(jì)算氣壓 295
10.1.8 垂直剖面的靜力穩(wěn)定度 295
10.2 濕熱力學(xué)(moist thermodynamics)物理量 296
10.2.1 露點(diǎn)溫度 296
10.2.2 相當(dāng)位溫 297
10.2.3 氣體混合比 297
10.2.4 濕靜力能 298
10.2.5 可降水量 298
10.2.6 相對(duì)濕度 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 動(dòng)力學(xué)(dynamics/kinetics)物理量 301
10.3.1 絕對(duì)渦度 301
10.3.2 平流 302
10.3.3 非地轉(zhuǎn)風(fēng)(地轉(zhuǎn)偏差) 302
10.3.4 科里奧利參數(shù) 302
10.3.5 散度 302
10.3.6 溫度場(chǎng)的二維運(yùn)動(dòng)學(xué)鋒生函數(shù) 303
10.3.7 地轉(zhuǎn)風(fēng) 303
10.3.8 斜壓位渦 304
10.3.9 正壓位渦 304
10.3.10 水平風(fēng)的剪切變形 305
10.3.11 水平風(fēng)的拉伸變形 305
10.3.12 水平風(fēng)的水平總變形 305
10.3.13 水平風(fēng)的垂直渦度 306
10.3.14 利用u、v分量計(jì)算風(fēng)速(場(chǎng)) 306
10.4 氣象領(lǐng)域常用的數(shù)學(xué)計(jì)算方法 306
10.4.1 切向量與法向量 306
10.4.2 一階導(dǎo)數(shù) 307
10.4.3 梯度 307
10.4.4 水平增量 307
10.4.5 拉普拉斯算子 308
10.4.6 二階導(dǎo)數(shù) 308
第 11章 常用氣象統(tǒng)計(jì)方法與檢驗(yàn) 309
11.1 基本氣候狀態(tài)統(tǒng)計(jì)量 309
11.1.1 中心趨勢(shì)統(tǒng)計(jì)量 309
11.1.2 變化幅度統(tǒng)計(jì)量 311
11.1.3 相關(guān)統(tǒng)計(jì)量 312
11.1.4 數(shù)據(jù)標(biāo)準(zhǔn)化 317
11.2 氣候變化趨勢(shì)分析 318
11.2.1 擬合 318
11.2.2 滑動(dòng)平均 319
11.2.3 去趨勢(shì) 321
11.2.4 濾波 323
11.3 氣候序列突變檢驗(yàn) 325
11.3.1 滑動(dòng)t檢驗(yàn) 325
11.3.2 曼-肯德爾法 327
11.4 氣候變量場(chǎng)時(shí)空結(jié)構(gòu)的分離(經(jīng)驗(yàn)正交函數(shù)分解) 329
第 12章 機(jī)器學(xué)習(xí)初探 333
12.1 什么是機(jī)器學(xué)習(xí) 333
12.2 傳統(tǒng)機(jī)器學(xué)習(xí) 333
12.2.1 安裝 333
12.2.2 示例數(shù)據(jù)集 334
12.2.3 自己的數(shù)據(jù) 334
12.2.4 數(shù)據(jù)預(yù)處理 335
12.2.5 分割數(shù)據(jù)集 335
12.2.6 使用內(nèi)建算法進(jìn)行學(xué)習(xí) 335
12.2.7 使用其他指標(biāo)評(píng)估模型 336
12.2.8 使用模型進(jìn)行預(yù)測(cè) 337
12.2.9 保存/載入訓(xùn)練好的模型 337
12.3 深度學(xué)習(xí)框架 337
12.3.1 安裝 338
12.3.2 使用 338
第 13章 計(jì)算加速與Fortran綁定 343
13.1 原生代碼優(yōu)化 343
13.1.1 將代碼向量化 343
13.1.2 使用Numba對(duì)循環(huán)加速 345
13.2 獨(dú)立語言綁定 346
13.2.1 Cython 346
13.2.2 Fortran 349