Python語言憑借其簡潔、易讀及可擴展性等特點,已成為程序設(shè)計領(lǐng)域備受歡迎的語言之一。豐富的Python第三方包(又稱“第三方庫”)使得Python可以應(yīng)用于多個領(lǐng)域,氣象研究與應(yīng)用領(lǐng)域也不例外。由NCL轉(zhuǎn)化來的庫很大程度地方便了讀者的學(xué)習(xí)。
本書內(nèi)容由淺入深且針對性強,示例豐富且涉及面廣,系統(tǒng)地介紹Python語言的基本語法、高級特征以及與氣象應(yīng)用密切相關(guān)的工具包。本書從Python和Linux的基礎(chǔ)知識開始講解,無編程基礎(chǔ)或需鞏固基礎(chǔ)的讀者也能閱讀;然后介紹氣象數(shù)據(jù)的讀取、處理等;接著介紹繪圖基礎(chǔ)知識與常用的氣象繪圖方案;繼而介紹一些常用氣象物理量計算以及統(tǒng)計方法與檢驗等;最后介紹簡易機器學(xué)習(xí)入門和幾種Python計算加速方案。
隨著科技的發(fā)展,氣象學(xué)的相關(guān)研究對從業(yè)人員提出了更高的計算機編程要求,氣象與計算機技術(shù)的深度融合成為發(fā)展的趨勢。
本書關(guān)注Python在氣象數(shù)據(jù)處理與可視化方面的應(yīng)用,循序漸進地介紹Python基礎(chǔ)應(yīng)用,內(nèi)容涵蓋了NumPy、pandas、xarray、SciPy、Metpy、Matplotlib等常用于氣象領(lǐng)域的模塊的具體用法。本書提供了大量淺顯易懂的與氣象相關(guān)的示例,涵蓋多種常見應(yīng)用場景,極大地降低了讀者的學(xué)習(xí)成本。
通過閱讀本書,讀者可以在較短時間內(nèi)掌握Python在氣象數(shù)據(jù)處理與可視化中的常用編程技能。
楊效業(yè),南京信息工程大學(xué)氣象學(xué)博士在讀,氣象專業(yè)微信公眾號“氣海無涯”聯(lián)合創(chuàng)始人,利用Python語言進行氣象數(shù)據(jù)處理及可視化,并發(fā)表專業(yè)論文二十余篇,在氣象家園、簡書、嗶哩嗶哩等平臺發(fā)布的Python氣象編程系列教程受到廣泛好評。
楊青霖,2019年畢業(yè)于南京信息工程大學(xué)大氣科學(xué)專業(yè)。2016年起將Python作為主要工具來進行氣象數(shù)據(jù)處理及可視化,致力于代碼工程化。曾任某知名氣象公司任Python工程師,現(xiàn)就職于百度網(wǎng)絡(luò)科技公司。
張詩悅,南京信息工程大學(xué)氣象學(xué)博士在讀,主要研究方向為氣候變化對大氣污染的影響,以Python為主要語言進行數(shù)據(jù)處理及可視化,并發(fā)表多篇SCI論文。
第 1章 認(rèn)識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 遠程登錄 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 工程型開發(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 什么是對象 74
2.8.2 類和繼承 75
第3章 NumPy:Python數(shù)值計算之源 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ù)起點、終點和步長創(chuàng)建 84
3.4.4 np.linspace()——根據(jù)起點、終點和元素數(shù)量創(chuàng)建 85
3.4.5 np.random.randn()——生成符合標(biāo)準(zhǔn)正態(tài)分布的隨機多維數(shù)組 85
3.5 數(shù)組間運算和廣播運算 85
3.6 多維數(shù)組的索引和切片 88
3.6.1 普通索引和切片 88
3.6.2 高級索引 89
3.7 多維數(shù)組對象的方法 90
3.7.1 reshape()——改變數(shù)組形狀 90
3.7.2 transpose()——交換軸 92
3.7.3 mean()——計算平均值 92
3.7.4 sum()——計算元素和 93
3.7.5 std()——計算標(biāo)準(zhǔn)差 94
3.7.6 min()——取最小值/max()——取最大值 94
3.7.7 round()——進行四舍五入 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é)計算函數(shù) 97
3.8.2 三角函數(shù) 97
3.8.3 浮點函數(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 順序二進制文件的讀寫 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 時間索引 106
4.2.3 pd.Series對象的算術(shù)運算 107
4.2.4 pd.Series對象的常用屬性 108
4.2.5 pd.Series對象的常用方法 111
4.3 pd.DataFrame——數(shù)據(jù)框 123
4.3.1 創(chuàng)建數(shù)據(jù)框 123
4.3.2 pd.DataFrame的時間索引 125
4.3.3 讀取CSV文件 125
4.3.4 pd.DataFrame的算術(shù)運算 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)換為時間戳類型 157
4.4.3 to_timedelta()——將序列轉(zhuǎn)換為時間差類型 158
4.4.4 date_range()——生成時間序列 159
4.4.5 merge()——按值連接兩個pd.DataFrame 160
4.4.6 concat()——合并多個pd.DataFrame 162
第5章 柵格數(shù)據(jù)處理 163
5.1 xarray與氣象柵格數(shù)據(jù)處理 163
5.1.1 xarray的安裝 163
5.1.2 xarray基礎(chǔ)知識 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二進制文件 205
6.5.1 站點數(shù)據(jù) 205
6.5.2 柵格數(shù)據(jù) 206
6.6 WRF-ARW輸出文件 208
6.7 雷達基數(shù)據(jù)文件 211
6.8 CIMISS的使用 212
第7章 氣象數(shù)據(jù)插值 213
7.1 空間插值 213
7.1.1 從站點到柵格 213
7.1.2 從柵格到站點 217
7.1.3 從柵格到柵格 219
7.2 時間插值 219
7.2.1 站點時間內(nèi)插 220
7.2.2 柵格時間內(nèi)插 221
第8章 Python繪圖基礎(chǔ) 222
8.1 Matplotlib與cartopy基礎(chǔ)知識 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 散點圖 256
9.2.1 基礎(chǔ)散點圖 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 軌跡繪制(以臺風(fēng)路徑的繪制為例) 278
9.8 流線圖 281
9.9 矢量箭頭圖 283
9.10 風(fēng)向桿圖 288
9.11 探空圖 289
9.12 泰勒圖 291
第 10章 常用氣象物理量計算 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 位勢與海拔高度的相互轉(zhuǎn)換 294
10.1.6 位溫 295
10.1.7 利用Sigma值計算氣壓 295
10.1.8 垂直剖面的靜力穩(wěn)定度 295
10.2 濕熱力學(xué)(moist thermodynamics)物理量 296
10.2.1 露點溫度 296
10.2.2 相當(dāng)位溫 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 動力學(xué)(dynamics/kinetics)物理量 301
10.3.1 絕對渦度 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 溫度場的二維運動學(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分量計算風(fēng)速(場) 306
10.4 氣象領(lǐng)域常用的數(shù)學(xué)計算方法 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)計方法與檢驗 309
11.1 基本氣候狀態(tài)統(tǒng)計量 309
11.1.1 中心趨勢統(tǒng)計量 309
11.1.2 變化幅度統(tǒng)計量 311
11.1.3 相關(guān)統(tǒng)計量 312
11.1.4 數(shù)據(jù)標(biāo)準(zhǔn)化 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 氣候變量場時空結(jié)構(gòu)的分離(經(jīng)驗正交函數(shù)分解) 329
第 12章 機器學(xué)習(xí)初探 333
12.1 什么是機器學(xué)習(xí) 333
12.2 傳統(tǒng)機器學(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)建算法進行學(xué)習(xí) 335
12.2.7 使用其他指標(biāo)評估模型 336
12.2.8 使用模型進行預(yù)測 337
12.2.9 保存/載入訓(xùn)練好的模型 337
12.3 深度學(xué)習(xí)框架 337
12.3.1 安裝 338
12.3.2 使用 338
第 13章 計算加速與Fortran綁定 343
13.1 原生代碼優(yōu)化 343
13.1.1 將代碼向量化 343
13.1.2 使用Numba對循環(huán)加速 345
13.2 獨立語言綁定 346
13.2.1 Cython 346
13.2.2 Fortran 349