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.
Structure d'un relevé (dictionnaire)
'AAAA-MM-JJ' — ex : '2020-08-22'
'Lille', 'Amiens'
18.5
Fonction temperature_moyenne
Calcul de la moyenne des relevés pour une station donnée
Écrire une fonction temperature_moyenne(station, donnees) qui :
- Prend en paramètres une chaîne
station(nom d'une ville) et un tableaudonneesde dictionnaires représentant les relevés - Renvoie la température moyenne (float) pour cette station
- Renvoie
Nonesi la station n'a aucun relevé
Exemple d'utilisation
{'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)
>>>
Fonction detecter_anomalies
Détection des relevés qui s'écartent trop de la moyenne
Écrire une fonction detecter_anomalies(station, seuil, donnees) qui :
- Prend en paramètres une
station, unseuil(float), et la listedonnees - 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
seuildegrés (en valeur absolue) de cette moyenne - Renvoie une liste vide si la station n'existe pas
Exemple d'utilisation
['2020-01-15', '2020-07-10']
>>> detecter_anomalies('Arras', 5.0, donnees)
[]
É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.
- test_station_inexistante() — Tester une station qui n'existe pas dans
donnees_testet 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() |
Correction du bug
Identifier et corriger l'erreur dans evolution_par_decennie
Après avoir identifié le bug grâce à vos tests, corriger la fonction
evolution_par_decennie dans le fichier Python.
# 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
{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)
# Calcul de la décennie — version corrigée decennie = (annee // 10) * 10 # 2021 → 201 → 2010 ✓