ecmwf-opendata
是一個簡化ECMWF開放數據下載的軟件包。它使用ECMWF的MARS語言將基於請求的界面實現到數據集中,以選擇氣象場,類似於現有的ECMWF-API-CLIEN-CLIENT PYTHON軟件包。
可以在此處提供一系列使用該軟件包的Jupyter筆記本電腦。
可以從PYPI安裝ecmwf-opendata
Python軟件包:
$ pip install ecmwf-opendata
下面的示例將下載最新的“平均海平面壓力” ( msl
)的10天預測到一個名為data.grib2
的本地文件:
from ecmwf . opendata import Client
client = Client ()
client . retrieve (
step = 240 ,
type = "fc" ,
param = "msl" ,
target = "data.grib2" ,
)
❗注意:此軟件包專為想要下載整個數據集子集的用戶而設計。如果您打算下載每個數據文件的很大一部分,則下載整個文件並過濾您本地想要的數據可能更有效。有關更多信息,請參見文件命名約定的文檔。另外,您可以僅通過指定
date
,time
,step
,stream
和type
來下載整個文件。請注意,一整天的所有數據都按726 GIB訂購。
客戶端對象的構造函數採用以下選項:
client = Client (
source = "ecmwf" ,
model = "ifs" ,
resol = "0p25" ,
preserve_request_order = False ,
infer_stream_keyword = True ,
)
在哪裡:
source
是要聯繫的服務器的名稱,要么是完全合格的URL。可能的值是ecmwf
訪問ECMWF的服務器,或訪問Microsoft Azure上azure
的數據。默認值為ecmwf
。
model
是產生數據的模型的名稱。將ifs
用於物理驅動的模型,並將aifs
用於數據驅動的模型。請注意, aifs
目前是實驗性的,僅產生一小部分字段。默認值為ifs
。
resol
指定數據的分辨率。默認值為0.25度分辨率為0p25
,並且是當前可用的唯一分辨率。
preserve_request_order
。如果將此標誌設置為True
,則庫將嘗試按請求指定的順序將檢索到的數據寫入目標文件。例如,如果請求指定param=[2t,msl]
庫將確保字段2t
首先在目標文件中,而使用param=[msl,2t]
,則首先將是字段msl
。這也可以跨不同關鍵字來工作: ...,levelist=[500,100],param=[z,t],...
...,param=[z,t],levelist=[500,100],...
如果將標誌設置為False
,則庫將對請求進行排序,以最大程度地減少對服務器提出的HTTP請求的數量,從而更快地下載速度。默認值為False
。
infer_stream_keyword
。 stream
關鍵字代表創建數據的ECMWF預測系統。正確設置它需要了解ECMWF如何運行其操作。如果將此佈爾設置為True
,則庫將嘗試根據請求的其餘部分來推斷stream
關鍵字的正確值。如果模型為ifs
則默認值為True
。
配x 注意:建議不要在下載大量字段時不要將preserve_request_order
標誌設置為True
,因為這會在服務器上增加額外的負載。
Client.retrieve()
Client.retrieve()
方法將請求作為輸入,並將從服務器檢索相應的數據並將其寫入用戶的目標文件中。
請求是用於選擇所需數據的關鍵字/值對的列表。可以指定給定關鍵字的值列表。
該請求可以指定為詞典:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
request = {
"time" : 0 ,
"type" : "fc" ,
"step" : 24 ,
"param" : [ "2t" , "msl" ],
}
client . retrieve ( request , "data.grib2" )
# or:
client . retrieve (
request = request ,
target = "data.grib2" ,
)
或直接作為對retrieve()
方法的參數:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
)
date
和time
關鍵字用於選擇預測運行的日期和時間(請參見下面的日期和時間)。如果未指定date
或兩個date
和time
,則庫將查詢服務器以獲取最新匹配數據。下載預測的date
和time
由retrieve()
方法返回。
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
result = client . retrieve (
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
)
print ( result . datetime )
5月可以打印2022-01-23 00:00:00
。
Client.download()
Client.download()
方法採用與Client.retrieve()
方法相同的參數,但是將從服務器下載整個數據文件,忽略諸如param
, levelist
或number
的關鍵字。
下面的示例將從最新時間步驟24下載所有字段,忽略關鍵字param
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . download (
param = "msl" ,
type = "fc" ,
step = 24 ,
target = "data.grib2" ,
)
Client.latest()
Client.latest()
方法採用與Client.retrieve()
方法相同的參數,並返回最新匹配預測的日期,而無需下載數據:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
print ( client . latest (
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
))
5月可以打印2022-01-23 00:00:00
。
⏰注意:根據預測系統和指定的時間步長,數據在預測開始日期和時間之後的7到9小時之間可用。
受支持的關鍵字是:
type
:數據類型(強制性,默認為fc
)。stream
:預測系統(如果明確的話,則可選,否則強制性)。請參閱上面的infer_stream_keyword
。date
:預測開始的日期。time
:預測開始的時間。step
:幾個小時或fcmonth
預測時間步驟,即季節性預測幾個月的時間步長(強制性,默認為0
和1
)。(所有可選,沒有默認值):
param
:氣象參數,例如風,壓力或濕度。levtype
:在壓力級別上選擇單級參數和參數。levelist
:相關時壓力水平的列表。number
:相關時集合成員編號的列表。第一個列表中的關鍵字用於識別要訪問哪個文件,而第二個列表則用於確定實際下載文件的哪些部分。某些HTTP服務器能夠返回文件的多個部分,而其他HTTP服務器只能從文件中返回單個部分。在後一種情況下,庫可能會對服務器執行許多HTTP請求。如果您想下載整個文件,則僅提供第一個列表中的關鍵字。
日期和時間參數是指預測的開始時間。所有日期和時間均以UTC表示。
有幾種方法可以指定請求中的日期和時間。
可以使用字符串,數字和python datetime.datetime
或datetime.date
對象指定日期:
...
date = '20220125' ,
time = 12 ,
...
date = '2022-01-25' ,
time = 12 ,
...
date = '2022-01-25 12:00:00' ,
...
date = 20220125 ,
time = 12 ,
...
date = datetime . datetime ( 2022 , 1 , 25 , 12 , 0 , 0 ),
...
date = datetime . date ( 2022 , 1 , 25 ),
time = 12 ,
...
日期也可以作為小於或等於零的數字給出。在這種情況下,它等效於當前UTC日期減去給定數量:
...
date = 0 , # today
date = - 1 , # yesterday
date = - 2 , # the day before yesterday
...
關鍵字time
可以作為字符串或整數或python datetime.time
對像給出。下面的所有時間值都是等效的:
...
time = 12 ,
...
time = 1200 ,
...
time = '12' ,
...
time = '1200' ,
...
time = datetime . time ( 12 ),
...
時間的有效值列表 |
---|
0、6、12和18 |
如果未指定time
,則從日期開始提取時間。
...
date = '2022-01-25 12:00:00' ,
...
等同於:
...
date = '2022-01-25' ,
time = 12 ,
...
如果指定了time
關鍵字,則它將覆蓋請求中給出的任何時間。
...
date = '2022-01-25 12:00:00' ,
time = 18 ,
...
等同於:
...
date = '2022-01-25' ,
time = 18 ,
...
如前所述,如果未指定date
或date
和time
,則庫會查詢服務器以獲取最新匹配數據。下載預測的date
和time
由retrieve()
方法返回:
沒有date
關鍵字的示例:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
result = client . retrieve (
time = 12 ,
type = "fc" ,
param = "2t" ,
step = "24" ,
target = "data.grib2" ,
)
print ( result . datetime )
如果在2022-01-23上午奔跑,將打印2022-01-22 12:00:00
。
沒有date
和time
關鍵字的示例:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
result = client . retrieve (
type = "fc" ,
param = "2t" ,
step = "24" ,
target = "data.grib2" ,
)
print ( result . datetime )
如果在2022-01-23上午跑步,將打印2022-01-23 00:00:00
。
ECMWF運行多個預測系統:
這些預測中的每一個還會產生幾種類型的產品,這些產品用於使用關鍵字stream
和type
。
type
的有效值是:
HRES:
fc
:預測。ENS:
cf
:控制預測。pf
:擾動的預測。em
:合奏的卑鄙。es
:整體標準偏差。ep
:概率。
stream
的有效值是:
oper
:HRES的大氣場-00 UTC和12 UTC。wave
:HRES的海浪場-00 UTC和12 UTC。enfo
:ENS的大氣場。waef
:ENS的海浪場。scda
:HRES的大氣場-06 UTC和18 UTC。scwv
:HRES的海浪場-06 UTC和18 UTC。?注意:如果客戶端的標誌
infer_stream_keyword
設置為True
,則庫將從type
和time
中推斷出流。在這種情況下,您只需要指定stream=wave
即可訪問海浪產品,並且在其他情況下不會為stream
提供價值。
要選擇一個時間步,請使用step
關鍵字:
...
step = 24 ,
...
step = [ 24 , 48 ],
...
預測系統 | 時間 | 時間步驟列表 |
---|---|---|
HRES | 00和12 | 0至144乘3、144至240 x 6 |
ens | 00和12 | 0至144 x 3、144至360 x 6 |
HRES | 06和18 | 0至90乘3 |
ens | 06和18 | 0至144 x 3 |
概率 - 瞬時天氣事件 | 00和12 | 0至360乘12 |
概率 - 每日天氣事件 | 00和12 | 0-24至336-360乘12 |
?注意:未指定
step
將返回所有可用的時間步驟。
要選擇一個參數,請使用param
關鍵字:
...
param = "msl" ,
...
param = [ "2t" , "msl" ]
...
對於壓力級別參數,請使用levelist
關鍵字:
...
param = "t" ,
levelist = 850 ,
...
param = [ "u" , "v" ],
levelist = [ 1000 , 850 , 500 ],
...
?注意:不指定
levelist
將返回所有可用級別,而未指定param
將返回所有可用參數。
壓力水平列表(HPA) |
---|
1000、925、850、700、500、300、250、200和50 |
以下是所有參數的列表:
壓力水平的大氣場
範圍 | 描述 | 單位 |
---|---|---|
d | 分歧 | S -1 |
GH | 地勢高度 | GPM |
問 | 具體的濕度 | kg kg -1 |
r | 相對濕度 | % |
t | 溫度 | k |
你 | U風的組成部分 | MS -1 |
v | v風的組成部分 | MS -1 |
vo | 渦度(相對) | S -1 |
大氣場
範圍 | 描述 | 單位 |
---|---|---|
10U | 10米U風 | MS -1 |
10V | 10米V風 | MS -1 |
2t | 2米溫度 | k |
MSL | 平均海平面壓力 | PA |
ro | 徑流 | m |
Skt | 皮膚溫度 | k |
sp | 表面壓力 | PA |
英石 | 土壤溫度 | k |
STL1 | 土壤溫度水平1 | k |
TCWV | 總柱垂直整合水蒸氣 | kg m -2 |
TP | 總降水 | m |
海浪田
範圍 | 描述 | 單位 |
---|---|---|
MP2 | 平均零交叉波段 | s |
MWD | 平均波動方向 | 程度是正確的 |
MWP | 平均波週期 | s |
pp1d | 峰值波週期 | s |
SWH | 風波混合的高度和膨脹 | m |
集合平均值和標準偏差 - 壓力水平
範圍 | 描述 | 單位 | 水平 |
---|---|---|---|
GH | 地勢高度 | GPM | 300、500、1000 |
t | 溫度 | k | 250、500、850 |
WS | 風速 | MS -1 | 250,850 |
合奏平均值和標準偏差 - 單級
範圍 | 描述 | 單位 |
---|---|---|
MSL | 平均海平面壓力 | PA |
瞬時天氣事件 - 大氣場-850 HPA
範圍 | 描述 | 單位 |
---|---|---|
PTSA_GT_1P5STDEV | 溫度標準化異常大於1.5標準偏差的概率 | % |
PTSA_GT_1STDEV | 溫度標準化異常的概率大於1標準偏差 | % |
PTSA_GT_2STDEV | 溫度標準化異常的概率大於2標準偏差 | % |
PTSA_LT_1P5STDEV | 溫度標準化異常的概率小於-1.5標準偏差 | % |
PTSA_LT_1STDEV | 溫度標準化異常的可能性小於-1標準偏差 | % |
PTSA_LT_2STDEV | 溫度標準化異常的可能性小於-2標準偏差 | % |
每日天氣事件 - 大氣場 - 單層
範圍 | 描述 | 單位 |
---|---|---|
10FGG10 | 10米的陣風至少10 m/s | % |
10FGG15 | 10米的陣風至少15 m/s | % |
10FGG25 | 10米的陣風至少25 m/s | % |
TPG1 | 至少1毫米的總沉澱 | % |
TPG10 | 至少10毫米的總沉澱 | % |
TPG100 | 至少100毫米的總沉澱 | % |
TPG20 | 至少20毫米的總沉澱 | % |
TPG25 | 至少25毫米的總沉澱 | % |
TPG5 | 至少5毫米的總沉澱 | % |
TPG50 | 至少50毫米的總沉澱 | % |
瞬時天氣事件 - 海浪田
範圍 | 描述 | 單位 |
---|---|---|
SWHG2 | 顯著的波高至少2 m | % |
SWHG4 | 顯著的波高至少4 m | % |
SWHG6 | 顯著的波高至少6 m | % |
SWHG8 | 顯著的波高至少8 m | % |
您可以選擇集合預測的各個成員使用關鍵字number
。
...
stream = "enfo" ,
step = 24 ,
param = "msl" ,
number = 1 ,
...
stream = "enfo" ,
step = 24 ,
param = "msl" ,
number = [ 1 , 10 , 20 ],
...
合奏數字列表 |
---|
1至50 |
?注意:未指定
number
將返回所有合奏預測成員。
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "oper" ,
type = "fc" ,
step = 24 ,
param = "2t" ,
target = "data.grib2" ,
)
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "oper" ,
type = "tf" ,
step = 240 ,
target = "data.bufr" ,
)
...
step = 90 ,
...
❗注意:熱帶氣旋軌道軌道產品僅在觀察到的熱帶氣旋或預測時可用。
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "pf" ,
param = "msl" ,
target = "data.grib2" ,
)
number
關鍵字: number=1
。number=[num for num in range(1,51,2)]
。type="cf"
。熱帶氣旋軌道通過關鍵字type="tf"
標識。
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "tf" ,
step = 240 ,
target = "data.bufr" ,
)
step=240
中,用step=144
替換。集合平均值和標準偏差由關鍵字type="em"
標識:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "em" ,
step = 24 ,
target = "data.grib2" ,
)
和type="es"
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "es" ,
step = 24 ,
target = "data.grib2" ,
)
集合概率產品由關鍵字type="ep"
標識。概率產品僅適用於time=00
, time=12
。
有兩種不同的產品。
在12小時的預測步驟下,溫度標準化異常的可能性為850HPA。
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "ep" ,
step = [ i for i in range ( 12 , 361 , 12 )],
levelist = 850 ,
param = [
"ptsa_gt_1stdev" ,
"ptsa_gt_1p5stdev" ,
"ptsa_gt_2stdev" ,
"ptsa_lt_1stdev" ,
"ptsa_lt_1p5stdev" ,
"ptsa_lt_2stdev" ,
],
target = "data.grib2" ,
)
步驟範圍為0-24至336-360乘12乘以12。這些在檢索請求中使用,例如: step=["0-24", "12-36", "24-48"]
。
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
steps = [ f" { 12 * i } - { 12 * i + 24 } " for i in range ( 29 )]
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "ep" ,
step = steps ,
param = [ "tpg1" , "tpg5" , "10fgg10" ],
target = "data.grib2" ,
)
通過從ECMWF打開數據數據集下載數據,您可以同意其條款:屬性4.0 International(CC By 4.0)。如果您不同意此類條款,請不要下載數據。訪問此頁面以獲取更多信息。
Apache許可證2.0在申請本許可證時,ECMWF不會因為其作為政府間組織的地位而放棄授予其授予的特權和免疫力,也不會提交任何管轄權。