Traitement de tables
Introduction
Une table de données n'a d'intérêt que si l'on sait en extraire une information utile. Vous voulez la moyenne des notes ? La liste des élèves absents en avril ? Les communes de plus de 10 000 habitants ? Tout cela revient à effectuer trois opérations élémentaires sur la table : la recherche, le filtre, le tri.
Le bon réflexe est de commencer au tableur — Calc, Excel, Google Sheets. Tout ce qu'on demande tient dans deux ou trois clics. Ce n'est qu'ensuite, quand on veut automatiser ou aller plus loin, qu'on regarde du côté de Python. Vous ferez les deux dans ce cours.
Trois opérations élémentaires
| Opération | Question type | Résultat |
|---|---|---|
| Recherche | « La ligne de Lila Martin existe-t-elle ? » | Une ligne (ou rien). |
| Filtre | « Quels élèves ont plus de 15 ans ? » | Un sous-ensemble de lignes. |
| Tri | « Classer du plus jeune au plus vieux. » | Les mêmes lignes, dans un autre ordre. |
À ces trois opérations s'ajoutent les calculs : la moyenne d'une colonne, le maximum, la somme. Et enfin, la fusion de deux tables — par exemple relier la table des élèves à celle des notes. Vous l'aborderez plus en détail en NSI Première.
D'abord, au tableur
Un logiciel comme LibreOffice Calc, Microsoft Excel ou Google Sheets offre une interface visuelle pour traiter une table. Pour répondre à la question « quels élèves ont une moyenne au-dessus de 14 ? », vous n'écrivez pas une ligne de code :
- Recherche : la fonction Rechercher (Ctrl+F) localise une valeur.
- Filtre : le menu Données → Filtre (ou Filtre standard) affiche uniquement les lignes qui satisfont un critère (« moyenne > 14 »).
- Tri : Données → Trier réordonne par une ou plusieurs colonnes.
- Calculs : formules comme
=MOYENNE(B2:B30),=MAX(C:C),=SOMME(D:D).
Pour ne garder que les lignes où la colonne « age » vaut plus de 15, quel menu du tableur cherche-t-on ?
Et en Python ?
Quand on veut automatiser un traitement (refaire la même chose chaque mois, traiter cent fichiers d'un coup, croiser deux tables), on bascule sur un langage de programmation. En seconde, on découvre Python.
L'idée est exactement la même qu'au tableur — on filtre, on trie, on calcule — mais cette fois on écrit la recette au lieu de cliquer dans un menu.
Considérez le fichier eleves.csv suivant :
nom,prenom,age,moyenne
Martin,Lila,15,14.5
Bouzid,Idris,16,12.8
Petit,Jade,15,17.2
Dupuis,Maxime,17,9.4
Nguyen,Tien,16,15.7
Pour traiter cette table en Python, on imagine qu'on dispose d'outils
prêts à l'emploi : des fonctions qui savent ouvrir le fichier, donner une
colonne, parcourir les lignes. Dans la suite du cours, on les écrira en
pseudo-code : des noms parlants comme charger_table("eleves.csv") ou
obtenir_colonne(table, "moyenne"). Ces fonctions n'existent pas
directement en Python — elles représentent ce qu'une bibliothèque pourrait
offrir. En Python réel, on utiliserait une bibliothèque comme csv ou
pandas — vu en NSI Première.
Voici à quoi ressemble notre boîte à outils imaginaire :
| Fonction imaginaire | Ce qu'elle rend |
|---|---|
charger_table("eleves.csv") | une table : la suite des lignes du fichier |
nombre_lignes(table) | combien de lignes contient la table (sans l'en-tête) |
valeur(ligne, "nom") | la valeur stockée dans la colonne « nom » d'une ligne |
obtenir_colonne(table, "moyenne") | toutes les valeurs d'une colonne, sous forme de liste |
Avec ces quatre fonctions, on peut décrire à peu près toutes les opérations de ce cours.
Que rend la fonction imaginaire obtenir_colonne(table, "age") appliquée à notre table d'élèves ?
Parcourir la table
L'opération la plus simple : parcourir la table ligne par ligne, comme on descendrait la feuille du tableur. En pseudo-code Python :
# Pseudo-code : charger_table et valeur sont imaginaires.
table = charger_table("eleves.csv")
for ligne in table:
print(valeur(ligne, "prenom"), valeur(ligne, "nom"))
Lecture : « pour chaque ligne de la table, afficher son prénom puis son
nom ». C'est exactement la même structure que for n in notes: du chapitre
SH : on parcourt chaque élément d'une suite, l'un après l'autre.
charger_table(...) et valeur(...) n'existent pas en
Python tel quel. Ce sont des noms imaginés pour décrire la logique sans
se perdre dans la syntaxe d'une vraie bibliothèque. En NSI Première, vous
verrez les outils réels — la pensée, elle, restera identique.Filtrer avec une boucle for
Filtrer, c'est garder seulement les lignes qui répondent à un critère. La recette en pseudo-code Python ressemble à ceci :
# Pseudo-code : on veut compter les élèves admis (moyenne >= 14).
table = charger_table("eleves.csv")
nombre_admis = 0
for ligne in table:
if valeur(ligne, "moyenne") >= 14:
nombre_admis = nombre_admis + 1
print("Nombre d'admis :", nombre_admis)
Lecture :
- on prépare un compteur
nombre_admisà zéro ; - on parcourt chaque ligne avec une boucle
for; - pour chaque ligne, on teste le critère avec un
if; - si le test réussit, on augmente le compteur de 1.
for + if qui incrémente » est
l'un des patrons les plus utiles du programme. Vous le réutiliserez à chaque
fois que vous voudrez compter combien d'éléments d'une suite vérifient
un critère.Sur notre table de 5 élèves, combien vaut nombre_admis à la fin (moyennes : 14.5, 12.8, 17.2, 9.4, 15.7) ?
Calculer une moyenne — un vrai code exécutable
Pour calculer la moyenne d'une colonne, on n'a plus besoin du pseudo-code :
une liste Python simple suffit. C'est exactement ce que vous avez vu en
SH4 avec la boucle for n in notes:.
Trois ingrédients suffisent :
- une variable
totalqui démarre à zéro ; - une boucle
forqui ajoute chaque valeur àtotal; - une division par le nombre de valeurs (
5ici, le nombre d'élèves).
=MOYENNE(D2:D6). Une seule cellule, le
résultat apparaît immédiatement. C'est typiquement le cas où le tableur est
plus court que le code — Python prend le dessus quand il y a plus que ça
à faire (filtrer, croiser, automatiser…).Sans exécuter le programme, à quoi vaut total après la boucle ?
Trouver le maximum d'une colonne
Même approche pour trouver la meilleure moyenne : on parcourt la liste en gardant en mémoire la plus grande valeur rencontrée jusqu'ici.
À chaque tour de boucle, on compare la valeur courante m au champion
provisoire maximum. Si m est plus grande, elle prend la place.
moyennes[0] désigne la première valeur de la liste — ici 14.5. Les
listes Python sont numérotées à partir de zéro, exactement comme range(n)
qui commence à 0.Trier : se laisser aider
Trier une liste « à la main » avec un for est possible mais long. Python
sait le faire pour vous, et un tableur encore plus vite. Pour notre table, il
suffit de demander :
« Trie les élèves par âge croissant. »
Le résultat affiché sera dans l'ordre voulu :
Martin Lila 15 ans
Petit Jade 15 ans
Bouzid Idris 16 ans
Nguyen Tien 16 ans
Dupuis Maxime 17 ans
Ce qui compte ici, c'est de comprendre ce que fait le tri : il réorganise les mêmes lignes selon un descripteur. Le mécanisme exact (comment Python s'y prend en interne, comment on lui dit « trie selon l'âge ») est un peu technique pour cette année — vous le verrez en NSI Première.
trier(table, "age")
qui rendra exactement le même résultat.Récapitulatif des opérations
| Opération | Au tableur | En Python (idée) |
|---|---|---|
| Parcours | dérouler la feuille | for ligne in table: |
| Filtre | menu Données → Filtre | for + if + compteur ou nouvelle liste |
| Tri | menu Données → Trier | demander à Python (mécanisme vu en NSI 1ère) |
| Calcul (moyenne, max, somme) | =MOYENNE(...), =MAX(...), =SOMME(...) | accumuler dans une variable avec for |
| Charger un CSV | Fichier → Ouvrir | bibliothèque dédiée (vue en NSI 1ère) |
Pièges courants
- Le pseudo-code n'est pas exécutable. Les fonctions
charger_table(...),valeur(...),obtenir_colonne(...)n'existent pas en Python tel quel — elles représentent ce qu'une bibliothèque fournit. En NSI Première, vous remplacerez ces noms par les outils réels. - Type des données : une moyenne lue dans un fichier brut est parfois du texte. La comparer à un nombre demande une étape de conversion. Cette étape sera vue plus tard ; pour l'instant, on travaille directement avec des nombres dans nos listes Python.
- Cellules vides : sur un vrai jeu de données, une ligne peut manquer une valeur. Le programme doit alors la sauter ou la signaler — sinon, une division ou une comparaison plante.
Pourquoi écrit-on ici du « pseudo-code » au lieu du vrai Python pour ouvrir un fichier CSV ?
Pour aller plus loin
Quand les tables grossissent ou que les croisements deviennent complexes, on bascule sur des bases de données interrogées en SQL. Vous découvrirez ces outils en NSI Première et Terminale. Le principe reste exactement le même : recherche, filtre, tri, fusion — sur des données structurées.