Sujet 18 — Variante 🌍 Hauts-de-France Données · Fonctions · Tests

Températures en
Hauts-de-France

Un réseau de stations météorologiques mesure quotidiennement la température de l'air dans quatre villes des Hauts-de-France. Ces données permettent de suivre l'évolution du climat dans le Nord de la France.

1 heure analyse_temperatures_hdf.py Terminale NSI · Partie pratique

Contexte & Structure des données

En Hauts-de-France, un réseau de stations météorologiques mesure quotidiennement la température de l'air dans quatre villes : Lille, Amiens, Arras et Calais. Ces relevés permettent d'analyser les tendances climatiques dans le Nord de la France sur plusieurs décennies. Vous êtes chargé(e) de développer des outils d'analyse pour traiter ces relevés et détecter les anomalies thermiques.

Lille
Amiens
Arras
Calais

Structure d'un relevé (dictionnaire)

'date' str format 'AAAA-MM-JJ' — ex : '2020-08-22'
'station' str nom de la ville — ex : 'Lille', 'Amiens'
'temperature' float température en °C — ex : 18.5
1

Fonction temperature_moyenne

Calcul de la moyenne des relevés pour une station donnée

Question 1

Écrire une fonction temperature_moyenne(station, donnees) qui :

  • Prend en paramètres une chaîne station (nom d'une ville) et un tableau donnees de dictionnaires représentant les relevés
  • Renvoie la température moyenne (float) pour cette station
  • Renvoie None si la station n'a aucun relevé

Exemple d'utilisation

>>> donnees = [
    {'date': '2020-01-15', 'station': 'Lille', 'temperature': 3.5},
    {'date': '2020-07-10', 'station': 'Lille', 'temperature': 21.0},
    {'date': '2020-01-15', 'station': 'Amiens', 'temperature': 4.2}
]
>>> temperature_moyenne('Lille', donnees)
12.25
>>> temperature_moyenne('Arras', donnees)
>>>
✋ Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
2

Fonction detecter_anomalies

Détection des relevés qui s'écartent trop de la moyenne

Question 2

Écrire une fonction detecter_anomalies(station, seuil, donnees) qui :

  • Prend en paramètres une station, un seuil (float), et la liste donnees
  • Calcule la température moyenne de la station (en utilisant la fonction de la question 1)
  • Renvoie la liste des dates où la température s'écarte de plus de seuil degrés (en valeur absolue) de cette moyenne
  • Renvoie une liste vide si la station n'existe pas

Exemple d'utilisation

>>> detecter_anomalies('Lille', 8.0, donnees)
['2020-01-15', '2020-07-10']
>>> detecter_anomalies('Arras', 5.0, donnees)
[]
✋ Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
3

Écriture des tests

Tester la fonction evolution_par_decennie pour trouver son bug

Le fichier analyse_temperatures_hdf.py contient la fonction evolution_par_decennie(station, donnees), censée calculer la température moyenne par décennie (2010, 2020) pour une station. Cette fonction contient un bug volontaire.

Attention : la fonction contient un bug volontaire à détecter. Vos tests doivent permettre de le mettre en évidence avant de le corriger à la question 4.
Question 3 — Compléter les trois fonctions de test
  • test_station_inexistante() — Tester une station qui n'existe pas dans donnees_test et vérifier que le résultat est un dictionnaire vide
  • test_une_seule_decennie() — Tester la station Calais (données uniquement en 2020) et vérifier que le résultat ne contient qu'une seule décennie
  • test_plusieurs_decennies() — Tester la station Lille (données en 2010 et 2020) et vérifier que le résultat contient bien les clés 2010 et 2020
Station Décennies présentes Nb relevés Usage recommandé
Lille 2010 & 2020 6 test_plusieurs_decennies()
Amiens 2010 & 2020 3 Test supplémentaire possible
Calais 2020 uniquement 3 test_une_seule_decennie()
« Dunkerque » 0 test_station_inexistante()
4

Correction du bug

Identifier et corriger l'erreur dans evolution_par_decennie

Question 4

Après avoir identifié le bug grâce à vos tests, corriger la fonction evolution_par_decennie dans le fichier Python.

Python — code à corriger
# Extraction de l'année
annee = int(releve['date'].split('-')[0])

# Calcul de la décennie  ← BUG ICI
decennie = (annee // 10)       # renvoie 201 au lieu de 2010

Comportement attendu après correction

>>> evolution_par_decennie('Lille', donnees_test)
{2010: 13.6, 2020: 22.63}
>>> evolution_par_decennie('Calais', donnees_test)
{2020: 12.5}
>>> evolution_par_decennie('Dunkerque', donnees_test)
{}
🔍 Afficher la correction (après avoir essayé vous-même)
Python — correction
# Calcul de la décennie — version corrigée
decennie = (annee // 10) * 10   # 2021 → 201 → 2010 ✓
✋ Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.