ecmwf-opendata
é um pacote para simplificar o download dos dados abertos do ECMWF. Ele implementa uma interface baseada em solicitação ao conjunto de dados usando o idioma Mars do ECMWF para selecionar campos meteorológicos, semelhante ao pacote Python ECMWF-API-Client existente.
Uma coleção de cadernos Jupyter que utilizam esse pacote está disponível aqui.
O pacote ecmwf-opendata
Python pode ser instalado a partir de Pypi com:
$ pip install ecmwf-opendata
O exemplo abaixo fará o download da previsão mais recente de 10 dias disponíveis para a pressão média do nível do mar ( msl
) em um arquivo local chamado data.grib2
:
from ecmwf . opendata import Client
client = Client ()
client . retrieve (
step = 240 ,
type = "fc" ,
param = "msl" ,
target = "data.grib2" ,
)
❗ Nota: Este pacote foi projetado para usuários que desejam baixar um subconjunto de todo o conjunto de dados. Se você planeja baixar uma grande porcentagem de cada arquivo de dados, pode ser mais eficiente baixar arquivos inteiros e filtrar os dados que você deseja localmente. Consulte a documentação sobre a Convenção de Nomeação de Arquivos para obter mais informações. Como alternativa, você pode usar esta ferramenta para baixar arquivos inteiros especificando apenas
date
,time
,step
,stream
etype
. Esteja ciente de que todos os dados de um dia inteiro estão na ordem de 726 GIB.
O construtor do objeto cliente pega as seguintes opções:
client = Client (
source = "ecmwf" ,
model = "ifs" ,
resol = "0p25" ,
preserve_request_order = False ,
infer_stream_keyword = True ,
)
onde:
source
é o nome do servidor para entrar em contato ou um URL totalmente qualificado. Valores possíveis são ecmwf
para acessar os servidores do ECMWF ou azure
para acessar dados hospedados no Azure da Microsoft. O padrão é ecmwf
.
model
é o nome do modelo que produziu os dados. Use ifs
para o modelo e aifs
acionado por física para o modelo orientado a dados. Observe que aifs
é atualmente experimental e produz apenas um pequeno subconjunto de campos. O padrão é ifs
.
resol
especifica a resolução dos dados. O padrão é 0p25
para resolução de 0,25 graus e é a única resolução que está disponível atualmente.
preserve_request_order
. Se esse sinalizador estiver definido como True
, a biblioteca tentará gravar os dados recuperados no arquivo de destino no pedido especificado pela solicitação. Por exemplo, se a solicitação especificar param=[2t,msl]
a biblioteca garantirá que o campo 2t
seja o primeiro no arquivo de destino, enquanto com param=[msl,2t]
, o campo msl
será o primeiro. Isso também funciona em diferentes palavras -chave: ...,levelist=[500,100],param=[z,t],...
produzirá uma saída diferente para ...,param=[z,t],levelist=[500,100],...
se o sinalizador estiver definido como False
, a biblioteca classificará a solicitação para minimizar o número de solicitações HTTP feitas ao servidor, levando a velocidades de download mais rápidas. O padrão é False
.
infer_stream_keyword
. A palavra -chave stream
representa o sistema de previsão do ECMWF que cria os dados. Definir -o requer conhecimento corretamente de como o ECMWF executa suas operações. Se este booleano estiver definido como True
, a biblioteca tentará inferir o valor correto para a palavra -chave stream
com base no restante da solicitação. O padrão é True
se o modelo for ifs
.
️ Nota: Recomenda -se não definir o sinalizadorpreserve_request_order
comoTrue
ao baixar um grande número de campos, pois isso adicionará carga extra nos servidores.
Client.retrieve()
O método Client.retrieve()
assume a solicitação como entrada e recuperará os dados correspondentes do servidor e os gravará no arquivo de destino do usuário.
Uma solicitação é uma lista de pares de palavras -chave/valores usadas para selecionar os dados desejados. É possível especificar uma lista de valores para uma determinada palavra -chave.
A solicitação pode ser especificada como um dicionário:
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" ,
)
ou diretamente como argumentos para o método retrieve()
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
)
A palavra -chave de date
e time
são usadas para selecionar a data e a hora da execução de previsão (consulte a data e a hora abaixo). Se date
ou date
e time
não forem especificadas, a biblioteca consultará o servidor para obter os dados correspondentes mais recentes. A date
e time
da previsão baixada são retornadas pelo método 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 )
Pode imprimir 2022-01-23 00:00:00
.
Client.download()
O método Client.download()
pega os mesmos parâmetros que o método Client.retrieve()
, mas baixará os arquivos de dados inteiros do servidor, ignorando palavras -chave como param
, levelist
ou number
.
O exemplo abaixo vai baixar todos os campos da Etapa 24 mais recente, ignorando a palavra -chave param
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . download (
param = "msl" ,
type = "fc" ,
step = 24 ,
target = "data.grib2" ,
)
Client.latest()
O método Client.latest()
pega os mesmos parâmetros que o método Client.retrieve()
e retorna a data da previsão correspondente mais recente sem baixar os dados:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
print ( client . latest (
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
))
Pode imprimir 2022-01-23 00:00:00
.
⏰ Nota : Os dados estão disponíveis entre 7 e 9 horas após a data e hora de início da previsão, dependendo do sistema de previsão e da etapa de tempo especificada.
As palavras -chave suportadas são:
type
: o tipo de dados (obrigatório, padroniza para fc
).stream
: o sistema de previsão (opcional se não ambíguo, obrigatório de outra forma). Veja o infer_stream_keyword
acima.date
: a data em que a previsão começa.time
: o horário em que a previsão começa.step
: o tempo de previsão de previsão em horas, ou fcmonth
, o tempo de tempo em meses para a previsão sazonal (obrigatória, padrão para 0
e 1
, respectivamente).e (tudo opcional, sem padrões):
param
: os parâmetros meteorológicos, como vento, pressão ou umidade.levtype
: selecione entre parâmetros de nível único e parâmetros nos níveis de pressão.levelist
: a lista de níveis de pressão quando relevante.number
: a lista de números de membros do conjunto quando relevante.As palavras -chave na primeira lista são usadas para identificar qual arquivo acessar, enquanto a segunda lista é usada para identificar quais partes dos arquivos precisam ser baixadas. Alguns servidores HTTP podem retornar várias partes de um arquivo, enquanto outros podem retornar apenas uma única peça de um arquivo. Neste último caso, a biblioteca pode executar muitas solicitações HTTP no servidor. Se você deseja baixar arquivos inteiros, forneça apenas palavras -chave da primeira lista.
Os parâmetros de data e hora se referem ao horário de início da previsão. Toda a data e hora são expressas no UTC.
Existem várias maneiras de especificar a data e a hora em uma solicitação.
A data pode ser especificada usando strings, números e python datetime.datetime
ou datetime.date
Objetos:
...
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 ,
...
As datas também podem ser dadas como um número menor ou igual a zero. Nesse caso, é equivalente à data atual do UTC, menos o número de dias fornecido:
...
date = 0 , # today
date = - 1 , # yesterday
date = - 2 , # the day before yesterday
...
O time
de palavra -chave pode ser dado como uma string ou um número inteiro, ou um objeto Python datetime.time
. Todos os valores do tempo abaixo são equivalentes:
...
time = 12 ,
...
time = 1200 ,
...
time = '12' ,
...
time = '1200' ,
...
time = datetime . time ( 12 ),
...
Lista de valores válidos para o tempo |
---|
0, 6, 12 e 18 |
Se time
não for especificado, o tempo será extraído a partir da data.
...
date = '2022-01-25 12:00:00' ,
...
é equivalente a:
...
date = '2022-01-25' ,
time = 12 ,
...
Se a palavra -chave time
for especificada, ele substituirá o tempo fornecido na solicitação.
...
date = '2022-01-25 12:00:00' ,
time = 18 ,
...
é equivalente a:
...
date = '2022-01-25' ,
time = 18 ,
...
Como afirmado anteriormente, se date
ou date
e time
não forem especificadas, a biblioteca consultará o servidor para obter os dados correspondentes mais recentes. A date
e time
da previsão baixada são retornadas pelo método retrieve()
:
Exemplo sem a palavra -chave 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 )
Imprimirá 2022-01-22 12:00:00
se executado na manhã de 2022-01-23.
Exemplo sem a date
e time
das palavras -chave:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
result = client . retrieve (
type = "fc" ,
param = "2t" ,
step = "24" ,
target = "data.grib2" ,
)
print ( result . datetime )
Imprimirá 2022-01-23 00:00:00
se for executado na manhã de 2022-01-23.
O ECMWF executa vários sistemas de previsão:
Cada uma dessas previsões também produz vários tipos de produtos, que são referidos usando o stream
e type
de palavras -chave.
Os valores válidos para
type
são:
HRES:
fc
: Previsão.ENS:
cf
: Previsão de controle.pf
: previsão perturbada.em
: Ensemble significa.es
: Ensemble Desvio padrão.ep
: Probabilidades.Os valores válidos para
stream
são:
oper
: Campos atmosféricos de HRES - 00 UTC e 12 UTC.wave
: Campos de ondas oceânicas de HRES - 00 UTC e 12 UTC.enfo
: Campos atmosféricos da ENS.waef
: Campos de ondas oceânicas da ENS.scda
: Campos atmosféricos de HRES - 06 UTC e 18 UTC.scwv
: Campos de ondas oceânicas de HRES - 06 UTC e 18 UTC.? NOTA : Se o sinalizador do cliente
infer_stream_keyword
estiver definido comoTrue
, a biblioteca inferirá o fluxo dotype
etime
. Nesse caso, você só precisa especificarstream=wave
para acessar produtos Ocean Wave e não fornecer um valor parastream
em outros casos.
Para selecionar uma etapa de tempo, use a palavra -chave step
:
...
step = 24 ,
...
step = [ 24 , 48 ],
...
Sistema de previsão | Tempo | Lista de etapas de tempo |
---|---|---|
Hres | 00 e 12 | 0 a 144 por 3, 144 a 240 por 6 |
ENS | 00 e 12 | 0 a 144 por 3, 144 a 360 por 6 |
Hres | 06 e 18 | 0 a 90 por 3 |
ENS | 06 e 18 | 0 a 144 por 3 |
Probabilidades - Eventos climáticos instantâneos | 00 e 12 | 0 a 360 por 12 |
Probabilidades - eventos climáticos diários | 00 e 12 | 0-24 a 336-360 por 12 |
? NOTA : Não especificar
step
retornará todas as etapas de tempo disponíveis.
Para selecionar um parâmetro, use a palavra -chave param
:
...
param = "msl" ,
...
param = [ "2t" , "msl" ]
...
Para parâmetros de nível de pressão, use a palavra -chave levelist
:
...
param = "t" ,
levelist = 850 ,
...
param = [ "u" , "v" ],
levelist = [ 1000 , 850 , 500 ],
...
? NOTA : Não especificar
levelist
retornará todos os níveis disponíveis e não especificarparam
retornará todos os parâmetros disponíveis.
Lista de níveis de pressão (HPA) |
---|
1000, 925, 850, 700, 500, 300, 250, 200 e 50 |
Abaixo está a lista de todos os parâmetros:
Campos atmosféricos nos níveis de pressão
Parâmetro | Descrição | Unidades |
---|---|---|
d | Divergência | S -1 |
gh | Altura geopotencial | GPM |
q | Umidade específica | kg kg -1 |
r | Umidade relativa | % |
t | Temperatura | K |
u | U componente do vento | MS -1 |
v | V componente do vento | MS -1 |
Vo | Vorticidade (parente) | S -1 |
Campos atmosféricos em um único nível
Parâmetro | Descrição | Unidades |
---|---|---|
10U | Componente de 10 metros U eólico | MS -1 |
10V | Componente de 10 metros v eólico | MS -1 |
2t | Temperatura de 2 metros | K |
msl | Pressão média do nível do mar | PA |
ro | Escoamento | m |
skt | Temperatura da pele | K |
sp | Pressão da superfície | PA |
st | Temperatura do solo | K |
STL1 | Temperatura do solo Nível 1 | K |
TCWV | Total Coluna Vapor de Água Integrados Verticalmente | kg m -2 |
tp | Precipitação total | m |
Campos de ondas oceânicas
Parâmetro | Descrição | Unidades |
---|---|---|
MP2 | Período médio de onda de cruzamento zero | s |
mwd | Direção média da onda | Grau verdadeiro |
mwp | Período médio de onda | s |
pp1d | Período de onda de pico | s |
SWH | Altura significativa das ondas de vento combinadas e ondas | m |
Ensemble média e desvio padrão - níveis de pressão
Parâmetro | Descrição | Unidades | Níveis |
---|---|---|---|
gh | Altura geopotencial | GPM | 300, 500, 1000 |
t | Temperatura | K | 250, 500, 850 |
ws | Velocidade do vento | MS -1 | 250, 850 |
Ensemble média e desvio padrão - nível único
Parâmetro | Descrição | Unidades |
---|---|---|
msl | Pressão média do nível do mar | PA |
Eventos climáticos instantâneos - campos atmosféricos - 850 hPa
Parâmetro | Descrição | Unidades |
---|---|---|
PTSA_GT_1P5STDEV | Probabilidade de anomalia padronizada de temperatura maior que 1,5 desvio padrão | % |
PTSA_GT_1STDEV | Probabilidade de anomalia padronizada de temperatura maior que 1 desvio padrão | % |
PTSA_GT_2STDEV | Probabilidade de anomalia padronizada de temperatura maior que 2 desvio padrão | % |
PTSA_LT_1P5STDEV | Probabilidade de anomalia padronizada de temperatura menor que -1,5 desvio padrão | % |
PTSA_LT_1STDEV | Probabilidade de anomalia padronizada de temperatura menor que -1 desvio padrão | % |
PTSA_LT_2STDEV | Probabilidade de anomalia padronizada de temperatura menor que -2 desvio padrão | % |
Eventos climáticos diários - campos atmosféricos - nível único
Parâmetro | Descrição | Unidades |
---|---|---|
10FGG10 | 10 metros de rajada de vento de pelo menos 10 m/s | % |
10FGG15 | 10 metros de rajada de vento de pelo menos 15 m/s | % |
10FGG25 | 10 metros de rajada de vento de pelo menos 25 m/s | % |
TPG1 | Precipitação total de pelo menos 1 mm | % |
TPG10 | Precipitação total de pelo menos 10 mm | % |
TPG100 | Precipitação total de pelo menos 100 mm | % |
TPG20 | Precipitação total de pelo menos 20 mm | % |
TPG25 | Precipitação total de pelo menos 25 mm | % |
TPG5 | Precipitação total de pelo menos 5 mm | % |
TPG50 | Precipitação total de pelo menos 50 mm | % |
Eventos climáticos instantâneos - campos de ondas oceânicas
Parâmetro | Descrição | Unidades |
---|---|---|
SWHG2 | Altura significativa da onda de pelo menos 2 m | % |
SWHG4 | Altura significativa da onda de pelo menos 4 m | % |
SWHG6 | Altura significativa da onda de pelo menos 6 m | % |
SWHG8 | Altura significativa da onda de pelo menos 8 m | % |
Você pode selecionar membros individuais da previsão do conjunto, use o number
da palavra -chave.
...
stream = "enfo" ,
step = 24 ,
param = "msl" ,
number = 1 ,
...
stream = "enfo" ,
step = 24 ,
param = "msl" ,
number = [ 1 , 10 , 20 ],
...
Lista de números de conjunto |
---|
1 a 50 |
? NOTA : Não especificar
number
retornará todos os membros da previsão do conjunto.
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 ,
...
❗ Nota: os produtos de ciclone tropical estão disponíveis apenas quando existem ciclones tropicais observados ou previstos.
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"
. As faixas de ciclone tropical são identificadas pela palavra -chave 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
pela step=144
. A média do conjunto e o desvio padrão são identificados pelas palavras -chave type="em"
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "em" ,
step = 24 ,
target = "data.grib2" ,
)
e type="es"
, respectivamente:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "es" ,
step = 24 ,
target = "data.grib2" ,
)
Os produtos de probabilidade do conjunto são identificados pela palavra -chave type="ep"
. Os produtos de probabilidade estão disponíveis apenas para time=00
e time=12
.
Dois produtos diferentes estão disponíveis.
A probabilidade de anomalias padronizadas de temperatura a um nível de pressão constante de 850HPa está disponível em etapas de previsão de 12 horas.
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" ,
)
As probabilidades de precipitação total e rajadas de vento que excedem os limiares especificados em um período de 24 horas estão disponíveis para intervalos de passo de 0-24 a 336-360 por 12. Estes são especificados na solicitação de recuperação usando, por exemplo: 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" ,
)
Ao baixar dados do conjunto de dados de dados Open ECMWF, você concorda com os termos deles: Attribution 4.0 International (CC por 4.0). Se você não concorda com esses termos, não faça o download dos dados. Visite esta página para obter mais informações.
A Apache License 2.0 Ao aplicar esta licença, o ECMWF não renuncia aos privilégios e imunidades concedidas a ele em virtude de seu status como organização intergovernamental, nem se envia a qualquer jurisdição.