A. 如何使用python訪問ECMWF公共數據集
1.安裝ECMWF KEY
如果您沒有帳戶,請通過https //apps.ecmwf.int/registration/ 進行自我注冊,然後轉到以下步驟。
登錄https //apps.ecmwf.int/auth/login/
通過https //api.ecmwf.int/v1/key/ 獲取密鑰
請注意,該密鑰在1年內到期。您將在到期日期前1個月收到注冊電子郵件地址的電子郵件,並附上續訂說明。要查看當前密鑰登錄的到期日期,請訪問www.ecmwf.int
復制此頁面中的信息,並將其粘貼到文件$ HOME / .ecmwfapirc(Unix / Linux)或%USERPROFILE% .ecmwfapirc(Windows;
如何創建前導點文件?
重命名
創建file.txt
重命名.file.,最後一個點將被刪除,你就得到.file
這里我們需要 創建 .ecmwfapirc 文件 ,並將下面內容拷貝進去
上面的文件放在 %USERPROFILE%下,這里這個路徑可以在用戶變數中找到,本人電腦用戶名為Cronous 路徑為C:UsersCronous
所以將.ecmwfapirc 放在上面路徑下面
$ HOME / .ecmwfapirc(Unix / Linux)或%USERPROFILE%。ecmwfapirc(Windows)的內容
{2.安裝客戶端庫
該版本的庫提供對Python 2.7.x和Python 3的支持。
您可以ecmwfapi通過在Unix / Linux上運行來安裝python庫:
sudopipinstallhttps://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz或在Windows上:
pip installhttps://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz如果您無法運行sudo或pip命令,只需下載ecmwf-api-client-python.tgz。提取其內容並將模塊復制ecmwfapi到環境變數指向的目錄中PYTHONPATH。
3.檢查數據可用性
要查看ECMWF Public Datasets的可用性,請訪問Web界面:
http://apps.ecmwf.int/datasets/
使用此界面,您可以發現我們存檔中提供的所有ECMWF公用數據集。我們強烈建議您瀏覽我們的公共數據集以熟悉其可用性。您可以選擇一個公共數據集,並開始瀏覽其內容。
請考慮有關內容的一些注意事項:
不同的ECMWF公共數據集包括不同的「參數」,「時間」和「步驟」
在每個ECMWF公共數據集中,並非所有「參數」都可以從所有「步驟」
在每個ECMWF公共數據集中,並非所有「時間」都提供所有「步驟」
上面的Web界面將幫助您檢查和了解可用性。對於任何類型的選擇,系統將以動態方式更新屬性以反映當前的可用性。(即如果您更改步驟,一些參數將被添加或刪除)。
小費
選擇完成後,我們鼓勵用戶使用頁面底部的「查看MARS請求」功能。使用這個MARS請求,你可以建立自己的Python腳本。
這里說一下查看MARS請求可以自動生成python腳本樣例文件,我們可以對照著學習一下,如下面的我選擇的數據源:
我的請求已經排隊(或活動)了很長時間。我要殺了嗎?
根據許多因素和限制,請求可能需要一些時間才能完成。
訪問您的工作列表以查看請求的狀態
您可能需要訪問我們的疑難解答頁面了解更多信息。
進一步
我可以要求「netcdf」格式的數據嗎?
是的,你只需要添加你的請求「格式」:「netcdf」
我可以要求有限區域嗎?
是
如果您已經在請求中設置了「grid」關鍵字,可以添加「area」:「coordinates」關鍵字。您可以設置預定義的區域,例如歐洲,或者使用北/西/南/東的坐標設置區域。
您還可以訪問MARS區域關鍵字以獲取更多信息:後處理關鍵字。
見下面的例子。
轉至元數據結尾
由Cristian Simarro創建,最後修改於五月11,2015
轉至元數據起始
TIGGE壓力水平控制預測
TIGGE表面擾動預測
請參閱簡要請求語法來了解每個關鍵字。
TIGGE壓力水平控制預測
10m風組件,10m v風組件,來自NCEP。所有壓力水平。
ECMWF公共數據集Web界面
#!/usr/bin/env =ECMWFDataServer()server.retrieve({'origin':"kwbc",'levelist':"200/250/300/500/700/850/925/1000",'levtype':"pl",'expver':"prod",'dataset':"tigge",'step':"0/6/12/18/24/30",'grid':"0.5/0.5",'param':"131/132",'time':"00/06/12/18",'date':"2014-10-01",'type':"cf",'class':"ti",'target':"tigge_2014-10-01_00061218.grib"})TIGGE表面擾動預測
2m溫度。01 NOV 2014,來自ECMWF
ECMWF公共數據集Web界面
#!/usr/bin/env =ECMWFDataServer()server.retrieve({'origin':"ecmf",'levtype':"sfc",'number':"1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/47/48/49/50",'expver':"prod",'dataset':"tigge",'step':"0/6/12/18",'grid':"0.5/0.5",'param':"167",'time':"00/12",'date':"2014-11-01",'type':"pf",'class':"ti",'target':"tigge_2014-11-01_0012.grib"})來自日本東京日本的rjtd
#!/usr/bin/env =ECMWFDataServer()server.retrieve({'origin':"rjtd",'levtype':"sfc",'number':"1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26",'expver':"prod",'dataset':"tigge",'step':"0/6/12/18",'grid':"0.5/0.5",'param':"167",'time':"00/12",'date':"2014-11-01",'type':"pf",'class':"ti",'target':"tigge_2014-11-01_0012.grib"})來自rksl,韓國:
#!/usr/bin/env =ECMWFDataServer()server.retrieve({'origin':"rksl",'levtype':"sfc",'number':"1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23",'expver':"prod",'dataset':"tigge",'step':"0/6/12/18",'grid':"0.5/0.5",'param':"167",'time':"00/12",'date':"2014-11-01",'type':"pf",'class':"ti",'target':"tigge_2014-11-01_0012.grib"})B. [Xarray] 1. 數據結構
參考 Xarray官方文檔 , Python氣象數據處理進階之Xarray(1):Xarray的數據結構
在Xarray中,數據是由結構和標簽的,分為以下幾種:
1.DataArray:
帶沖正有標注或命名維度的多維數組。DataArray將metadata(例如:維名稱,坐標和屬性)添加到基礎的 未標記 的數據結構,例如numpy和Dask數組。
2.Datasets:
具有類似字典結構的尺寸對其的DataArray對象的 集合 。因此,可以在單個DataArray的維度上執行的大多數操作都可以在Dataset上執行。
Dataset是多個DataArray的集合
3.Variable:
類似於NetCDF的變數。由dimensions,data和attributes組成。variable和numpy數組之間的主要功能鬧毀區別在於,對variable的數字運算可以通過 維名稱 實現數組廣播。
通俗的講,variables < DataArray < Dataset (<指包含於)。這種解釋不完全正確,但是初學者可以這樣理解。
Xarray通過對維命名的操作實現數據篩選和處理,實現數據的標記和命名通過以下幾個定液判備義實現:
* Dimension : 每一軸的維名稱(e.g.,('x','y','z'))。
* Coordinate : 坐標或刻度。類似於字典的序列,將每個點標記。比如說dimension是緯度,那麼對應的coordinate就是緯度坐標(90°N,89°N,88°N……89°S,90°S)。
* Index : 索引號,也可以說是位置標號。a[0]代表a數組的一個數,0就是index。
可以看到,該文件是一個Datasets,裡面含有變數:Data Variables,數據集的維度有經度緯度和時間,各自有各自的坐標Coordinates,同樣數據集還有一些屬性來表明數據集信息。
我們可以通過:
來分別查看數據集中包含的變數,維,坐標。
再比如NCEP的位勢高度資料:
基本同上。
需要說明的是,ncl數據中存在short格式,在讀取時需要使用short2flt()函數,但是在Python中不存在short格式,默認均為float,無需考慮這一點。
有時我們通過其他手段讀取了相關數據,但是數據是np.array格式的,我們需要將其轉換為DataArray,亦或我們需要輸出一個NC文件,需要將計算後的數組轉為DataArray格式,這就用到了創建的方法。
1.Data: 數據,可以是numpy ndarray,series,DataFrame,pandas.panel等格式
2.coords: 坐標列表或字典
如果是列表,則應為元組列表。其中第一個元素為dimension name,第二個元素是對應的坐標array_like對象。
用字典格式比較好
3.dims: 維名稱列表
如果省略,並且coords是元組列表,則維度名稱取自coords。
4.attrs: 屬性
5.names: 變數名
以上,除了data外,都不是必須的。
創建示例如下:
上面提到,除了data以外,其他都是不必要的
如果是從一個DataFrame數據轉化為DataArray的話(這種操作通常是為了將Pandas和Xarray聯合使用):
會自動識別行列的名稱和序號。
官方文檔還有更復雜的例子,需要的話再去官網查看。
在創建了數據之後,我們同樣可以使用相關的操作獲取DataArray的各種信息:
如果想對DataArray的值修改可以通過以下兩種方法:
兩種結果是等價的,但官方只給出了第一種方法。
*通過指令 foo.rename('temperature') 改名,比如通過hgt計算得到了一個新變數,需要改名,就可以用這個指令。
在得到一個DataArray後,用於畫圖時,比如我們需要獲取它的經度和緯度(在這里,剛剛的例子是時間和高度),那麼可以直接通過
這兩種方式取出坐標信息。
要修改或者刪除某坐標信息的話,原理和修改數據是一樣的:
官網給出一個以氣候數據為例的Dataset結構:
<center>
</center>
一個數據集,包含了數據主體(Temperature,Precipitation),維度坐標(latitude,longitude)。
根據官網的例子,一個Dataset是這樣創建的,實際上與DataArray類似:
實際上這個例子與我們通常接觸的不太一樣,因為大部分數據的lat和lon都是一維的。
對Dataset的操作和DataArray基本一致,不再重復。