背向NCL,面向對象

作爲曾經地球科學領域最炙手可熱腳本語言之一的NCL已經進入維護模式,不再更新。NCAR將使用Python作爲地球科學領域的主要數據處理和可視化工具。
NCAR對NCL進行了“封裝”,構成了PyNGL和PyNIO,隨後可能還會開發一款工具,囊括NCL中大多數函數。PyNGL和PyNIO中的函數和繪圖方式與NCL是非常類似的,可以非常順暢的從NCL轉到Python。
但遺憾的是PyNGL和PyNIO仍不支持Windows系統(除了Win10的 Linux子系統外)。既然已經從NCL轉到Python了,那麼爲什麼一定要執着於PyNGL和PyNIO呢,今天就拋開PyNGL和PyNIO,介紹Python中其他常用庫,實現真正的跨平臺切換。

數據處理

•NetCDF格式 : netCDF4-python,h5py,h5netcdf,xarray等。
除了上述簡單的數據處理庫之外,python還提供了NCO和CDO工具的封裝,pynco和cdo,提供了更多的便捷操作。

•Grib格式:xarray,Iris,pygrib等,有些僅支持類Unix系統。
ECWMF提供了cfgrib工具可將grib格式轉換爲NetCDF格式,cfgrib庫支持Mac,Linux和windows系統。

•csv, xlsx等格式:pandas你值得擁有,無論是氣象還是其他領域的類似格式數據,使用pandas可以解決你的常用操作。

•HDF格式:pandas和h5py可以處理hdf5格式,PyHDF可以處理hdf4格式。

•二進制:numpy可以處理二進制數據,同時藉助python內置struct模塊可以非常方便的處理二進制格式數據。

上述介紹的一些庫,很多僅支持簡單的數據讀取和寫入操作,不支持更多計算操作。如果要對空間數據進行插值,可能就無法滿足了。

數據插值

•xESMF和ESMPy:氣象數據空間插值,尤其是對於模式網格數據而言,提供了一些便捷的命令可對網格數據進行一些列插值操作

•python-stratify:針對大氣和海洋數據進行垂直插值

•scipy.interpolate:模塊提供了大量插值函數

•python-geotiepoints:針對地理網格數據的空間插值

說到地球科學領域的數據處理,最離不開的應該也是模式輸出數據了。Python中有很多處理模式輸出的庫,功能都比較完善。

模式輸出處理

•wrf-python:對於使用WRF模式的來說使用最爲頻繁的模式輸出後處理工具之一。

•salem:這個庫包含了數據處理和可視化幾乎所有功能,就放這裏吧,畢竟也提供了不少WRF模式後處理和前處理的函數。

•CESM_postprocessing:針對CESM地球模式的後處理工具

•CAMxTools:提供了CAMx和CMAQ模型的前處理和後處理功能

•PseudoNetCDF:類似處理NetCDF的工具,可用於處理CMAQ等模式輸出結果

•MONET:模式和觀測評估工具,然而我非常喜歡的一款類似工具還沒有python版==

雷達和衛星數據處理

•PyART,wradlib可用於處理國外常見格式的雷達數據。改進後的PyART[1]和PyART[2]提供國內常用的S波段雷達數據處理方式,還有這個PyCINRAD[3]。此外,Python中還提供了不少雷達數據處理和反演庫。

•satpy,PyCAMA,pys5p,pyresample等庫可處理常見的衛星數據
說到數據處理,當然少不了Micaps的多種數據格式了,下面介紹一款國內大神基於Python開發的Micaps數據處理和可視化庫:

Micaps數據處理

•PyMICAPS:PyMICAPS[4]是由國內某氣象局一位大神開源的Micaps輸出處理和可視化工具(發佈在知名同性交友平臺–Github),功能相對齊全,而且也在不斷完善。感興趣的可以下載使用,並反饋意見,幫助持續完善(打個廣告~~)。

數據處理完成之後,當然是要進一步進行分析,python中提供了相當多的分析工具,以下僅列出一小部分:

數據分析

•EOFS:Python EOF分析庫
•statsmodels:Python統計分析庫,提供了大量的統計分析函數
•scikit-learn:Python中較爲熱門的機器學習庫,其中也提供了相當多的統計學方法
•metpy,sharppy,atmos等庫可計算大氣科學領域常用的一些參數,其中metpy還提供了一些可視化和數據處理函數。
數據處理完成後,當然也要畫圖看一下了,要不然怎麼發paper呢?<手動狗頭>

數據可視化

•matplotlib:matplotlib可以說是python中最爲基礎的繪圖庫了

•seaborn:針對統計分析的可視化庫

•Basemap和Cartopy:針對地理信息的可視化庫

•EarthSim:針對環境模擬(比如水文氣象等)的後處理可視化工具,包含了交互式可視化。

•calmap:可以繪製日曆圖
除了上面列出來的之外,還有很多繪圖工具,不再贅述。當然還有一些庫不知道該怎麼分類,因爲分析畫圖的時候會用到,就放到這邊吧:

•geopandas:地理空間數據處理和可視化神器
•pyshp,fiona等可處理常規的shapefile文件,常在畫圖的時候添加海岸線和邊界線使用
上述介紹的可視化庫大多是非交互式可視化庫,關於Python中更多的可視化庫分類,見Python可視化工具概覽

畫圖當然少不了配色,以下介紹一些Python中的配色庫:
•cmocean:海洋科學領域的配色庫,除了python版之外,還有matlab及其他版本

•colorcet,palettable,colour:提供了很多可選的colormap

•colormap:提供了一些顏色轉換基礎操作和創建colormap的函數

•cmaps:提供了NCL中所有的colormap
除了上面提到的之外,Python中還有很多可用的庫,比如網絡數據獲取requests和bs4等,而且很多國外很多機構都提供了python版的獲取數據的API接口工具。

機器學習

•sklearn:前面已經介紹,可以用這個框架完成常用的機器學習流程,從數據預處理,特徵工程,建模到評估,非常方便,但不支持深度學習的模型。

•TensorFlow:大家都耳熟能詳的深度學習框架,是Google brain 開發和維護的,在工業界和學術界都有廣泛的使用。

•Pytorch:與TensorFlow相比,Pytorch更加方便實現簡單靈活的實驗,它的前身是Torch,用的是lua語言,從Torch到Pytorch可以看成是lua到python的遷移。

•Keras:是建立在 Tensorflow 和 Theano 之上的更高級的 封裝,非常容易上手,適合進行簡單的試驗。具體可以看鐵柱同學的系列文章。

•XGBoost:被稱爲機器學習大殺器的XGBoost(eXtreme Gradient Boosting),想必大家都有所耳聞,很多比賽的top solutions大多數都用了這個算法。

•lightgbm:微軟推出的gbm算法模型,更加輕量,一些測試表明其可以實現類似xgboost的效果,但是可以極大節約時間成本。

•CatBoost:CatBoost是Yandex在17年開源的機器學習框架,對類別特徵支持較好,可以理解爲基於類別特徵優化的GBM算法。

•Hyperopt:強大的調參庫,支持貝葉斯優化。

上面僅對僅列出了一些氣象或者機器學習常用庫,當然還有很多庫有待挖掘。當你有一個想法的時候,可以在Google或者Github搜索一下,說不定Python就能滿足你呢!

References
[1] PyART: https://github.com/bugsuse/pyart
[2] PyART: https://github.com/zxdawn/pyart
[3] PyCINRAD: https://github.com/CyanideCN/PyCINRAD
[4] PyMICAPS: https://github.com/flashlxy/PyMICAPS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章