Comment lire et tracer une série temporelle El Niño / La Niña avec Python

Introduction

Pour lire et tracer une série temporelle El Niño / La Niña en Python, une approche simple et fiable consiste à utiliser l’Oceanic Niño Index (ONI) fourni par la NOAA/CPC. L’ONI est basé sur la moyenne glissante sur 3 mois des anomalies de température de surface de la mer (SST) dans la région Niño 3.4, située dans le Pacifique équatorial central.

Que sont El Niño et La Niña ?

El Niño et La Niña correspondent aux deux phases opposées de l’El Niño–Southern Oscillation (ENSO), un mode majeur de variabilité climatique :

  • El Niño correspond à des températures de surface de la mer plus chaudes que la moyenne dans le Pacifique tropical central et oriental. Il peut entraîner des impacts importants, comme une augmentation des précipitations dans certaines régions, par exemple en Amérique du Sud, et des sécheresses dans d’autres, comme en Australie ou en Indonésie.
  • La Niña correspond à des températures de surface de la mer plus froides que la moyenne dans la même région, avec des effets climatiques souvent globalement opposés.

Ces phénomènes influencent les conditions météorologiques à l’échelle globale, notamment les précipitations, les températures, les cyclones tropicaux et même l’activité des feux de végétation. Le suivi d’ENSO est donc essentiel pour les études climatiques et environnementales.

La NOAA définit les événements El Niño / La Niña à l’aide d’un seuil de ±0,5 °C, maintenu pendant 5 saisons chevauchantes consécutives. Il faut noter que les valeurs ONI les plus récentes peuvent être révisées lorsque de nouvelles données deviennent disponibles.

La NOAA fournit l’ONI sous forme de fichier texte simple. D’autres indices liés à ENSO, comme Niño 3.4 ou MEI, sont également disponibles. Actuellement, l’ONI couvre la période allant de 1950 à 2026.

Télécharger l’ONI depuis la NOAA

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import pandas as pd
import matplotlib.pyplot as plt

# Fichier texte ONI fourni par NOAA CPC
url = "https://www.cpc.ncep.noaa.gov/data/indices/oni.ascii.txt"

# Lecture des données
df = pd.read_csv(url, sep=r"\s+")

print(df.head())
print(df.columns)

Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?
Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?

Cette première étape charge directement le jeu de données ONI depuis les serveurs de la NOAA. Le fichier contient généralement les colonnes suivantes :

  • YR → année
  • SEAS → saison glissante sur 3 mois, par exemple DJF, JFM, etc.
  • ANOM → anomalie de température de surface de la mer, en °C

Convertir les saisons en dates et classifier El Niño / Neutral / La Niña

Le fichier contient généralement des colonnes comme YR, SEAS et ANOM.

Si nécessaire, vous pouvez inspecter df.columns et adapter le code ci-dessous.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import pandas as pd
import matplotlib.pyplot as plt

url = "https://www.cpc.ncep.noaa.gov/data/indices/oni.ascii.txt"
df = pd.read_csv(url, sep=r"\s+")

# Conserver uniquement les colonnes nécessaires
# Format NOAA courant : YR, SEAS, ANOM
df = df[["YR", "SEAS", "ANOM"]].copy()

# Associer chaque saison glissante de 3 mois à un mois représentatif
season_to_month = {
    "DJF": 1,
    "JFM": 2,
    "FMA": 3,
    "MAM": 4,
    "AMJ": 5,
    "MJJ": 6,
    "JJA": 7,
    "JAS": 8,
    "ASO": 9,
    "SON": 10,
    "OND": 11,
    "NDJ": 12,
}

df["month"] = df["SEAS"].map(season_to_month)
df["date"] = pd.to_datetime(dict(year=df["YR"], month=df["month"], day=15))

# Classification simple à partir du seuil ONI
df["phase"] = "Neutral"
df.loc[df["ANOM"] >= 0.5, "phase"] = "El Niño"
df.loc[df["ANOM"] <= -0.5, "phase"] = "La Niña"

print(df.head())

Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?
Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?

Ici, nous :

  • convertissons les étiquettes saisonnières en dates, en utilisant le milieu du mois comme approximation ;
  • classons chaque période en El Niño, La Niña ou Neutral, à partir des seuils d’anomalie de température de surface de la mer.

Tracer la série temporelle

Tracer la série temporelle ONI :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
plt.figure(figsize=(14, 5))
plt.plot(df["date"], df["ANOM"], linewidth=1)

# Lignes de seuil
plt.axhline(0.5, linestyle="--", linewidth=1)
plt.axhline(-0.5, linestyle="--", linewidth=1)
plt.axhline(0.0, linewidth=0.8)

# Mettre en évidence les périodes El Niño et La Niña
elnino = df["ANOM"] >= 0.5
lanina = df["ANOM"] <= -0.5

plt.fill_between(df["date"], df["ANOM"], 0.5, where=elnino, alpha=0.3)
plt.fill_between(df["date"], df["ANOM"], -0.5, where=lanina, alpha=0.3)

plt.title("Indice océanique Niño NOAA (ONI)")
plt.xlabel("Temps")
plt.ylabel("Anomalie ONI (°C)")
plt.tight_layout()
plt.show()

Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?
Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?

Cette visualisation met en évidence :

  • les phases chaudes, El Niño, au-dessus de +0,5 °C ;
  • les phases froides, La Niña, en dessous de −0,5 °C ;
  • les conditions neutres entre ces deux seuils.

Pour extraire uniquement les périodes El Niño / La Niña :

1
2
df_events = df[df["phase"] != "Neutral"].copy()
print(df_events[["date", "SEAS", "ANOM", "phase"]].tail(20))

Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?
Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?

Détecter les événements ENSO officiels selon la définition NOAA

Si vous souhaitez détecter des épisodes proches de la définition officielle de la NOAA, et pas seulement les saisons au-dessus ou en dessous du seuil ±0,5 °C, vous pouvez utiliser la règle de persistance sur 5 saisons consécutives :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np

  df["warm"] = df["ANOM"] >= 0.5
  df["cold"] = df["ANOM"] <= -0.5

  # Condition glissante sur 5 saisons
  df["warm5"] = df["warm"].rolling(5, min_periods=5).sum() >= 5
  df["cold5"] = df["cold"].rolling(5, min_periods=5).sum() >= 5

  # Étendre le marquage à l’ensemble des fenêtres de 5 saisons
  warm_idx = set()
  cold_idx = set()

  for i in df.index[df["warm5"]]:
      warm_idx.update(range(i - 4, i + 1))

  for i in df.index[df["cold5"]]:
      cold_idx.update(range(i - 4, i + 1))

  df["phase_official_like"] = "Neutral"
  df.loc[df.index.isin(warm_idx), "phase_official_like"] = "El Niño"
  df.loc[df.index.isin(cold_idx), "phase_official_like"] = "La Niña"

  print(df[["date", "SEAS", "ANOM", "phase_official_like"]].tail(30))

Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?
Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?

Cette étape permet d’obtenir une classification plus cohérente avec la méthodologie officielle utilisée par la NOAA pour identifier les épisodes ENSO.

Indice Niño 3.4 mensuel

Si vous préférez une résolution mensuelle, la NOAA fournit également les anomalies de température de surface de la mer Niño 3.4 basées sur ERSSTv5.

Cette approche est utile si :

  • vous souhaitez une résolution temporelle plus fine ;
  • vous voulez calculer vos propres moyennes glissantes ;
  • vous souhaitez produire des visualisations plus détaillées.

Code Python :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import pandas as pd
  import matplotlib.pyplot as plt

  url = "https://www.cpc.ncep.noaa.gov/data/indices/ersst5.nino.mth.91-20.ascii"
  df = pd.read_csv(url, sep=r"\s+")

  print(df.columns)

  # Colonne d’anomalie Niño 3.4 dans ce fichier
  df = df[["YR", "MON", "ANOM.3"]].copy()
  df = df.rename(columns={"ANOM.3": "ANOM"})

  # Création de la date
  df["date"] = pd.to_datetime(dict(year=df["YR"], month=df["MON"], day=1))

  anom = df["ANOM"]

  plt.figure(figsize=(16, 6))

  # Zones de fond
  plt.axhspan(0.5, anom.max() + 0.2, color="red", alpha=0.08)
  plt.axhspan(-0.5, 0.5, color="gray", alpha=0.08)
  plt.axhspan(anom.min() - 0.2, -0.5, color="blue", alpha=0.08)

  # Courbe principale
  plt.plot(df["date"], anom, color="gray", linewidth=1.2, alpha=0.9)

  # Courbes colorées selon la phase
  plt.plot(df["date"], anom.where(anom >= 0.5), color="red", linewidth=2.5, label="El Niño")
  plt.plot(df["date"], anom.where(anom <= -0.5), color="blue", linewidth=2.5, label="La Niña")
  plt.plot(
      df["date"],
      anom.where((anom > -0.5) & (anom < 0.5)),
      color="gray",
      linewidth=2.0,
      label="Neutral"
  )

  # Zones remplies
  plt.fill_between(df["date"], 0, anom, where=anom >= 0.5, color="red", alpha=0.25)
  plt.fill_between(df["date"], 0, anom, where=anom <= -0.5, color="blue", alpha=0.25)
  plt.fill_between(
      df["date"], 0, anom,
      where=(anom > -0.5) & (anom < 0.5),
      color="gray", alpha=0.15
  )

  # Lignes de seuil
  plt.axhline(0.5, color="red", linestyle="--", linewidth=1)
  plt.axhline(-0.5, color="blue", linestyle="--", linewidth=1)
  plt.axhline(0, color="black", linewidth=0.8)

  plt.title("Anomalies mensuelles de SST Niño 3.4")
  plt.xlabel("Temps")
  plt.ylabel("Anomalie (°C)")
  plt.legend(frameon=False)
  plt.tight_layout()
  plt.show()

Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?
Comment lire et tracer une série temporelle El Niño / La Niña avec Python ?

Cas d’utilisation

L’indice Niño 3.4 n’est pas seulement utile pour la visualisation. Il joue aussi un rôle important dans de nombreuses applications climatiques et environnementales.

Suivi des précipitations et des sécheresses

ENSO influence fortement les régimes de précipitations à l’échelle mondiale. Les événements El Niño sont souvent associés à des conditions plus humides dans certaines régions, comme l’Amérique du Sud ou le sud des États-Unis, tandis que La Niña favorise souvent des précipitations accrues en Australie et en Indonésie. L’indice Niño 3.4 peut donc être utilisé comme indicateur pour évaluer les risques de sécheresse ou d’inondation.

Activité des feux de végétation

ENSO influence la sécheresse de la végétation et la disponibilité du combustible, ce qui peut avoir un effet direct sur l’activité des feux de végétation. Par exemple, les conditions El Niño peuvent augmenter le risque de feux dans certaines régions comme l’Amazonie et l’Indonésie, tandis que La Niña peut renforcer l’activité des feux dans certaines parties de l’Amérique du Nord. Combiner Niño 3.4 avec des jeux de données satellitaires, comme la puissance radiative du feu (Fire Radiative Power, FRP) ou les surfaces brûlées, permet d’étudier la variabilité interannuelle des feux.

Variabilité de la température globale

El Niño et La Niña modulent fortement les anomalies de température globale. Les événements El Niño intenses sont souvent associés à des augmentations temporaires de la température moyenne mondiale, tandis que La Niña a tendance à produire un effet de refroidissement relatif. Cette information est importante pour interpréter les tendances climatiques à long terme.

Cyclones tropicaux

ENSO influence également l’activité cyclonique dans plusieurs bassins océaniques. El Niño tend à réduire l’activité des ouragans dans l’Atlantique, mais peut favoriser l’activité cyclonique dans le Pacifique. La Niña produit généralement l’effet inverse.

Végétation et agriculture

ENSO a des impacts sur les rendements agricoles, la croissance de la végétation et les conditions de sécheresse. L’indice Niño 3.4 peut être combiné avec des indices de végétation dérivés des satellites, comme le NDVI, afin de suivre la réponse des écosystèmes et la productivité agricole.

Observations satellitaires et algorithmes de télédétection

Les variations de couverture nuageuse, d’humidité atmosphérique et d’aérosols liées à ENSO peuvent influencer les algorithmes de télédétection satellitaire. Comprendre la variabilité ENSO peut aider à interpréter les biais et les incertitudes dans les produits d’observation de la Terre.

Références

Liens Site
Indices Niño ERSSTv5 NOAA CPC – Données mensuelles Niño 3.4 utilisées dans ce tutoriel
Oceanic Niño Index (ONI) NOAA CPC – Méthode officielle de classification ENSO
Climate Indices Portal NOAA CPC – Accès à plusieurs jeux de données liés à ENSO
Série temporelle Niño 3.4 NOAA PSL – Jeu de données Niño 3.4 alternatif et documentation
Jeu de données ERSSTv5 NOAA NCEI – Jeu de données SST utilisé pour les indices Niño
Image

of