Exercice 1 - Manipulation de données en Python · Bac Numérique et Sciences Informatiques Amérique du Sud 2025 (jour 2)

Thème : Modularité, API et paradigmes de programmation · Tiré du sujet Jour 2 (2025)

Énoncé

Exercice 1 (6 points)

Cet exercice porte sur les bases de données relationnelles, les requêtes SQL, la programmation en Python et la manipulation de listes.

Dans cet exercice, on pourra utiliser les clauses du langage SQL pour:

construire des requêtes d'interrogation à l'aide de SELECT, FROM, WHERE (avec les opérateurs logiques AND et OR) et JOIN... ON;

construire des requêtes d'insertion et de mise à jour à l'aide de UPDATE, INSERT et DELETE;

affiner les recherches à l'aide de DISTINCT et ORDER BY.

Le but de cet exercice est d'établir une prédiction de la météo du jour en utilisant les observations du jour précédent de plusieurs stations météorologiques voisines.

Partie A

Une version simplifiée des observations peut être représentée sous forme de tables dont la description est donnée ci-dessous. Les clés primaires ont été soulignées et les clés étrangères sont indiquées par un #:

Dans cette partie, on considère les observations météorologiques de la Nouvelle Calédonie.

La table station contient l'identifiant idStat, le nom nom et les coordonnées géographiques de toutes les stations météorologiques.

La table observation contient l'identifiant idStat de l'observation, la date de l'observation date, la hauteur de précipitation precip, la force du vent forceVent, la direction du vent dirVent et la température temp heure par heure de toutes les stations.

Partie B

Les données collectées sont stockées dans un unique fichier texte au format csv ( Comma Separated Values, valeurs séparées par des virgules). Le module Python csv implémente des classes pour lire et écrire des données tabulaires au format csv.

On fournit ci-dessous un extrait du fichier observations.csv qui donne heure par heure les précipitations en millimètre, la force du vent en mètre par seconde et la direction du vent en degré (de 0 à 360 degrés) ainsi que la température en degré Celsius de la journée du 01/01/2024 pour toutes les stations météorologiques de Nouvelle Calédonie:

Pour la suite de l'exercice, on dispose du code Python donné en annexe ainsi que de la documentation suivante:

DOCUMENTATION:

with open('mon_fichier.csv', 'r') as csvfile, ouvre le fichier mon_fichier.csv en mode lecture (r);

csv.reader(csvfile, delimiter=','), renvoie un objet lecteur, qui intérera sur les lignes de l'objet csvfile donné. Chaque ligne lue depuis le fichier csv est renvoyée comme une liste de chaînes de caractères.

Dans la console, on saisit la suite d'instructions suivante:

>>> liste_obs = creation_liste_obs('observations.csv')

>>> liste_obs = supp_champs(liste_obs)

>>> transtype(liste_obs)

>>> liste_obs[0]

[98801001, 'BELEP AEROD.', -19.719833, 163.661, 88, 2024010100, 0.0, 5.0, 80, 25.7]

6.

Expliquer cette liste de commande et le résultat obtenu.

Dans la suite de l'exercice, la variable liste_obs est initialisée avec les valeurs du fichier observations.csv.

La fonction distance renvoie la distance entre deux points définis par leur latitude et leur longitude. Cette fonction utilise des fonctions du module Python math.

7.

Donner la ligne de commande nécessaire à l'utilisation du module Python math.

On rappelle les informations relatives à une observations sont données dans l'ordre suivant:

ID_STATION, NOM_STATION, LATITUDE, LONGITUDE, ALTITUDE, AAAAMMJJHH, PRECIPITATION, FORCE_VENT, DIR_VENT, TEMPERATURE

8.

Compléter les lignes 40 et 41 de la fonction coord, qui prend en paramètres une liste d'observations l_obs et un nom de station stat_ref, et qui renvoie un tuple composé de sa latitude et sa longitude.

36 def coord(l_obs, stat_ref):

37 """Renvoie la latitude et la longitude données dans la

liste d'observation l_obs de la station stat_ref"""

38 # Cette fonction est à compléter à la question 8.

39 for obs in l_obs:

40 if...:

41 return...,...

On considère la fonction liste_stations qui prend en paramètres une liste d'observations l_obs, un nom de station stat_ref et un flottant dist et qui renvoie la liste des identifiants ID_STATION des stations données dans la liste l_obs situées à une distance inférieure à dist de la station de référence stat_ref.

9.

Écrire un algorithme en pseudo-code de la fonction liste_stations.

10.

Écrire une fonction nettoyage qui prend en paramètres une liste d'observations l_obs et station de référence stat_ref (nom de la station), et qui renvoie la liste des températures des stations données dans la liste d'observations l_obs situées à une distance inférieure à 2000 unités de la station de référence stat_ref.

def nettoyage(l_obs, stat_ref):

11.

Écrire la fonction moyenne qui calcule et renvoie la moyenne de toutes les valeurs de type float contenues dans la liste passée en paramètre.

def moyenne(L):

On considère maintenant le fichier observations2.csv donnant heure par heure les observations de la journée du 01/01/2024 pour toutes les stations météorologiques de France.

12.

Donner les commandes permettant d'obtenir la moyenne des températures des stations situées à moins de 2000 unités de la station Paris_11 le 1 er janvier 2024.

Énoncé: Exercice 1 - Manipulation de données en Python · Bac Numérique et Sciences Informatiques Amérique du Sud 2025 (jour 2)

Corrigé

Corrigé proposé par AprenAI (non officiel)

6. Expliquer cette liste de commande et le résultat obtenu.

Réponse : Les instructions réalisent les étapes suivantes : 1. `liste_obs = creation_liste_obs('observations.csv')` lit le fichier CSV et charge l'ensemble des lignes sous forme d'une liste de listes de chaînes de caractères. 2. `liste_obs = supp_champs(liste_obs)` supprime la première ligne (les en-têtes de colonnes) pour ne conserver que les lignes de données. 3. `transtype(liste_obs)` modifie en place chaque enregistrement en convertissant chaque champ dans le type numérique approprié (entier ou flottant selon la grandeur) à l'exception du nom de la station qui reste une chaîne de caractères. 4. `liste_obs[0]` affiche le premier enregistrement de données ainsi nettoyé et converti.

7. Donner la ligne de commande nécessaire à l'utilisation du module Python math.

Réponse : ```python import math ```

8. Condition de la ligne 40 de la fonction coord :

Réponse : ```python obs[1] == stat_ref ```

8. Valeur renvoyée à la ligne 41 de la fonction coord :

Réponse : ```python (obs[2], obs[3]) ```

Les réponses des 4 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium

Résous-le ici : correction automatique, indices et corrigé détaillé.