Ressources · 2ⁿᵈᵉ · Sciences numériques et technologie (SNT)
Traitement et visualisation des données
Rechercher, trier, filtrer, croiser des tables et représenter des données, avec un tableur ou Python (SNT de 2nde)
À propos de cette page
Exercices corrigés, classés du plus simple au plus complexe. Cherche d'abord seul au brouillon, puis déplie la correction détaillée pour vérifier ta méthode et tes raisonnements.
Exercice 1 — Lire, filtrer et trier une table
FacileVoici un extrait du registre des emprunts du CDI d'un lycée.
| Titre | Genre | Année | Emprunts |
|---|---|---|---|
| Le Jardin d'hiver | Roman | 2011 | 14 |
| Code secret | Policier | 2019 | 23 |
| Atlas des volcans | Documentaire | 2016 | 9 |
| La Nuit du port | Policier | 2008 | 17 |
| Mille étoiles | Roman | 2021 | 12 |
- a) Combien cette table compte-t-elle d'enregistrements et de descripteurs ? Citer les descripteurs.
- b) Quelles lignes restent après le filtre « Genre = Policier » ?
- c) Donner l'ordre des titres après un tri par année croissante.
- d) Calculer le nombre total d'emprunts, puis le nombre moyen d'emprunts par livre.
a) Chaque ligne décrit un livre : il y a 5 enregistrements. Chaque colonne est un descripteur : il y en a 4, Titre, Genre, Année et Emprunts.
b) On ne garde que les lignes dont la valeur du descripteur Genre est « Policier » : Code secret et La Nuit du port. Les trois autres lignes sont écartées (masquées au tableur).
c) On range les lignes selon l'année, de la plus ancienne à la plus récente : 2008, 2011, 2016, 2019, 2021. L'ordre est donc La Nuit du port, Le Jardin d'hiver, Atlas des volcans, Code secret, Mille étoiles. Chaque ligne se déplace avec toutes ses valeurs.
d) Total : 14 + 23 + 9 + 17 + 12 = 75 emprunts. Moyenne : 75 ÷ 5 = 15 emprunts par livre.
Exercice 2 — Formules de tableur sur des relevés météo
FacileUne station météo relève chaque jour d'une semaine la température maximale (colonne B, en °C) et les précipitations (colonne C, en mm). Les jours sont en A2:A8.
| A : Jour | B : Temp. max (°C) | C : Pluie (mm) |
|---|---|---|
| Lundi | 18,4 | 0 |
| Mardi | 21,7 | 0 |
| Mercredi | 16,2 | 3,5 |
| Jeudi | 14,9 | 8,1 |
| Vendredi | 17,3 | 1,2 |
| Samedi | 22,6 | 0 |
| Dimanche | 19,8 | 0 |
- a) Écrire la formule qui donne la température maximale de la semaine, et donner son résultat.
- b) Écrire la formule qui donne la moyenne des températures maximales, et calculer son résultat.
- c) Écrire une formule qui compte les jours sans pluie, et donner son résultat.
- d) Calculer le total des précipitations de la semaine.
a) =MAX(B2:B8) renvoie la plus grande valeur de la plage : 22,6 °C (samedi).
b) =MOYENNE(B2:B8). Somme : 18,4 + 21,7 + 16,2 + 14,9 + 17,3 + 22,6 + 19,8 = 130,9. Moyenne : 130,9 ÷ 7 = 18,7 °C.
c) Un jour sans pluie a la valeur 0 en colonne C : =NB.SI(C2:C8;0) compte ces cellules. Lundi, mardi, samedi et dimanche : 4 jours.
d) =SOMME(C2:C8) : 0 + 0 + 3,5 + 8,1 + 1,2 + 0 + 0 = 12,8 mm.
Exercice 3 — Choisir la bonne représentation
FacilePour chaque situation, choisir le type de graphique le plus adapté et justifier en une phrase.
- a) Le nombre d'abonnés d'une salle de sport, relevé chaque mois pendant un an.
- b) La répartition des 1 240 élèves d'un lycée selon leur mode de transport principal.
- c) Le nombre de médailles obtenues par cinq pays lors d'une compétition.
- d) La taille et la pointure de 30 élèves, pour savoir si ces deux grandeurs sont liées.
a) Il s'agit d'une évolution dans le temps : on trace une courbe, les mois en abscisse et le nombre d'abonnés en ordonnée. Les points reliés montrent les hausses et les baisses.
b) On veut les parts d'un tout (les 1 240 élèves) : un diagramme circulaire convient, chaque secteur ayant un angle proportionnel à l'effectif du mode de transport.
c) On compare des catégories sans ordre naturel : un diagramme en barres, avec un axe des valeurs partant de 0.
d) On étudie le lien entre deux descripteurs numériques d'un même objet : un nuage de points, chaque élève étant un point (taille, pointure). Si les points s'alignent grossièrement, les deux grandeurs varient ensemble.
Exercice 4 — Stations de vélos en libre-service
MoyenUn programme Python décrit cinq stations de vélos :
stations = [
{'nom': 'Gare', 'velos': 12, 'places': 3},
{'nom': 'Mairie', 'velos': 4, 'places': 11},
{'nom': 'Port', 'velos': 0, 'places': 15},
{'nom': 'Lycée', 'velos': 7, 'places': 5},
{'nom': 'Stade', 'velos': 9, 'places': 2}
]
vides = []
for s in stations:
if s['velos'] == 0:
vides.append(s['nom'])
print(vides)
- a) Qu'affiche ce programme ? Quelle opération sur la table réalise-t-il ?
- b) Écrire une instruction qui construit la liste des noms des stations ayant au moins 5 places libres, et donner cette liste.
- c) Un élève écrit la condition
s['places'] > 5pour la question b). Expliquer son erreur et ses conséquences. - d) Écrire une instruction qui calcule le nombre total de vélos disponibles, et donner le résultat.
a) La boucle parcourt les stations et ne retient que celles dont la valeur de velos vaut 0 : c'est un filtre. Seule la station Port est concernée, le programme affiche ['Port'].
b) « Au moins 5 » se traduit par >= 5 :dispo = [s['nom'] for s in stations if s['places'] >= 5]
Mairie (11), Port (15) et Lycée (5) vérifient la condition : ['Mairie', 'Port', 'Lycée'].
c) La condition > 5 signifie « strictement plus de 5 » : elle exclut la valeur 5. La station Lycée, qui a exactement 5 places, disparaît et l'élève obtient ['Mairie', 'Port'], soit 2 stations au lieu de 3. L'erreur porte sur le cas limite.
d) total = sum([s['velos'] for s in stations]). Calcul : 12 + 4 + 0 + 7 + 9 = 32 vélos.
Exercice 5 — Un tri qui ne marche pas
MoyenUn programme lit dans un fichier CSV les meilleurs scores de quatre joueurs et obtient la liste scores = ['87', '105', '9', '64'].
- a) Quel est le type des éléments de cette liste ? Justifier.
- b) Que renvoie
sorted(scores)? Expliquer ce résultat. - c) Écrire une instruction qui produit la liste des scores sous forme de nombres entiers, triés par ordre croissant, et donner le résultat.
- d) Écrire une instruction qui donne le classement par score décroissant, et donner le résultat.
a) Chaque élément est écrit entre apostrophes : ce sont des chaînes de caractères (type str). C'est normal, car un fichier CSV ne contient que du texte.
b) Python compare les chaînes caractère par caractère, selon l'ordre des caractères : il compare d'abord les premiers chiffres, '1' < '6' < '8' < '9'. On obtient ['105', '64', '87', '9'] : c'est un ordre alphabétique, pas un ordre numérique. '9' est placé en dernier car son premier caractère est le plus grand.
c) On convertit chaque chaîne avec int puis on trie :sorted([int(x) for x in scores]) renvoie [9, 64, 87, 105].
d) On ajoute reverse=True :sorted([int(x) for x in scores], reverse=True) renvoie [105, 87, 64, 9].
Exercice 6 — Croiser les élèves et les options
MoyenDeux tables sont extraites du logiciel de vie scolaire.
Table Élèves
| Nom | Classe | Code option |
|---|---|---|
| Inès | 2nde 3 | LAT |
| Hugo | 2nde 1 | SI |
| Maëlle | 2nde 3 | EPS |
| Tom | 2nde 2 | LAT |
| Sacha | 2nde 1 | CAV |
| Code | Intitulé | Salle |
|---|---|---|
| SI | Sciences de l'ingénieur | A04 |
| LAT | Latin | B12 |
| EPS | Éducation physique renforcée | Gymnase |
- a) Quel descripteur permet de croiser les deux tables ?
- b) Construire la table obtenue en ajoutant à chaque élève l'intitulé et la salle de son option.
- c) Quels élèves ont cours en salle B12 ?
- d) Que se passe-t-il pour Sacha ? Proposer une façon de traiter ce cas.
a) Le descripteur commun est le code de l'option : « Code option » dans la table Élèves et « Code » dans la table Options contiennent les mêmes valeurs (LAT, SI, EPS). Les noms des colonnes peuvent différer, ce sont les valeurs qui doivent correspondre.
b) Pour chaque élève, on cherche son code dans la table Options et on recopie l'intitulé et la salle :
| Nom | Classe | Code | Intitulé | Salle |
|---|---|---|---|---|
| Inès | 2nde 3 | LAT | Latin | B12 |
| Hugo | 2nde 1 | SI | Sciences de l'ingénieur | A04 |
| Maëlle | 2nde 3 | EPS | Éducation physique renforcée | Gymnase |
| Tom | 2nde 2 | LAT | Latin | B12 |
| Sacha | 2nde 1 | CAV | ? | ? |
c) On filtre la table fusionnée sur « Salle = B12 » : Inès et Tom, tous deux inscrits en latin.
d) Le code CAV n'existe pas dans la table Options : la ligne de Sacha n'a aucune correspondance, son intitulé et sa salle restent vides. On peut soit écarter la ligne (la table fusionnée n'a alors que 4 lignes), soit la conserver en la signalant, puis compléter la table Options avec l'option manquante. Il ne faut surtout pas inventer une salle.
Exercice 7 — Nettoyer les réponses d'un sondage
MoyenUn formulaire en ligne demande aux élèves leur temps d'écran quotidien, en heures. Le fichier exporté contient :
| Prénom | Temps d'écran |
|---|---|
| Lina | 3,5 |
| Yanis | 2 h |
| Lina | 3,5 |
| Chloé | |
| Adam | 4.25 |
| Noé | 1,75 |
- a) Relever les quatre défauts de cette table qui empêchent un calcul correct.
- b) Écrire la table nettoyée.
- c) Montrer que le temps d'écran moyen vaut 2,875 h, puis le convertir en heures et minutes.
- d) Un élève calcule la moyenne sur les six lignes en remplaçant la case vide par 0. Quel résultat obtient-il ? Expliquer pourquoi il est faux.
a) 1) La ligne de Lina apparaît deux fois : c'est un doublon. 2) La réponse de Chloé est une case vide (valeur manquante). 3) « 2 h » contient une unité dans la case : ce n'est pas un nombre pour le tableur. 4) « 4.25 » utilise un point décimal alors que les autres valeurs utilisent la virgule : format hétérogène.
b) On supprime le doublon, on écarte la ligne vide (on ne connaît pas la réponse de Chloé) et on harmonise les nombres : Lina 3,5 ; Yanis 2 ; Adam 4,25 ; Noé 1,75.
c) Somme : 3,5 + 2 + 4,25 + 1,75 = 11,5. Il reste 4 valeurs, donc moyenne = 11,5 ÷ 4 = 2,875 h. Or 0,875 × 60 = 52,5 min, soit 2 h 52 min 30 s.
d) Il obtient (3,5 + 2 + 3,5 + 0 + 4,25 + 1,75) ÷ 6 = 15 ÷ 6 = 2,5 h. C'est faux pour deux raisons : Lina est comptée deux fois, et Chloé n'a pas déclaré 0 h, sa réponse est inconnue. Une case vide n'est pas un zéro : la moyenne est tirée vers le bas.
Exercice 8 — Fréquentation d'un réseau de transport
DifficileDocument 1. Données ouvertes (fictives) d'un réseau urbain : validations de titres de transport pendant une semaine.
| Ligne | Type | Validations | Longueur (km) |
|---|---|---|---|
| L1 | Tram | 58 340 | 12,4 |
| L2 | Bus | 21 870 | 9,6 |
| L3 | Bus | 14 205 | 15,2 |
| L4 | Tram | 46 110 | 8,9 |
| L5 | Bus | 9 480 | 6,1 |
- 1. Appliquer le filtre « Type = Bus » et calculer le nombre total de validations des bus, puis celui des trams.
- 2. Calculer la part des validations réalisées en tram, en pourcentage arrondi au dixième.
- 3. Calculer pour chaque ligne le nombre de validations par kilomètre de ligne (arrondi au dixième), puis classer les lignes par ordre décroissant de ce nombre.
- 4. Comparer ce classement avec le classement selon le nombre brut de validations. Quelles lignes changent de place ?
- 5. Expliquer pourquoi le graphique du document 2 est trompeur, en comparant le rapport apparent et le rapport réel des validations de L2 et L5.
- 6. La mairie veut renforcer en priorité la ligne de bus la plus chargée au kilomètre. Laquelle choisir ? Rédiger une réponse argumentée.
1. Le filtre garde L2, L3 et L5. Bus : 21 870 + 14 205 + 9 480 = 45 555 validations. Trams (L1 et L4) : 58 340 + 46 110 = 104 450 validations.
2. Total : 45 555 + 104 450 = 150 005. Part du tram : 104 450 ÷ 150 005 × 100 ≈ 69,6 %. Près de sept validations sur dix se font en tram.
3. On divise les validations par la longueur :
L1 : 58 340 ÷ 12,4 ≈ 4 704,8 ; L2 : 21 870 ÷ 9,6 ≈ 2 278,1 ; L3 : 14 205 ÷ 15,2 ≈ 934,5 ; L4 : 46 110 ÷ 8,9 ≈ 5 180,9 ; L5 : 9 480 ÷ 6,1 ≈ 1 554,1.
Classement décroissant : L4, L1, L2, L5, L3.
4. Selon le nombre brut, l'ordre est L1, L4, L2, L3, L5. Le calcul par kilomètre inverse L1 et L4, ainsi que L3 et L5 ; seule L2 garde sa 3e place. Chaque ligne ne bouge que d'un rang, mais le changement le plus parlant concerne L3, qui passe de la 4e à la dernière place : elle a beaucoup de validations seulement parce qu'elle est très longue (15,2 km). Un indicateur rapporté à la taille change la conclusion.
5. Avec un axe partant de 9 000, les hauteurs des barres sont proportionnelles à « validations − 9 000 » : L2 → 12 870 et L5 → 480. Rapport apparent : 12 870 ÷ 480 ≈ 26,8. Rapport réel : 21 870 ÷ 9 480 ≈ 2,3. Le graphique multiplie l'écart visuel par plus de dix : c'est un axe tronqué. Pour un diagramme en barres, l'axe doit commencer à 0.
6. Parmi les bus, les validations par kilomètre valent 2 278,1 (L2), 1 554,1 (L5) et 934,5 (L3). La ligne la plus chargée au kilomètre est donc L2. Il faut écarter l'argument du nombre brut, qui avantage les lignes longues, et celui du graphique du document 2, qui déforme les écarts. On peut nuancer : une semaine de données ne suffit pas, il faudrait vérifier sur plusieurs semaines et tenir compte des heures de pointe.
Exercice 9 — Compteurs de vélos : un programme à corriger
DifficileDocument 1. Début du fichier comptages.csv (séparateur point-virgule) :
compteur;jour;passages
Quai;lundi;452
Quai;mardi;387
Pont;lundi;1205
Pont;mardi;96
Parc;lundi;618
Parc;mardi;274Document 2. Programme écrit pour lister les relevés de plus de 400 passages :import csv
fichier = open('comptages.csv', encoding='utf-8')
lecteur = csv.DictReader(fichier, delimiter=';')
forts = []
for ligne in lecteur:
if ligne['passages'] > '400':
forts.append(ligne['compteur'] + ' ' + ligne['jour'])
print(forts)
- 1. Donner les descripteurs et le nombre d'enregistrements du fichier.
- 2. Quelle liste le programme devrait-il afficher ?
- 3. Le programme affiche en réalité
['Quai lundi', 'Pont mardi', 'Parc lundi']. Expliquer l'erreur, en justifiant pour les deux relevés mal classés. - 4. Corriger la ligne fautive.
- 5. Calculer le total des passages de chaque compteur sur les deux jours et classer les compteurs par ordre décroissant.
- 6. Calculer le nombre moyen de passages par relevé, arrondi à l'unité.
1. La première ligne donne les descripteurs : compteur, jour, passages. Les lignes suivantes sont les enregistrements : il y en a 6.
2. Les relevés strictement supérieurs à 400 sont 452 (Quai, lundi), 1 205 (Pont, lundi) et 618 (Parc, lundi). Affichage attendu : ['Quai lundi', 'Pont lundi', 'Parc lundi'].
3. csv.DictReader lit des chaînes de caractères : ligne['passages'] vaut par exemple '1205' et non 1205, et la condition compare deux chaînes. Python compare alors caractère par caractère. Pour '1205', le premier caractère '1' est avant '4' : '1205' > '400' est faux, et ce relevé pourtant élevé est oublié. Pour '96', '9' est après '4' : '96' > '400' est vrai, et un relevé de 96 passages est retenu à tort. Les autres comparaisons donnent le bon résultat par hasard (même nombre de chiffres).
4. On convertit la valeur en entier et on compare à un nombre :if int(ligne['passages']) > 400:
5. Quai : 452 + 387 = 839 ; Pont : 1 205 + 96 = 1 301 ; Parc : 618 + 274 = 892. Classement : Pont (1 301), Parc (892), Quai (839). Le compteur Pont, oublié par le programme erroné, est en réalité le plus fréquenté.
6. Total : 839 + 1 301 + 892 = 3 032 passages pour 6 relevés. Moyenne : 3 032 ÷ 6 ≈ 505,3, soit environ 505 passages par relevé.
Exercice 10 — Bornes de recharge : quelle commune est la mieux équipée ?
DifficileDocument 1. Population de quatre communes (données fictives).
| Commune | Code | Habitants |
|---|---|---|
| Valmont | 01 | 48 600 |
| Brisac | 02 | 12 350 |
| Lornay | 03 | 27 900 |
| Saint-Aubel | 04 | 7 840 |
| Code | Bornes |
|---|---|
| 01 | 73 |
| 03 | 51 |
| 04 | 19 |
| 02 | 22 |
- 1. Quel descripteur permet de croiser les documents 1 et 2 ? Pourquoi ne peut-on pas simplement recopier la colonne Bornes à côté du document 1 ?
- 2. Construire la table fusionnée Commune, Habitants, Bornes.
- 3. Montrer que Saint-Aubel dispose d'environ 24,2 bornes pour 10 000 habitants, puis calculer cet indicateur pour les trois autres communes (arrondi au dixième).
- 4. Discuter l'affirmation du document 3.
- 5. Quel graphique choisir pour comparer l'indicateur de la question 3 entre les communes ? Préciser une règle à respecter.
- 6. Dans le tableur, la table fusionnée occupe A1:C5 (Habitants en B, Bornes en C). Écrire la formule à placer en D2 puis à recopier vers le bas pour obtenir l'indicateur.
1. Le descripteur commun est le Code de la commune. Les lignes du document 2 ne sont pas dans le même ordre que celles du document 1 (01, 03, 04, 02) : recopier la colonne telle quelle attribuerait à Brisac les 51 bornes de Lornay. Il faut associer les lignes par la valeur du code.
2.
| Commune | Habitants | Bornes |
|---|---|---|
| Valmont | 48 600 | 73 |
| Brisac | 12 350 | 22 |
| Lornay | 27 900 | 51 |
| Saint-Aubel | 7 840 | 19 |
3. Indicateur = bornes ÷ habitants × 10 000. Saint-Aubel : 19 ÷ 7 840 × 10 000 = 190 000 ÷ 7 840 ≈ 24,23, soit environ 24,2 bornes pour 10 000 habitants.
Valmont : 730 000 ÷ 48 600 ≈ 15,0 ; Brisac : 220 000 ÷ 12 350 ≈ 17,8 ; Lornay : 510 000 ÷ 27 900 ≈ 18,3.
4. L'article compare des nombres bruts : Valmont a bien le plus de bornes (73), mais c'est aussi la commune la plus peuplée. Rapporté à la population, Valmont est au contraire la moins bien équipée (15,0), et Saint-Aubel la mieux équipée (24,2). L'affirmation est donc fausse : pour comparer des communes de tailles différentes, il faut un indicateur rapporté au nombre d'habitants.
5. On compare quatre catégories (les communes) : un diagramme en barres, une barre par commune, avec un titre, l'unité « bornes pour 10 000 habitants » et un axe des valeurs qui commence à 0, sans quoi les écarts seraient exagérés.
6. En D2 : =C2/B2*10000, puis on recopie jusqu'en D5 : les références s'adaptent à chaque ligne (C3/B3, C4/B4…). On peut arrondir avec =ARRONDI(C2/B2*10000;1).
Moi c'est Ben, j'ai créé ce site pour aider le plus d'élèves possible, partout en France. Je peux aussi reprendre avec toi ce qui coince en cours particulier : en visio, ou à domicile si tu es à Marseille.
Soutien scolaire à Marseille · Cours particuliers au lycée · Aide aux devoirs