[Data & crise] Saison #3 E1 — Super Caméléon enquête sur le changement climatique
🍃 Après avoir voyagé sur les cimes de la jungle avec Super Monkey, pour ce tout premier épisode d’une saison dédiée exclusivement au changement climatique, accueillons Super Caméléon, notre roi de l’adaptation!
Ici, il va s’intéresser aux projections. Quelles températures horizon 2069 à Paris, Madrid, Buenos Aires… ou encore Le Caire?
Nous allons progressivement vous montrer comment exploiter le format type d’output de modèle climatique (fichier NetCDF), et comment créer une carte interactive permettant de mettre en lumière plusieurs grandeurs climatiques.
1) Exploration des datasets (jeux de données)
Les datasets que nous utilisons proviennent de la base de données du World Climate Research Programme, qui regroupe les outputs de nombreux modèles climatiques. Nous avons choisi les résultats du modèle du German Climate Computing Centre, présentant les projections de températures maximales quotidiennes, selon le scénario SSP585.
SSP signifie Shared Socioeconomic Pathway, et sa spécification en 585 signifie que le scénario en question décrit un développement traditionnel et rapide des pays en voie de développement fondé sur une forte consommation d’énergie, ainsi qu’une situation business as usual, où peu d’efforts de mitigation des émissions de CO2 sont entrepris.
Nous avons donc récupéré ces données pour deux horizons différents. Le premier (que nous appellerons dataset de référence) est un horizon assez proche, 2025–2029. Le second est à un horizon plus lointain, 2065–2069.
En imprimant ses clés (.keys) , il est possible de voir toutes les méta données qui sont attribuées au dataset.
with xr.open_dataset(“/content/tasmax_day_MPI-ESM1–2-HR_ssp585_r1i1p1f1_gn_20250101–20291231.nc”) as dataset_ref:
print(dataset_ref.keys())KeysView(<xarray.Dataset> Dimensions: (bnds: 2, lat: 192, lon: 384, time: 1826)
Coordinates:
* time (time) datetime64[ns] 2065-01-01T12:00:00 ... 2069-
12-31T12:00:00
* lat (lat) float64 -89.28 -88.36 -87.42 -86.49 ... 87.42
88.36 89.28
* lon (lon) float64 0.0 0.9375 1.875 2.812 ... 356.2 357.2
358.1 359.1 height float64 ...
Dimensions without coordinates: bnds
Data variables:
time_bnds (time, bnds) datetime64[ns] ...
lat_bnds (lat, bnds) float64 ...
lon_bnds (lon, bnds) float64 ...
tasmax (time, lat, lon) float32 ...)
Le fichier se présente ainsi sous la forme d’un Xarray. Pour faire simple, ce sont des tableaux multidimensionnels. Les dimensions sont ici la latitude, la longitude et le temps. La variable d’intérêt est la température quotidienne prédite par le modèle: tasmax.
Après extraction des dimensions et de la tasmax, conversion des températures (de Kelvin à Celsius), nous définissons plusieurs fonctions pour obtenir une série temporelle de projections climatiques, en rentrant des coordonnées GPS en input (entrée).
# détermine la longitude la plus proche de celle que l'on donne en inputdef nearest_lon(value):
idx=(np.abs(np.asarray(lon)-get_netcdf_longitude(value))).argmin()
return idx# détermine la latitude la plus proche de celle que l'on donne en inputdef nearest_lat(value):
idx=(np.abs(np.asarray(lat)-value)).argmin()
return idx # extrait la tasmax via les latitude et longitude déterminées ci-dessusdef extract_time_series_tasmax(datanc,latitude,longitude):
ts_tasmax = datanc.isel(lat = nearest_lat(latitude), lon =
nearest_lon(longitude))
ts_tasmax = ts_tasmax.data
return ts_tasmax
2) Visualisation en 2 dimensions d’une série temporelle des températures à une localisation précise
Avec tout ce travail préliminaire en amont, Super Caméléon peut enfin commencer à visualiser les données climatiques! Ici, il visualise la série temporelle des températures projetées pour Paris.
On peut voir qu’avec un écart de 40 ans, plus de pics de chaleur sont observés, notamment en été.
3) Visualisation sous forme de carte thermique
Il est plus simple de visualiser les températures à l’échelle globale grâce à des cartes thermiques. Super Caméléon fait donc quelques opérations sur son dataset afin d’avoir une meilleure idée du climat de notre planète dans quelques années. L’objectif est donc d’obtenir une unique valeur pour chaque saison.
On commence donc par ne prendre que les températures maximales de chaque mois, puis on fait une moyenne par saison, sur les 5 années inclues dans le dataset. Ceci permet de visualiser les températures maximales projetées de chaque saison en moyenne sur 5 ans. On travaille ici sur le dataset avec l’horizon le plus lointain.
Ces cartes thermiques (horizon 2065–2069) sont utiles pour visualiser les fortes variations de températures à l’échelle globale, entre les régions ou les saisons par exemple. Cependant elle ne permettent pas de se rendre compte des changements de quelques degrés, notamment pour la même saison et même localisation, mais à des horizons différents.
4) Visualisation sous forme de carte interactive
Super Caméléon a donc cherché un autre moyen d’obtenir des informations pertinentes sur les changements de températures, et de les visualiser.
Il crée d’abord un dataset avec quelques villes et leurs coordonnées GPS, puis il définit des fonctions permettant d’extraire le minimum, maximum et la moyenne des températures projetées pour les deux horizons différents. Il compte aussi le nombre de jours au dessus de 30 degrés, ainsi que le nombre de jours en dessous de 0 degrés.
data = {
'city': ['Paris', 'Lille', 'Montpellier', 'Madrid',
'London', "New-York", "Beijing", "Buenos Aires",
"Melbourne", "Moscou", "Le Caire", "Mexico", "Nairobi",
"Tokyo", "Toronto"],
'latitude': [48.856614, 50.62925, 43.610769, 40.4167,
51.509865,40.712784, 39.916668, -34.603722, -37.814,
55.75222, 30.06263, 19.42847, -1.28333, 35.6895, 43.70011], 'longitude': [2.3522219,3.057256,3.876716,-3.70325,
-0.118092, -74.005941, 116.383331, -58.381592, 144.96332,
37.61556, 31.24967, -99.12766,36.81667, 139.69171,
-79.4163]
}# création du dataframe avec les villes et leurs coordonnées GPS
df = pd.DataFrame(data)# création des variables mentionnées ci-dessus
def extract_variables(row):
ts_ref = extract_time_series_tasmax(tasmax_ref,row.latitude,
row.longitude)
hottest_day_ref = max(ts_ref)
coldest_day_ref = min(ts_ref)
average_temperature_ref = np.mean(ts_ref)
nb_heat_days_ref = sum(ts_ref>30)
nb_frost_days_ref = sum(ts_ref<0)
ts = extract_time_series_tasmax(tasmax,row.latitude,row.longitude)
hottest_day = max(ts)
coldest_day = min(ts)
average_temperature = np.mean(ts)
nb_heat_days = sum(ts>30)
nb_frost_days = sum(ts<0)
return hottest_day_ref, coldest_day_ref, average_temperature_ref,
nb_heat_days_ref, nb_frost_days_ref, hottest_day, coldest_day,
average_temperature, nb_heat_days, nb_frost_days# Toujours fermer les fichiers NetCDF pour ne pas les endommager
dataset.close()
dataset_ref.close()
C’est parti pour un beau voyage à travers le temps et l’espace en restant tranquillement chez vous 😎
👏🏼Bravo à Alizé Goetz pour avoir réalisé l’intégralité du code de cet épisode !
Et merci d’avoir suivi cette première aventure de Super Caméléon, et rendez-vous mi-octobre pour la suite 🌱