ecmwf-opendata
est un package pour simplifier le téléchargement des données ouvertes ECMWF. Il implémente une interface basée sur une demande avec l'ensemble de données en utilisant le langage Mars d'ECMWF pour sélectionner des champs météorologiques, similaires au package Python ECMWF-API-Client existant.
Une collection de cahiers Jupyter qui utilise ce package est disponible ici.
Le package ecmwf-opendata
Python peut être installé à partir de PYPI avec:
$ pip install ecmwf-opendata
L'exemple ci-dessous téléchargera les dernières prévisions disponibles en 10 jours pour la pression moyenne du niveau de la mer ( msl
) dans un fichier local appelé data.grib2
:
from ecmwf . opendata import Client
client = Client ()
client . retrieve (
step = 240 ,
type = "fc" ,
param = "msl" ,
target = "data.grib2" ,
)
❗ Remarque: ce package est conçu pour les utilisateurs qui souhaitent télécharger un sous-ensemble de l'ensemble de données. Si vous prévoyez de télécharger un grand pourcentage de chaque fichier de données, il peut être plus efficace de télécharger des fichiers entiers et de filtrer les données que vous souhaitez localement. Voir la documentation sur la convention de dénomination du fichier pour plus d'informations. Alternativement, vous pouvez utiliser cet outil pour télécharger des fichiers entiers en spécifiant uniquement
date
,time
,step
,stream
ettype
. Veuillez noter que toutes les données pour une journée complète sont dans l'ordre de 726 GIB.
Le constructeur de l'objet client prend les options suivantes:
client = Client (
source = "ecmwf" ,
model = "ifs" ,
resol = "0p25" ,
preserve_request_order = False ,
infer_stream_keyword = True ,
)
où:
source
est soit le nom du serveur à contacter, soit une URL entièrement qualifiée. Les valeurs possibles sont ecmwf
pour accéder aux serveurs de l'ECMWF, ou azure
pour accéder aux données hébergées sur Azure de Microsoft. La valeur par défaut est ecmwf
.
model
est le nom du modèle qui a produit les données. Utilisez ifs
pour le modèle axé sur la physique et aifs
pour le modèle basé sur les données. Veuillez noter que aifs
est actuellement expérimental et ne produit qu'un petit sous-ensemble de champs. La valeur par défaut est ifs
.
resol
spécifie la résolution des données. La valeur par défaut est 0p25
pour une résolution de 0,25 degrés et est la seule résolution actuellement disponible.
preserve_request_order
. Si ce drapeau est défini sur True
, la bibliothèque tentera d'écrire les données récupérées dans le fichier cible dans l'ordre spécifié par la demande. Par exemple, si la demande spécifie param=[2t,msl]
la bibliothèque garantira que le champ 2t
est le premier dans le fichier cible, tandis que avec param=[msl,2t]
, le champ msl
sera le premier. Cela fonctionne également sur différents mots-clés: ...,levelist=[500,100],param=[z,t],...
produira une sortie différente pour ...,param=[z,t],levelist=[500,100],...
Si l'indicateur est défini sur False
, la bibliothèque triera la demande pour minimiser le nombre de demandes HTTP faites sur le serveur, ce qui conduit à des vitesses de téléchargement plus rapides. La valeur par défaut est False
.
infer_stream_keyword
. Le mot-clé stream
représente le système de prévision ECMWF qui crée les données. Le définir correctement nécessite une connaissance de la façon dont l'ECMWF exécute ses opérations. Si ce booléen est défini sur True
, la bibliothèque essaiera de déduire la valeur correcte pour le mot-clé stream
en fonction du reste de la demande. La valeur par défaut est True
si le modèle est ifs
.
️ Remarque: il est recommandé de ne pas définir l'indicateurpreserve_request_order
surTrue
lors du téléchargement d'un grand nombre de champs car cela ajoutera une charge supplémentaire sur les serveurs.
Client.retrieve()
La méthode Client.retrieve()
prend la demande en entrée et récupérera les données correspondantes du serveur et l'écrira dans le fichier cible de l'utilisateur.
Une demande est une liste des paires de mots clés / valeur utilisées pour sélectionner les données souhaitées. Il est possible de spécifier une liste de valeurs pour un mot-clé donné.
La demande peut être spécifiée en tant que dictionnaire:
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 directement comme arguments à la méthode retrieve()
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
)
Le mot-clé date
et time
est utilisé pour sélectionner la date et l'heure de l'exécution de prévision (voir la date et l'heure ci-dessous). Si date
ou date
et time
ne sont pas spécifiées, la bibliothèque interrogera le serveur pour les données correspondantes les plus récentes. La date
et time
des prévisions téléchargées sont renvoyées par la méthode 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 )
peut imprimer 2022-01-23 00:00:00
.
Client.download()
La méthode Client.download()
prend les mêmes paramètres que la méthode Client.retrieve()
, mais téléchargera l'ensemble des fichiers de données à partir du serveur, ignorant les mots clés comme param
, levelist
ou number
.
L'exemple ci-dessous téléchargera tous les champs à partir de la dernière étape de temps 24, en ignorant le mot-clé param
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . download (
param = "msl" ,
type = "fc" ,
step = 24 ,
target = "data.grib2" ,
)
Client.latest()
La méthode Client.latest()
prend les mêmes paramètres que la méthode Client.retrieve()
et renvoie la date de la dernière prévision de correspondance sans télécharger les données:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
print ( client . latest (
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
))
peut imprimer 2022-01-23 00:00:00
.
⏰ Remarque : les données sont disponibles entre 7 et 9 heures après la date de début et l'heure des prévisions, selon le système de prévision et le pas de temps spécifié.
Les mots clés pris en charge sont:
type
: le type de données (obligatoire, par défaut à fc
).stream
: le système de prévision (facultatif, s'il est sans ambiguïté, obligatoire autrement). Voir le infer_stream_keyword
ci-dessus.date
: la date à laquelle les prévisions commencent.time
: l'heure à laquelle les prévisions commencent.step
: Le pas de temps de prévision en heures, ou fcmonth
, le pas de temps en mois pour les prévisions saisonnières (obligatoire, par défaut à 0
et 1
, respectivement).et (tous facultatifs, sans défaut):
param
: Les paramètres météorologiques, tels que le vent, la pression ou l'humidité.levtype
: sélectionnez entre les paramètres de niveau unique et les paramètres aux niveaux de pression.levelist
: la liste des niveaux de pression le cas échéant.number
: la liste des numéros de membres de l'ensemble, le cas échéant.Les mots clés de la première liste sont utilisés pour identifier le fichier à accéder, tandis que la deuxième liste est utilisée pour identifier les parties des fichiers à télécharger réellement. Certains serveurs HTTP sont en mesure de renvoyer plusieurs parties d'un fichier, tandis que d'autres ne peuvent retourner qu'une seule pièce à partir d'un fichier. Dans ce dernier cas, la bibliothèque peut effectuer de nombreuses demandes HTTP au serveur. Si vous souhaitez télécharger des fichiers entiers, ne fournissez que des mots clés à partir de la première liste.
Les paramètres de date et d'heure se réfèrent à l'heure de début des prévisions. Toutes la date et l'heure sont exprimées en UTC.
Il existe plusieurs façons de spécifier la date et l'heure d'une demande.
La date peut être spécifiée à l'aide de chaînes, de nombres et de Python datetime.datetime
ou datetime.date
Objets:
...
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 ,
...
Les dates peuvent également être données comme un nombre inférieur ou égal à zéro. Dans ce cas, il équivaut à la date UTC actuelle moins le nombre de jours donné:
...
date = 0 , # today
date = - 1 , # yesterday
date = - 2 , # the day before yesterday
...
L' time
du mot-clé peut être donnée en tant que chaîne ou entier, ou un objet Python datetime.time
. Toutes les valeurs du temps ci-dessous sont équivalentes:
...
time = 12 ,
...
time = 1200 ,
...
time = '12' ,
...
time = '1200' ,
...
time = datetime . time ( 12 ),
...
Liste des valeurs valides pour le temps |
---|
0, 6, 12 et 18 |
Si time
n'est pas spécifié, l'heure est extraite de la date.
...
date = '2022-01-25 12:00:00' ,
...
équivaut à:
...
date = '2022-01-25' ,
time = 12 ,
...
Si le mot time
clé est spécifié, il remplace à tout moment dans la demande.
...
date = '2022-01-25 12:00:00' ,
time = 18 ,
...
équivaut à:
...
date = '2022-01-25' ,
time = 18 ,
...
Comme indiqué précédemment, si date
ou date
et time
ne sont pas spécifiées, la bibliothèque interrogera le serveur pour les données correspondantes les plus récentes. La date
et time
des prévisions téléchargées sont renvoyées par la méthode retrieve()
:
Exemple sans le mot-clé 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 )
Imprimera 2022-01-22 12:00:00
si elle est exécutée le matin 2022-01-23.
Exemple sans les mots clés date
et 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 )
Imprimera 2022-01-23 00:00:00
si elle est exécutée le matin de 2022-01-23.
ECMWF gère plusieurs systèmes de prévision:
Chacune de ces prévisions produit également plusieurs types de produits, qui sont mentionnés à l'aide du stream
et type
de mots clés.
Les valeurs valides pour
type
sont:
HRES:
fc
: Prévisions.Ens:
cf
: Prévisions de contrôle.pf
: Prévisions perturbées.em
: Moyenne d'ensemble.es
: Écart type d'ensemble.ep
: Probabilités.Les valeurs valides pour
stream
sont:
oper
: champs atmosphériques de HRES - 00 UTC et 12 UTC.wave
: champs de vagues océaniques à partir de HRES - 00 UTC et 12 UTC.enfo
: champs atmosphériques d'Ens.waef
: Ocean Wave Fields de Ens.scda
: champs atmosphériques de HRES - 06 UTC et 18 UTC.scwv
: champs de vagues océaniques de HRES - 06 UTC et 18 UTC.? Remarque : Si le Flag du client
infer_stream_keyword
est défini surTrue
, la bibliothèque déduire le flux dutype
ettime
. Dans ce cas, il vous suffit de spécifierstream=wave
pour accéder aux produits Ocean Wave et ne fournissez pas de valeur pourstream
dans d'autres cas.
Pour sélectionner un pas de temps, utilisez le mot-clé step
:
...
step = 24 ,
...
step = [ 24 , 48 ],
...
Système de prévision | Temps | Liste des pas de temps |
---|---|---|
Hres | 00 et 12 | 0 à 144 par 3, 144 à 240 par 6 |
Ens | 00 et 12 | 0 à 144 par 3, 144 à 360 par 6 |
Hres | 06 et 18 | 0 à 90 par 3 |
Ens | 06 et 18 | 0 à 144 par 3 |
Probabilités - événements météorologiques instantanés | 00 et 12 | 0 à 360 par 12 |
Probabilités - événements météorologiques quotidiens | 00 et 12 | 0-24 à 336-360 par 12 |
? Remarque : ne pas spécifier
step
renverra toutes les pas de temps disponibles.
Pour sélectionner un paramètre, utilisez le mot clé param
:
...
param = "msl" ,
...
param = [ "2t" , "msl" ]
...
Pour les paramètres du niveau de pression, utilisez le mot-clé levelist
:
...
param = "t" ,
levelist = 850 ,
...
param = [ "u" , "v" ],
levelist = [ 1000 , 850 , 500 ],
...
? Remarque : ne pas spécifier
levelist
renverra tous les niveaux disponibles, et ne pas spécifierparam
renverra tous les paramètres disponibles.
Liste des niveaux de pression (HPA) |
---|
1000, 925, 850, 700, 500, 300, 250, 200 et 50 |
Vous trouverez ci-dessous la liste de tous les paramètres:
Champs atmosphériques sur les niveaux de pression
Paramètre | Description | Unités |
---|---|---|
d | Divergence | S -1 |
GH | Hauteur géopotentielle | GPM |
q | Humidité spécifique | kg kg -1 |
r | Humidité relative | % |
t | Température | K |
u | U composant du vent | MS -1 |
V | V composant du vent | MS -1 |
vo | Vorticité (relatif) | S -1 |
Champs atmosphériques à un seul niveau
Paramètre | Description | Unités |
---|---|---|
10U | Composant de 10 mètres U éolien | MS -1 |
10V | Composant de 10 mètres V | MS -1 |
2t | Température de 2 mètres | K |
MSL | Pression moyenne au niveau de la mer | Pennsylvanie |
ro | Ruissellement | m |
skt | Température de la peau | K |
sp | Pression de surface | Pennsylvanie |
St | Température du sol | K |
STL1 | Niveau de température du sol 1 | K |
tcwv | Colonne totale vapeur d'eau intégrée verticalement | kg m -2 |
tp | Précipitation totale | m |
Champs de vagues de l'océan
Paramètre | Description | Unités |
---|---|---|
mp2 | Période d'onde de croisement zéro | s |
MWD | Direction moyenne des vagues | Degré vrai |
MWP | Période de vague moyenne | s |
pp1d | Période de pointe | s |
SWH | Hauteur significative des vagues de vent combinées et une houle | m |
Moyenne d'ensemble et écart-type - niveaux de pression
Paramètre | Description | Unités | Niveaux |
---|---|---|---|
GH | Hauteur géopotentielle | GPM | 300, 500, 1000 |
t | Température | K | 250, 500, 850 |
WS | Vitesse du vent | MS -1 | 250, 850 |
Moyenne d'ensemble et écart-type - niveau unique
Paramètre | Description | Unités |
---|---|---|
MSL | Pression moyenne au niveau de la mer | Pennsylvanie |
Événements météorologiques instantanés - champs atmosphériques - 850 hPa
Paramètre | Description | Unités |
---|---|---|
ptsa_gt_1p5stdev | Probabilité de température anomalie standardisée supérieure à 1,5 écart type | % |
ptsa_gt_1stdev | Probabilité de température anomalie normalisée supérieure à 1 écart-type | % |
ptsa_gt_2stdev | Probabilité de température anomalie standardisée supérieure à 2 écart-type | % |
ptsa_lt_1p5stdev | Probabilité de température anomalie normalisée inférieure à -1,5 écart type | % |
ptsa_lt_1stdev | Probabilité de température anomalie standardisée inférieure à -1 écart type | % |
ptsa_lt_2stdev | Probabilité de température anomalie normalisée inférieure à -2 écart type | % |
Événements météorologiques quotidiens - champs atmosphériques - niveau unique
Paramètre | Description | Unités |
---|---|---|
10fgg10 | Rafale de 10 mètres de vent d'au moins 10 m / s | % |
10fgg15 | Rafale de 10 mètres de vent d'au moins 15 m / s | % |
10fgg25 | Rafale de 10 mètres de vent d'au moins 25 m / s | % |
tpg1 | Précipitation totale d'au moins 1 mm | % |
tpg10 | Précipitation totale d'au moins 10 mm | % |
TPG100 | Précipitation totale d'au moins 100 mm | % |
tpg20 | Précipitation totale d'au moins 20 mm | % |
tpg25 | Précipitation totale d'au moins 25 mm | % |
tpg5 | Précipitation totale d'au moins 5 mm | % |
tpg50 | Précipitation totale d'au moins 50 mm | % |
Événements météorologiques instantanés - champs de vagues océaniques
Paramètre | Description | Unités |
---|---|---|
swhg2 | Hauteur de vague significative d'au moins 2 m | % |
swhg4 | Hauteur de vague significative d'au moins 4 m | % |
swhg6 | Hauteur de vague significative d'au moins 6 m | % |
swhg8 | Hauteur de vague significative d'au moins 8 m | % |
Vous pouvez sélectionner les membres individuels de la prévision de l'ensemble Utilisez le number
de mot-clé.
...
stream = "enfo" ,
step = 24 ,
param = "msl" ,
number = 1 ,
...
stream = "enfo" ,
step = 24 ,
param = "msl" ,
number = [ 1 , 10 , 20 ],
...
Liste des numéros d'ensemble |
---|
1 à 50 |
? Remarque : ne pas spécifier
number
renverra tous les membres de la prévision de l'ensemble.
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 ,
...
❗ Remarque: Les produits de pistes de cyclone tropicale ne sont disponibles que lorsqu'il y a des cyclones tropicaux observés ou prévisions.
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"
. Les pistes cyclones tropicales sont identifiées par le mot-clé 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
par step=144
. La moyenne d'ensemble et l'écart type sont identifiés par les mots clés type="em"
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "em" ,
step = 24 ,
target = "data.grib2" ,
)
et type="es"
, respectivement:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "es" ,
step = 24 ,
target = "data.grib2" ,
)
Les produits de probabilité d'ensemble sont identifiés par le mot-clé type="ep"
. Les produits de probabilité sont disponibles uniquement pour time=00
et time=12
.
Deux produits différents sont disponibles.
La probabilité d'anomalies standardisées de température à un niveau de pression constant de 850 HPA est disponible à 12 heures de prévision.
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" ,
)
Les probabilités de précipitations totales et de rafales de vent dépassant les seuils spécifiés dans une période de 24 heures sont disponibles pour les plages de pas de 0-24 à 336-360 par 12. Ceux-ci sont spécifiés dans la demande de récupération en utilisant, par exemple: 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" ,
)
En téléchargeant des données à partir de l'ensemble de données de données Open de ECMWF, vous acceptez leurs termes: Attribution 4.0 International (CC by 4.0). Si vous n'êtes pas d'accord avec ces termes, ne téléchargez pas les données. Visitez cette page pour plus d'informations.
Licence Apache 2.0 Lors de l'application de cette licence, ECMWF ne renonce pas aux privilèges et immunités qui lui sont accordés en vertu de son statut d'organisation intergouvernementale et ne se soumette pas à aucune juridiction.