ecmwf-opendata
es un paquete para simplificar la descarga de los datos abiertos de ECMWF. Implementa una interfaz basada en solicitudes en el conjunto de datos que utiliza el lenguaje Mars de ECMWF para seleccionar campos meteorológicos, similar al paquete Python ECMWF-API-API-API existente.
Una colección de cuadernos Jupyter que utilizan ese paquete está disponible aquí.
El paquete ecmwf-opendata
PYTHON se puede instalar desde PYPI con:
$ pip install ecmwf-opendata
El siguiente ejemplo descargará el último pronóstico disponible de 10 días para la presión media del nivel del mar ( msl
) en un archivo local llamado data.grib2
:
from ecmwf . opendata import Client
client = Client ()
client . retrieve (
step = 240 ,
type = "fc" ,
param = "msl" ,
target = "data.grib2" ,
)
❗ NOTA: Este paquete está diseñado para usuarios que desean descargar un subconjunto de todo el conjunto de datos. Si planea descargar un gran porcentaje de cada archivo de datos, puede ser más eficiente descargar archivos completos y filtrar los datos que desea localmente. Consulte la documentación en la Convención de nombres de archivos para obtener más información. Alternativamente, puede usar esta herramienta para descargar archivos completos solo especificando
date
,time
,step
,stream
ytype
. Tenga en cuenta que todos los datos para un día completo están en el orden de 726 GIB.
El constructor del objeto cliente toma las siguientes opciones:
client = Client (
source = "ecmwf" ,
model = "ifs" ,
resol = "0p25" ,
preserve_request_order = False ,
infer_stream_keyword = True ,
)
dónde:
source
es el nombre del servidor para contactar o una URL totalmente calificada. Los valores posibles son ecmwf
para acceder a los servidores de ECMWF, o azure
para acceder a los datos alojados en Azure de Microsoft. El valor predeterminado es ecmwf
.
model
es el nombre del modelo que produjo los datos. Use ifs
para el modelo impulsado por física y aifs
para el modelo basado en datos. Tenga en cuenta que aifs
es actualmente experimental y solo produce un pequeño subconjunto de campos. El valor predeterminado es ifs
.
resol
especifica la resolución de los datos. El valor predeterminado es 0p25
para una resolución de 0.25 grados, y es la única resolución que está disponible actualmente.
preserve_request_order
. Si este indicador se establece en True
, la biblioteca intentará escribir los datos recuperados en el archivo de destino en el pedido especificado por la solicitud. Por ejemplo, si la solicitud especifica param=[2t,msl]
la biblioteca asegurará que el campo 2t
esté primero en el archivo de destino, mientras que con param=[msl,2t]
, el campo msl
será el primero. Esto también funciona en diferentes palabras clave: ...,levelist=[500,100],param=[z,t],...
producirá una salida diferente a ...,param=[z,t],levelist=[500,100],...
Si el indicador está configurado en False
, la biblioteca ordenará la solicitud para minimizar el número de solicitudes HTTP hechas al servidor, lo que lleva a velocidades de descarga más rápidas. El valor predeterminado es False
.
infer_stream_keyword
. La palabra clave stream
representa el sistema de pronóstico de ECMWF que crea los datos. Establecer correctamente requiere conocimiento de cómo ECMWF ejecuta sus operaciones. Si este booleano se establece en True
, la biblioteca intentará inferir el valor correcto para la palabra clave stream
en función del resto de la solicitud. El valor predeterminado es True
si el modelo es ifs
.
️ Nota: Se recomienda no establecer el indicadorpreserve_request_order
enTrue
al descargar una gran cantidad de campos, ya que esto agregará una carga adicional en los servidores.
Client.retrieve()
El método Client.retrieve()
toma la solicitud como entrada y recuperará los datos correspondientes del servidor y los escribirá en el archivo de destino del usuario.
Una solicitud es una lista de pares de palabras clave/valor utilizadas para seleccionar los datos deseados. Es posible especificar una lista de valores para una palabra clave dada.
La solicitud se puede especificar como un diccionario:
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" ,
)
o directamente como argumentos al 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" ,
)
La palabra clave date
y time
se utilizan para seleccionar la fecha y hora de la ejecución del pronóstico (ver fecha y hora a continuación). Si no se especifican date
y date
y time
, la biblioteca consultará el servidor para los datos coincidentes más recientes. La date
y time
del pronóstico descargado se devuelve mediante el 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 )
puede imprimir 2022-01-23 00:00:00
.
Client.download()
El método Client.download()
toma los mismos parámetros que el método Client.retrieve()
, pero descargará los archivos de datos completos del servidor, ignorando las palabras clave como param
, levelist
o number
.
El siguiente ejemplo descargará todo el campo desde el último paso 24, ignorando el param
de la palabra clave:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . download (
param = "msl" ,
type = "fc" ,
step = 24 ,
target = "data.grib2" ,
)
Client.latest()
El método Client.latest()
toma los mismos parámetros que el método Client.retrieve()
y devuelve la fecha del pronóstico de coincidencia más reciente sin descargar los datos:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
print ( client . latest (
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
))
puede imprimir 2022-01-23 00:00:00
.
⏰ Nota : Los datos están disponibles entre 7 y 9 horas después de la fecha y hora de inicio del pronóstico, dependiendo del sistema de pronóstico y el paso de tiempo especificado.
Las palabras clave compatibles son:
type
: el tipo de datos (obligatorio, predeterminado a fc
).stream
: el sistema de pronóstico (opcional si es inequívoco, obligatorio de otra manera). Vea el infer_stream_keyword
arriba.date
: la fecha en que comienza el pronóstico.time
: el momento en que comienza el pronóstico.step
: el tiempo de pronóstico Paso en horas, o fcmonth
, el paso de tiempo en meses para el pronóstico estacional (obligatorio, predeterminado a 0
y 1
, respectivamente).y (todos opcionales, sin valores predeterminados):
param
: los parámetros meteorológicos, como el viento, la presión o la humedad.levtype
: seleccione entre parámetros de nivel único y parámetros en los niveles de presión.levelist
: la lista de niveles de presión cuando es relevante.number
: La lista de números de miembros del conjunto cuando es relevante.Las palabras clave en la primera lista se utilizan para identificar a qué archivo acceder, mientras que la segunda lista se usa para identificar qué partes de los archivos deben descargarse realmente. Algunos servidores HTTP pueden devolver varias partes de un archivo, mientras que otros solo pueden devolver una sola parte de un archivo. En el último caso, la biblioteca puede realizar muchas solicitudes HTTP al servidor. Si desea descargar archivos completos, solo proporcione palabras clave desde la primera lista.
Los parámetros de fecha y hora se refieren a la hora de inicio del pronóstico. Todas las fecha y hora se expresan en UTC.
Hay varias formas de especificar la fecha y hora en una solicitud.
La fecha se puede especificar utilizando cadenas, números y python datetime.datetime
o datetime.date
Objects:
...
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 ,
...
Las fechas también se pueden dar como un número menor o igual a cero. En este caso, es equivalente a la fecha actual de UTC menos el número dado de días:
...
date = 0 , # today
date = - 1 , # yesterday
date = - 2 , # the day before yesterday
...
El time
de palabras clave se puede dar como una cadena o un entero, o un objeto Python datetime.time
. Todos los valores de tiempo a continuación son equivalentes:
...
time = 12 ,
...
time = 1200 ,
...
time = '12' ,
...
time = '1200' ,
...
time = datetime . time ( 12 ),
...
Lista de valores válidos para el tiempo |
---|
0, 6, 12 y 18 |
Si no se especifica time
, el tiempo se extrae de la fecha.
...
date = '2022-01-25 12:00:00' ,
...
es equivalente a:
...
date = '2022-01-25' ,
time = 12 ,
...
Si se especifica la palabra clave time
, anula cualquier tiempo dado en la solicitud.
...
date = '2022-01-25 12:00:00' ,
time = 18 ,
...
es equivalente a:
...
date = '2022-01-25' ,
time = 18 ,
...
Como se indicó anteriormente, si no se especifican date
y date
y time
, la biblioteca consultará el servidor para los datos coincidentes más recientes. La date
y time
del pronóstico descargado se devuelve mediante el método retrieve()
:
Ejemplo sin la palabra clave 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
si se ejecuta en la mañana de 2022-01-23.
Ejemplo sin las palabras clave date
y 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 )
Imprimirá 2022-01-23 00:00:00
si se ejecuta en la mañana de 2022-01-23.
ECMWF ejecuta varios sistemas de pronóstico:
Cada uno de estos pronósticos también produce varios tipos de productos, que se mencionan utilizando el stream
y type
de palabras clave.
Los valores válidos para
type
son:
HRES:
fc
: pronóstico.ENS:
cf
: pronóstico de control.pf
: pronóstico perturbado.em
: Media del conjunto.es
: Desviación estándar de conjunto.ep
: Probabilidades.Los valores válidos para
stream
son:
oper
: campos atmosféricos de HRES - 00 UTC y 12 UTC.wave
: Ocean Wave Fields de HRES - 00 UTC y 12 UTC.enfo
: campos atmosféricos de ENS.waef
: Campos de ondas oceánicas de ENS.scda
: campos atmosféricos de HRES - 06 UTC y 18 UTC.scwv
: Campos de ondas oceánicas de HRES - 06 UTC y 18 UTC.? Nota : Si el indicador del cliente
infer_stream_keyword
se establece enTrue
, la biblioteca inferirá la secuencia desde eltype
ytime
. En ese caso, solo necesita especificarstream=wave
para acceder a los productos Ocean Wave, y no proporcionar un valor parastream
en otros casos.
Para seleccionar un paso de tiempo, use la palabra clave step
:
...
step = 24 ,
...
step = [ 24 , 48 ],
...
Sistema de previsión | Tiempo | Lista de pasos de tiempo |
---|---|---|
HRES | 00 y 12 | 0 a 144 por 3, 144 a 240 por 6 |
ENS | 00 y 12 | 0 a 144 por 3, 144 a 360 por 6 |
HRES | 06 y 18 | 0 a 90 por 3 |
ENS | 06 y 18 | 0 a 144 por 3 |
Probabilidades - Eventos meteorológicos instantáneos | 00 y 12 | 0 a 360 por 12 |
Probabilidades - Eventos meteorológicos diarios | 00 y 12 | 0-24 a 336-360 por 12 |
? Nota : No especificar
step
devolverá todos los pasos de tiempo disponibles.
Para seleccionar un parámetro, use la palabra clave param
:
...
param = "msl" ,
...
param = [ "2t" , "msl" ]
...
Para los parámetros de nivel de presión, use la palabra clave levelist
:
...
param = "t" ,
levelist = 850 ,
...
param = [ "u" , "v" ],
levelist = [ 1000 , 850 , 500 ],
...
? Nota : No especificar
levelist
devolverá todos los niveles disponibles, y no especificarparam
devolverá todos los parámetros disponibles.
Lista de niveles de presión (HPA) |
---|
1000, 925, 850, 700, 500, 300, 250, 200 y 50 |
A continuación se muestra la lista de todos los parámetros:
Campos atmosféricos en los niveles de presión
Parámetro | Descripción | Unidades |
---|---|---|
d | Divergencia | S -1 |
GHE | Altura geopotencial | gpm |
Q | Humedad específica | kg kg -1 |
riñonal | Humedad relativa | De % |
T | Temperatura | K |
u | U componente del viento | MS -1 |
V | V Componente del viento | MS -1 |
VO | Vorticidad (pariente) | S -1 |
Campos atmosféricos en un solo nivel
Parámetro | Descripción | Unidades |
---|---|---|
10u | Componente de viento de 10 metros | MS -1 |
10V | Componente de viento de 10 metros V | MS -1 |
2t | Temperatura de 2 metros | K |
MSL | Presión media del nivel del mar | Pensilvania |
RO | Escorrentía | metro |
skt | Temperatura de la piel | K |
sp | Presión superficial | Pensilvania |
calle | Temperatura del suelo | K |
stl1 | Nivel de temperatura del suelo 1 | K |
TCWV | Columna total vapor de agua integrado verticalmente | kg m -2 |
TP | Precipitación total | metro |
Campos de ondas del océano
Parámetro | Descripción | Unidades |
---|---|---|
mp2 | Período de onda de cruce de cero medio | s |
MWD | Dirección de onda media | Grado verdadero |
MWP | Período de onda medio | s |
pp1d | Período de onda máxima | s |
SWH | Altura significativa de las ondas de viento combinadas y el oleaje | metro |
Media de conjunto y desviación estándar: niveles de presión
Parámetro | Descripción | Unidades | Nivel |
---|---|---|---|
GHE | Altura geopotencial | gpm | 300, 500, 1000 |
T | Temperatura | K | 250, 500, 850 |
WS | Velocidad del viento | MS -1 | 250, 850 |
Media de conjunto y desviación estándar: nivel único
Parámetro | Descripción | Unidades |
---|---|---|
MSL | Presión media del nivel del mar | Pensilvania |
Eventos meteorológicos instantáneos - Campos atmosféricos - 850 HPA
Parámetro | Descripción | Unidades |
---|---|---|
PTSA_GT_1P5STDEV | Probabilidad de una anomalía estandarizada de temperatura superior a 1.5 desviación estándar | De % |
PTSA_GT_1STDEV | Probabilidad de una anomalía estandarizada de temperatura superior a 1 desviación estándar | De % |
PTSA_GT_2STDEV | Probabilidad de una anomalía estandarizada de temperatura superior a 2 desviación estándar | De % |
PTSA_LT_1P5STDEV | Probabilidad de una anomalía estandarizada de temperatura inferior a -1.5 desviación estándar | De % |
PTSA_LT_1STDEV | Probabilidad de una anomalía estandarizada de temperatura inferior a -1 desviación estándar | De % |
PTSA_LT_2STDEV | Probabilidad de una anomalía estandarizada de temperatura inferior a -2 desviación estándar | De % |
Eventos meteorológicos diarios - campos atmosféricos - nivel único
Parámetro | Descripción | Unidades |
---|---|---|
10fgg10 | Ráfaga de viento de 10 metros de al menos 10 m/s | De % |
10FGG15 | Ráfaga de viento de 10 metros de al menos 15 m/s | De % |
10FGG25 | Ráfaga de viento de 10 metros de al menos 25 m/s | De % |
TPG1 | Precipitación total de al menos 1 mm | De % |
TPG10 | Precipitación total de al menos 10 mm | De % |
TPG100 | Precipitación total de al menos 100 mm | De % |
TPG20 | Precipitación total de al menos 20 mm | De % |
TPG25 | Precipitación total de al menos 25 mm | De % |
TPG5 | Precipitación total de al menos 5 mm | De % |
TPG50 | Precipitación total de al menos 50 mm | De % |
Eventos meteorológicos instantáneos - Ocean Waves Fields
Parámetro | Descripción | Unidades |
---|---|---|
swhg2 | Altura de onda significativa de al menos 2 m | De % |
swhg4 | Altura de onda significativa de al menos 4 m | De % |
swhg6 | Altura de onda significativa de al menos 6 m | De % |
swhg8 | Altura de onda significativa de al menos 8 m | De % |
Puede seleccionar miembros individuales del pronóstico del conjunto Use el number
de palabras clave.
...
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 : No especificar
number
devolverá todos los miembros de pronóstico de 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: los productos de pistas de ciclones tropicales solo están disponibles cuando hay ciclones tropicales observados o pronosticados.
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"
. Las pistas de ciclones tropicales se identifican mediante el 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
con step=144
. La media del conjunto y la desviación estándar se identifican mediante el type="em"
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "em" ,
step = 24 ,
target = "data.grib2" ,
)
y 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" ,
)
Los productos de probabilidad de conjunto se identifican mediante el type="ep"
. Los productos de probabilidad están disponibles solo para time=00
y time=12
.
Hay dos productos diferentes disponibles.
La probabilidad de anomalías estandarizadas de temperatura a un nivel de presión constante de 850 hPa está disponible en 12 pasos de pronóstico por hora.
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" ,
)
Las probabilidades de precipitación total y ráfagas de viento que exceden los umbrales especificados en un período de 24 horas están disponibles para rangos de pasos 0-24 a 336-360 por 12. Estos se especifican en la solicitud de recuperación usando, por ejemplo: 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" ,
)
Al descargar datos del conjunto de datos de datos abiertos de ECMWF, usted acepta sus Términos: Atribución 4.0 International (CC por 4.0). Si no está de acuerdo con tales términos, no descargue los datos. Visite esta página para obtener más información.
Apache License 2.0 Al aplicar esta licencia, ECMWF no renuncia a los privilegios e inmunidades otorgadas en virtud de su estado como organización intergubernamental ni se somete a ninguna jurisdicción.