Python 氣象應用編程

楊效業 楊青霖 張詩悅

  • Python 氣象應用編程-preview-1
  • Python 氣象應用編程-preview-2
Python 氣象應用編程-preview-1

買這商品的人也買了...

商品描述

Python語言憑借其簡潔、易讀及可擴展性等特點,已成為程序設計領域備受歡迎的語言之一。豐富的Python第三方包(又稱“第三方庫”)使得Python可以應用於多個領域,氣象研究與應用領域也不例外。由NCL轉化來的庫很大程度地方便了讀者的學習。

本書內容由淺入深且針對性強,示例豐富且涉及面廣,系統地介紹Python語言的基本語法、高級特徵以及與氣象應用密切相關的工具包。本書從Python和Linux的基礎知識開始講解,無編程基礎或需鞏固基礎的讀者也能閱讀;然後介紹氣象數據的讀取、處理等;接著介紹繪圖基礎知識與常用的氣象繪圖方案;繼而介紹一些常用氣象物理量計算以及統計方法與檢驗等;最後介紹簡易機器學習入門和幾種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