Accueil

Corrigé Sujet N°16

- Warming Stripes : Visualisation du Réchauffement Climatique -

Vous pouvez télécharger les éléments suivants en cliquant sur les boutons associés :
Sujet (PDF) Fichier Python Initial Données CSV (NOAA)
Fichier Python Corrigé

Question 1

Écrire la fonction ecart_temperature(datas, annee) qui renvoie l'écart de température pour l'année donnée, ou None si l'année est absente. Rédiger ensuite un jeu de tests via des assertions.
Correction : On parcourt la liste de dictionnaires à la recherche de l'année cible. Si on la trouve on retourne l'écart associé ; si la boucle se termine sans succès on retourne None.

def ecart_temperature(datas, annee):
    """Renvoie l'écart pour l'année donnée, ou None si absente."""
    for element in datas:
        if element["année"] == annee:
            return element["écart"]
    return None

# Jeu de tests
assert ecart_temperature(datas_temperature, 1851) == -0.15   # première entrée du CSV
assert ecart_temperature(datas_temperature, 2020) ==  1.01   # valeur connue
assert ecart_temperature(datas_temperature, 9999) is None    # année absente
                

Question 2 – Dernière année avec écart négatif : En exécutant derniere_annee_ecart_negatif(datas_temperature) avec la fonction corrigée, on obtient 1976, la dernière année où la température mondiale était inférieure à la moyenne de référence 1901–2000.

Question 3

L'appel prevision(datas, 2040, 20) donne un résultat absurde. Une erreur logique s'est glissée dans moyenne_ecarts. L'identifier, la corriger, puis annoncer la prévision pour 2040.
Identification du bug : Dans la boucle de moyenne_ecarts, la ligne est somme = somme - dico["écart"]. Elle soustrait chaque écart au lieu de l'ajouter. Cela inverse le signe de la moyenne des températures, ce qui fausse le calcul de la droite de régression et donne une prévision en sens inverse du réchauffement réel.

def moyenne_ecarts(annee_debut, annee_fin, datas):
    somme = 0
    compteur = 0
    for dico in datas:
        if annee_debut <= dico["année"] <= annee_fin:
            somme = somme + dico["écart"]   # CORRECTION : + au lieu de -
            compteur += 1
    return somme / compteur

# Après correction :
print(prevision(datas_temperature, 2040, 20))
# Résultat attendu : environ +1.8 °C, cohérent avec la tendance au réchauffement
                

Question 4

Compléter la fonction graphique(datas) en générant les listes annees (abscisses) et ordonnees. Pour des bandes de hauteur uniforme, ordonnees doit contenir la valeur 1 pour chaque année.
Correction : On extrait l'année de chaque dictionnaire pour construire annees. ordonnees est simplement une liste de 1 de la même longueur : chaque barre du graphique aura une hauteur de 1, et c'est la couleur (calculée à partir des températures) qui porte l'information.

def graphique(datas):
    fig, ax = plt.subplots(figsize=(10, 2))
    cmap = plt.get_cmap("seismic")
    temperatures = [dico["écart"] for dico in datas]
    max_val = max(max(temperatures), -min(temperatures))
    norm = plt.Normalize(-max_val, max_val)

    # QUESTION 4 : listes à remplir
    annees    = [dico["année"] for dico in datas]  # une abscisse par année
    ordonnees = [1 for _ in datas]                 # hauteur uniforme = 1 pour toutes les barres

    ax.bar(annees, ordonnees, width=1.0, color=cmap(norm(temperatures)))
    ax.set_title("Warming Stripes mondiales - Base 1901-2000")
    plt.yticks([], [])
    ax.set_xlabel("Année")
    plt.tight_layout()
    plt.show()
                

Interprétation : Le graphique obtenu montre des bandes bleues dominantes jusqu'à la fin du 19ème siècle, puis une transition progressive vers les tons rouges intenses à partir des années 1980–1990, illustrant visuellement l'accélération du réchauffement climatique.