Dès que la température monte un petit peu, la question revient : il fait chaud, certes, mais fait-il anormalement chaud ? Est-ce une chaleur habituelle pour un mois d’été, ou un phénomène anormal ?
Si vous voulez apprendre à répondre à cette question, ce tuto est fait pour vous !
Nous allons voir :
Ce qu’est une normale climatologique standard selon la définition de l’Organisation Météorologique Mondiale,
Comment calculer une normale locale malgré la faible disponibilité des observations météorologiques grâce aux réanalyses,
Comment accéder à ces données partout dans le monde via le “Climate data store” du programme européen d’observation de la Terre,
Comment calculer la température normale annuelle et mensuelle avec Python.
Qu’est-ce qu’une normale climatique ?
Il n’est pas simple de définir une température normale, en particulier dans une période où, comme maintenant, le climat n’est pas stationnaire. Cependant, dans ce tutoriel, nous allons nous en tenir à la définition donnée par l’Organisation Météorologique Mondiale :
Une normale est une “moyenne calculée pour une période uniforme et relativement longue comprenant au moins trois périodes consécutives de dix ans.”
Il n’existe donc pas une mais des normales. L’OMM distingue notamment :
Les normales standards portant sur une période de 30 ans débutant le 1er janvier d’une année se terminant par 1. Par exemple, la normale standard la plus récente selon la définition de l'OMM est aujourd'hui 1991-2020.
Parmi les normales standard, la normale de référence calculée entre le 1er janvier 1961 et le 31 décembre 1990.
Indication supplémentaire : les résultats sont exprimées au dixième près. Selon l’OMM, il n’est généralement pas utile de publier les normales avec plus de précision.
Pas d’observations météo ? (Presque) pas de problème !
Dans ce tutoriel, nous allons calculer la normale standard du 01/01/1981 au 31/12/2010, pour la température dans la bonne ville de Tarbes (Hautes-Pyrénées).
Immédiatement apparait une première difficulté, et non des moindres : où trouver un historique des températures locales remontant à plus de 40 ans ?
Dans la réalité, les mesures fiables de températures sur une aussi longue période sont très rares. En France métropolitaine, le Global Historical Climatology Network référence moins d’une trentaine de stations et sans surprise il n’y en pas à Tarbes : les plus proches se trouvent à l’observatoire du Pic du Midi et à l’aéroport de Toulouse-Blagnac…
Très souvent, il n’existe pas d’observations météorologiques locales sur une durée assez longue pour le calcul d’une normale. Dans ce cas, la solution consiste à utiliser un historique réanalysé.
La réanalyse est une méthode qui combine des observations (stations, satellite, radar…) et un modèle météorologique pour produire un historique avec une résolution spatiale et temporelle fine.
La production de réanalyses n’est à la portée que de quelques grands centres de prévision, les plus connus sont le National Center for Environmental Prediction (NCEP) aux États-Unis et l’European Center for Medium-Range Weather Forcasts (ECMWF) en Europe. Ce sont les données de ce dernier que nous allons utiliser.
Accéder manuellement à la réanalyse de température ERA5-Land
Pour accéder aux données de réanalyses de l’ECMWF, dont ERA5-Land, la solution la plus immédiate consiste à aller sur le Climate Data Store de Copernicus, le programme européen d’observation de la Terre.
Si vous ne l’avez pas encore fait, créez un compte sur le CDS.
Plusieurs réanalyses sont disponibles, la plus récente et la plus détaillée est ERA5-Land. Vous pouvez la trouver en tapant “ERA5 Land” dans le champ de recherche :
Deux pas de temps sont disponibles : mensuel et horaire. Nous allons (au grand désespoir de notre fournisseur internet) utiliser les données horaires, sélectionnez-les en cliquant sur “ERA5-Land hourly data from 1981 to present” dans les résultats de la recherche.
L’onglet “Download data” vous permet de choisir les données que vous allez télécharger :
Dans le champ “Variable”, cochez la température à 2 mètres du sol : “2m temperature” (et notez le nombre impressionnant de variables disponibles !),
Dans le champ “Year”, sélectionnez une année, par exemple 1981,
Dans les champs “Month”, selectionnez un mois.
Dans les champs “Day” et “Time”, cliquez à chaque fois sur “Select all”,
Pour éviter de trop surcharger notre disque dur, nous n’allons pas télécharger les données pour l’ensemble de la planète mais seulement pour la France métropolitaine. Dans le champ “Geographical area”, sélectionnez “Sub-region extraction” et remplissez les limites du domaine : 41 pour la latitude sud, 52 pour la latitude nord, -5 pour la longitude ouest et 9 pour la longitude est. Vous pourriez évidemment choisir une autre zone mais attention quand même au volume des données : 30 années de réanalyse horaire pour la France représente déjà près de 8Go.
Enfin, dans le champ “Format”, sélectionnez “NetCDF”.
Si vous êtes connecté, vous pouvez maintenant cliquer sur “Submit form”. Il vous faudra ensuite attendre que le fichier soit prêt (ce qui peut prendre un peu de temps), le télécharger et répéter autant de fois que nécessaire…
Inutile de dire que cette méthode va vite vous lasser : comme le Climate Data Store n'autorise que le téléchargement manuel d'un mois à la fois, il vous faudra faire 360 téléchargements pour obtenir les 30 années de données nécessaires !
Automatisation du téléchargement avec l’API du Climate Data Store et Python
Si vous vous voulez vous épargner ce travail fastidieux, il existe une solution plus efficace : passer par l’API du Climate Data Store.
Attention : suite à une évolution des services de Copernicus en 2024, les anciens comptes et token ne sont plus valables. Pour accéder à ERA5-Land, vous allez devoir créer un compte ECMWF et mettre à jour le fichier .cdsapirc même si vous avez déjà téléchargé des réanalyses sur le Climate Data Store.
Pour commencer, installez la librairie cdsapi, par exemple avec :
pip install cdsapi
Créez un compte ou connectez-vous sur le Climate Data Store et allez sur votre profil. Vous y trouverez votre ID et un token permettant d'accéder aux données :
Cherchez sur votre disque un fichier nommé .cdsapirc, il se trouve normalement dans “C:\Users\Username”. Ouvrez ce fichier avec un éditeur de texte et copiez votre token :
Une fois que c'est fait, enregistrez le fichier .cdsapirc et fermez.
Nous pouvons maintenant télécharger les données directement avec quelques lignes de Python :
Si vous ne l'avez pas encore fait, un message d'erreur vous demandera d'accepter les conditions d'utilisation d'ERA5-Land. Allez sur le lien fourni et cochez la case.
L’exécution du code ci-dessus va télécharger la température réanalysée entre 1981 et 2010 sous la forme de fichiers annuels appelés, par exemple, ERA5Land_t2m_France_2010.nc. Vous n’avez plus besoin que de patience…
Calcul de la normale annuelle 1981–2010
Une fois les historiques de température téléchargés, passons au traitement.
L’ouverture des fichiers se fait avec xarray :
import xarray as xr
import os
dossier = "ERA5Land_Temperature"
DS = xr.open_mfdataset(os.path.join(dossier, '*.nc'))
open_mfdataset() permet d’ouvrir et de combiner automatiquement tous les .nc présent dans le dossier “ERA5Land_Temperature” sous la forme d’un dataset unique, DS.
Un dataset peut contenir plusieurs jeux de données (ou DataArray) partageant un système de coordonnées, par exemple la température et les précipitations sur une même grille géographique, sur la même période et avec le même pas de temps. Ce n’est pas le cas ici puisque nous n’avons que la température mais il faut tout de même extraire l’unique DataArray de notre dataset.
La syntaxe est la même que pour accéder à une valeur d’un dictionnaire en utilisant le nom de la variable comme clé : DS[‘t2m’]. Ou encore plus simplement :
da = DS.t2m
On peut voir quelle est l’unité utilisée avec :
da.attrs[‘units’]
La température est en Kelvin. Des degrés Celcius seraient plus adaptés, on va donc convertir :
da = da - 273.15
da.attrs['units'] = '°C'
Sélectionnons maintenant les températures à Tarbes. Une rapide recherche nous apprend que la ville est située à la latitude 43.2333 et à la longitude 0.0833.
On peut arrondir ces valeurs au dixième, ce qui correspond à la résolution spatiale d’ERA5-Land, ou bien simplement utiliser method = ‘nearest’ qui renverra le point de donnée le plus proche :
lat = 43.2333
lon = 0.0833
da_Tarbes = da.sel(latitude = lat,
longitude = lon,
method = 'nearest',
drop = True)
drop = True permet de supprimer les coordonnées latitude, longitude devenues inutiles. Par défaut, ces coordonnées serait conservées avec une seule valeur : 43.2 pour la latitude et 0.1 pour la longitude.
On obtient ainsi un DataArray contenant la température en degrés Celcius à Tarbes pour chaque heure entre 1981 et 2010.
Reprenons tous ça dans une fonction, cela nous simplifiera certainement la vie plus tard :
On retrouve notre série de températures Tarbes avec :
lat = 43.2333
lon = 0.0833
da_Tarbes = temperature_horaire(lat, lon)
Pour obtenir la normale annuelle, il nous suffit de prendre la moyenne de ce DataArray :
da_Tarbes.mean()
Le résultat est encore sous la forme d’un DataArray, ce qui oblige à quelques détours pour obtenir un flottant que l’on va, conformément aux recommandations de l’OMM, arrondir au dixième :
da_Tarbes_normale = da_Tarbes.mean()
normale = round(float(da_Tarbes_normale.values), 1)
On obtient finalement la normale 1981–2010 pour la température annuelle : 11.6°C.
Calcul des normales mensuelles
Une moyenne annuelle, c’est bien mais cela n’aide pas vraiment à savoir si la température du 21 juillet 2020 est ou non normale… Pour cela, une normale mensuelle serait plus utile.
Rien de très compliqué. Reprenons notre DataArray horaire :
lat = 43.2333
lon = 0.0833
dossier = "ERA5Land_Temperature"
da_Tarbes = temperature_horaire(lat, lon, dossier)
On n’a pas vraiment besoin de températures horaires. Commençons donc par rééchantilloner avec un pas de temps quotidien :
da_Tarbes_j = da_Tarbes.resample(time = '1D').mean()
Il suffit ensuite de regrouper par mois de prendre la moyenne :
da_Tarbes_normales_m = da_Tarbes_j.groupby(‘time.month’).mean()
On peut accéder aux valeurs comme précédemment avec .values et voir que la normale pour juillet est de 19.0°C, mais ces résultats seront plus faciles à comprendre sur un graphique :
Et le tour est joué :
C’est simple, non ?
Allons un peu plus loin…
Il est possible de pousser un peu plus loin l’analyse avec, par exemple, une étude des quantiles ou un graphique “boite à moustache” :
Le code pour réaliser ce graphique est le suivant :
Ce graphique nous dit que la médiane de température moyenne journalière en juillet à Tarbes est de 18.9°C avec un troisième quartile à 21.1°C et un maximum à 27.3°C. Autrement dit la moitié des journées de juillet entre 1981 et 2010 ont connu une une température moyenne supérieure à 18.9°C, un quart une température supérieure à 21.1°C et aucune n’a dépassé 27.3°C (en moyenne journalière, il a pu faire plus chaud dans la journée).
Nous sommes désormais bien équipés pour savoir si la température du jour est exceptionnelle ou non.
Conclusion
Quelques remarques avant de conclure. Un des intérêts de ce calcul est qu’une normale a une certaine valeur prédictive : si vous exercez une activité sensible à la chaleur à Tarbes, vous avez maintenant une bonne base pour construire des hypothèses de températures réalistes.
Selon le guide de l’OMM cité plus haut : les normales “servent à déterminer implicitement les conditions auxquelles on peut le plus vraisemblablement s’attendre prochainement en un lieu donné.”
Il y a deux limites : premièrement, ce n’est pas parce qu’un phénomène météorologique ne s’est pas produit en 30 ans qu’il ne se produira pas demain : une journée à 28°C ou 29°C en juillet à Tarbes, c’est certainement peu probable mais ce n’est pas pour autant impossible, même dans un climat stationnaire. Si les enjeux sont importants, une analyse statistique (par exemple avec la théorie des valeurs extrêmes) plus poussée est indispensable.
Le climat a déjà changé. Vous voulez vérifier ? Testez notre application "Ca chauffe" pour visualiser l'évolution de la température chez vous depuis 1950.
Deuxièmement, le climat change rapidement sous l’effet de nos émissions de gaz à effet de serre. Une normale 1981–2010 ne reflète pas nécessairement le climat de 2020 et certainement pas celui de 2050. Pour les projets qui ont une durée de vie longue - projets immobiliers ou infrastructures par exemple, les hypothèses climatiques ne devraient pas s’appuyer sur des moyennes passées. Dans ces contextes, les projections climatiques sont utiles pour fournir une image du climat futur ou au moins pour évaluer les incertitudes.
C’est un sujet que nous avons déjà abordé dans un précédent tutoriel et sur lequel nous proposons de nombreuses études de cas.
Vous l'aurez compris : dans de nombreux domaines, l'étude des normales climatiques est un préalable pour assurer la sécurité et la rentabilité d'un projet. Avec le changement climatique, ces évaluations deviennent plus complexes.
Vous avez besoin d'information à jour et fiable ? Nous pouvons sans doute vous aider. Callendar est une start-up française spécialiste de la mise à disposition de données climatiques. Contactez-nous dès maintenant : nous proposons des solutions simples et adaptées aux besoins des entreprises, des collectivités et des particuliers.