Baccalauréat — Épreuve pratique — 2026 — NSI
Épreuve pratique NSI 2026 — Sujet 13 : relevés d'un ballon sonde et fichier KML
Sujet
Épreuve pratique de NSI, session 2026 — sujet n°13 de la banque nationale. Durée : 1 heure, sur ordinateur. Le candidat dispose de l'énoncé et de fichiers de code et de données ; il agit en autonomie et, aux « appels professeur » indiqués, présente son travail à l'examinateur ou le sollicite en cas de difficulté.
Relevés d'un ballon sonde
On considère dans ce sujet un fichier CSV de données climatiques (releves_ballon_sonde.csv) de Météo-France obtenues par ballon sonde. Il est gonflé à l'aide d'un gaz léger (hélium) et est équipé d'instruments pour acquérir des paramètres tels que la température en kelvins, l'altitude en mètres et sa géolocalisation. Lorsqu'il est lâché, ce ballon sonde s'élève et collecte des données tout au long de sa trajectoire, puis éclate à une altitude appropriée, ce qui entraîne sa chute au sol avec un parachute pour amortir sa vitesse de descente. Ces données relevées sont essentielles pour les prévisions météorologiques car elles fournissent des informations sur les conditions atmosphériques à différentes altitudes. Pour simplifier l'étude, on ne dispose que de données mesurées durant la montée. (Source : CNES - Planète Sciences.)
Ce sujet propose de concevoir un script Python qui exploite les données météorologiques relevées avec :
- la conversion des valeurs de températures dans une unité plus courante ;
- une recherche de basse température et d'altitude(s) correspondante(s) ;
- la génération d'un fichier d'extension
kml(Keyhole Markup Language) compatible avec de nombreuses applications de cartographie.
On donne une première fonction Python recupere_donnees_fichier_csv(nom_fichier) qui permet d'ouvrir le fichier CSV, de supprimer les en-têtes et de récupérer les données relevées sous forme de 4 listes.
Question 1. En utilisant cette fonction recupere_donnees_fichier_csv, écrire la ou les lignes de code qui récupèrent les données relevées par le ballon sonde dans 4 listes différentes (altitudes, temperatures, longitudes et latitudes).
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
La température en kelvins correspond à la température en degrés Celsius à laquelle on ajoute la valeur 273,15.
Question 2. Écrire en Python une fonction nommée conversion_K_en_C qui prend en paramètre une liste de températures en kelvins (K) et retourne cette même liste de températures, mais converties en degrés Celsius (°C). Les valeurs de températures doivent être arrondies à 1 chiffre après la virgule (commande utilisable : round(valeur, nb chiffres après la virgule)). Écrire une ligne de code permettant de tester la fonction proposée.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
On souhaite disposer d'une fonction nommée altitude_la_plus_froide qui prend en paramètres une liste d'altitudes, ainsi qu'une liste des températures en degrés Celsius. Cette fonction doit renvoyer la température la plus froide, ainsi qu'une liste contenant la ou les altitudes correspondantes. Par exemple, avec les deux listes altitudes et temperatures suivantes :
>>> altitudes = [7000, 10125, 13896, 14211]
>>> temperatures = [-35.2, -52.1, -57.4, -57.4]
>>> altitude_la_plus_froide(altitudes, temperatures)
(-57.4, [13896, 14211])
>>> altitudes = [6000, 7250, 11542, 15214, 17300]
>>> temperatures = [-33.7, -45, -53, -58.5, -60.1]
>>> altitude_la_plus_froide(altitudes, temperatures)
(-60.1, [17300])Question 3. Proposer une écriture de la fonction altitude_la_plus_froide.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
On donne une deuxième fonction Python genere_kml qui prend en paramètres 2 listes (liste_longitudes et liste_latitudes), qui sont les données relevées de géolocalisation du ballon sonde, et les utilise pour générer un fichier d'extension kml. Ce format normalisé utilise des balises ouvrantes et fermantes.
Question 4. Observer le corps de la fonction genere_kml, puis, à l'aide d'une assertion, insérer une ligne de code qui garantit que les deux listes liste_longitudes et liste_latitudes sont de même longueur.
Question 5. Écrire une ligne de code qui appelle la fonction genere_kml avec les deux listes de longitudes et latitudes obtenues à la question 1, puis ouvrir le fichier kml généré dans le même répertoire que le fichier Python.
Après analyse, il s'avère que ce fichier kml généré pose des problèmes de compatibilité avec certains logiciels de cartographie. En effet, la balise kml n'a pas été fermée en toute fin de fichier (</kml> absente).
Question 6. Proposer une amélioration du code visant à répondre à cette difficulté.
Appel professeur — Appeler le professeur pour lui présenter votre réponse ou en cas de difficulté.
Fichiers fournis
Le dossier comporte une version PDF de l'énoncé, le code source de départ etude_climatique.py et le fichier de données météorologiques releves_ballon_sonde.csv.
etude_climatique.py
# ///////////////////////////////////////////////////////////////////////////
# FONCTIONS DONNEES
# ///////////////////////////////////////////////////////////////////////////
def recupere_donnees_fichier_csv(nom_fichier):
""" Fonction qui récupère les données relevées du ballon sonde sans les en-têtes de la 1ère ligne """
altitudes = [] # Initialisation des listes de valeurs relevées
temperatures = []
longitudes = []
latitudes = []
# Ouverture du fichier csv au format releves_ballon_sonde.csv en mode "read"
contenu_fichier = open(nom_fichier, 'r')
# Supprime la 1ère ligne avec les en-têtes
contenu_fichier.readline()
# Parcours des lignes du fichier csv contenant les donnees relevées
for ligne in contenu_fichier.readlines():
# rstrip() supprime les \n et espaces en fin de ligne
ligne = ligne.rstrip()
# création d'une listeValeurs. split(";") sépare les valeurs grâce au ;
listeValeurs = ligne.split(";")
# conversion string en int de l'altitude et insertion dans la liste correspondante
altitudes.append(int(listeValeurs[0]))
# conversion string en float de la température et insertion dans la liste correspondante
temperatures.append(float(listeValeurs[1]))
# conversion string en float de la longitude et insertion dans la liste correspondante
longitudes.append(float(listeValeurs[2]))
# conversion string en float de la latitude et insertion dans la liste correspondante
latitudes.append(float(listeValeurs[3]))
contenu_fichier.close()
return altitudes, temperatures, longitudes, latitudes
def genere_kml(liste_longitudes, liste_latitudes):
""" Fonction qui génère un fichier de données géographiques au format standard international KML
Ce fichier est visionnable ensuite dans différents logiciels
"""
fichier_kml = open(
'ballon sonde.kml', 'w') # Création et ouverture du fichier kml en mode "write"
entete_fichier = '<?xml version="1.0" encoding="UTF-8"?>\n'
entete_fichier += '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
entete_fichier += '<Document>\n'
entete_fichier += '<name>Trajectoire ballon sonde</name>\n'
# Ecriture du contenu de la variable entete_fichier dans le fichier kml
fichier_kml.write(entete_fichier)
for i in range(len(liste_longitudes)):
corps_fichier = '<Placemark>\n'
corps_fichier += f'<name>Point {i}</name>\n'
corps_fichier += '<Point>\n'
corps_fichier += f'<coordinates>{liste_longitudes[i]},{liste_latitudes[i]}</coordinates>\n'
corps_fichier += '</Point>\n'
corps_fichier += '</Placemark>\n'
fichier_kml.write(corps_fichier)
bas_fichier = '</Document>\n'
fichier_kml.write(bas_fichier)
fichier_kml.close() # Fermeture du fichier kml
# ///////////////////////////////////////////////////////////////////////////
# TRAVAIL DEMANDE
# ///////////////////////////////////////////////////////////////////////////
# QUESTION 1
# Compléter ici
# QUESTION 2
def conversion_K_en_C(liste_temperatures):
pass # Ajuster la fonction
# QUESTION 3
def altitude_la_plus_froide(liste_altitudes, liste_temperatures):
pass # Ajuster la fonction
# AUTRES ELEMENTS DE CODEreleves_ballon_sonde.csv (début du fichier, 20 relevés en tout)
Altitude_m;Temperature_K;Longitude;Latitude
0;288.15;4.760467;45.602117
200;286.85;4.760467;45.602167
500;284.85;4.761183;45.60125
1100;281.05;4.766717;45.600117
1800;276.55;4.765183;45.60085
...Corrigé
Créez un compte gratuit : votre première correction est offerte.