Lignes, colonnes et scripts : faire parler une table de données
Ta playlist, tes contacts, le classement de ton jeu préféré, tes notes sur l'ENT : tout cela est rangé en table, avec des lignes et des colonnes. Les applications ne font ensuite que trois choses avec ces tables : filtrer (ne garder que certaines lignes), trier (les ranger) et agréger (compter, additionner, faire une moyenne). Apprends ces trois gestes, dans un tableur puis en Python, et tu sauras faire parler n'importe quelle donnée.
Le vocabulaire : objets, descripteurs, valeurs
Prenons une table de randonnées faites cette année :
nom;massif;distance_km;denivele_m;duree_min
Lac Bleu;Pyrénées;12;750;300
Crête du Loup;Vosges;8;420;170
Pic Rouge;Alpes;15;1100;390
Sentier des Moines;Jura;6;180;95
Cirque Blanc;Pyrénées;10;620;240
Col des Aigles;Alpes;14;980;360
- Chaque ligne décrit un objet (une randonnée) : la table en contient 6.
- Chaque colonne est un descripteur (nom, massif, distance_km, denivele_m, duree_min) : il y en a 5. La première ligne, l'en-tête, les nomme.
- Chaque case contient une valeur : la distance du Pic Rouge est 15.
Ce texte est un fichier CSV (Comma-Separated Values, valeurs séparées par des virgules). En France, le séparateur est souvent le point-virgule, car la virgule sert déjà aux décimaux (12,5). Un CSV est du texte brut, lisible par un bloc-notes, un tableur ou un programme : c'est le format universel des données ouvertes (open data) de data.gouv.fr ou de l'INSEE.
Les trois gestes dans un tableur
Ouvre le fichier dans LibreOffice Calc, Excel ou Google Sheets : chaque valeur prend sa cellule. La colonne A contient les noms, la colonne C les distances, et les lignes 2 à 7 les six randonnées.
Trier : sélectionne toute la table (en-tête comprise), puis Données → Trier, par distance_km décroissante. Le Pic Rouge (15 km) passe en tête, le Sentier des Moines (6 km) en dernier. Piège : en ne sélectionnant qu'une colonne, seule cette colonne est triée et chaque randonnée reçoit le dénivelé d'une autre.
Filtrer : Données → AutoFiltre fait apparaître un petit menu sur chaque en-tête. Filtre « massif = Alpes » : il ne reste que le Pic Rouge et le Col des Aigles. Filtre « denivele_m > 500 » : quatre lignes restent. Les autres sont masquées, pas supprimées.
Agréger : dans une cellule vide, tape une formule.
=SOMME(C2:C7)donne la distance totale : 65 km.=MOYENNE(C2:C7)donne 65 ÷ 6 ≈ 10,83 km par sortie.=MAX(D2:D7)donne le plus grand dénivelé : 1 100 m.=NB.SI(B2:B7;"Alpes")compte les lignes dont le massif est Alpes : 2.
Les mêmes gestes en Python
Un tableur suffit pour six lignes ; pour six millions, ou pour refaire le calcul chaque semaine, on écrit un script. Le module csv de Python lit un fichier CSV et transforme chaque ligne en dictionnaire dont les clés sont les descripteurs. Place ce programme dans le même dossier que le fichier randos.csv ci-dessus :
import csv
with open("randos.csv", encoding="utf-8", newline="") as f:
randos = list(csv.DictReader(f, delimiter=";"))
print(len(randos))
print(randos[2]["nom"])
raides = [r for r in randos if int(r["denivele_m"]) > 500]
print(len(raides))
par_distance = sorted(randos, key=lambda r: int(r["distance_km"]), reverse=True)
print(par_distance[0]["nom"])
total = sum(int(r["distance_km"]) for r in randos)
print(total)
print(round(total / len(randos), 2))
Il affiche successivement : 6, Pic Rouge, 4, Pic Rouge, 65 et 10.83. Lis chaque ligne : len(randos) compte les objets ; randos[2] est la troisième randonnée (on compte à partir de 0) et ["nom"] en extrait une valeur ; la liste en compréhension [r for r in randos if …] est le filtre ; sorted(…, key=…) est le tri, reverse=True pour l'ordre décroissant ; sum et len sont les agrégations. Remarque le int(…) : dans un CSV, tout est du texte, et sans conversion Python comparerait les chaînes caractère par caractère (« 8 » serait plus grand que « 15 »). Remarque aussi que Python écrit 10.83 avec un point.
Une donnée a toujours un contexte
Une table ne dit rien de ce qu'elle ne contient pas : nos randonnées n'ont pas de date, impossible de savoir si on a progressé. Les descripteurs, leurs unités (km, m, min), le séparateur et l'encodage (UTF-8 pour les accents) sont des métadonnées : sans elles, 300 peut être des minutes ou des mètres. Avant d'exploiter des données ouvertes, lis leur fiche descriptive.
À retenir
- Une table : des objets en lignes, des descripteurs en colonnes, des valeurs dans les cases ; l'en-tête nomme les descripteurs.
- Le CSV est du texte brut, un objet par ligne, valeurs séparées par une virgule ou un point-virgule.
- Trois opérations : filtrer (garder des lignes), trier (les ordonner, toutes colonnes ensemble), agréger (SOMME, MOYENNE, NB, MAX).
- En Python,
csv.DictReaderlit la table ; une liste en compréhension filtre,sortedaveckeytrie,sumetlenagrègent ; pense à convertir le texte en nombre avecintoufloat.
★ Pour aller plus loin
Quand les données sont réparties en plusieurs tables (les randonnées, les refuges), on les relie par un descripteur commun : c'est la jointure, cœur des bases de données et du langage SQL, en Première NSI.
Les professionnels utilisent la bibliothèque Python pandas : df.sort_values("distance_km") trie, df["distance_km"].mean() calcule la moyenne, sur des millions de lignes.
Enfin, une table de données personnelles (noms, adresses, santé) n'est pas une table comme les autres : en Europe, le RGPD encadre qui peut la collecter, pour combien de temps et dans quel but. Un fichier CSV d'élèves avec leurs notes est déjà une donnée à protéger.
Sources pour creuser
- Apprendre à programmer avec Python 3, Gérard Swinnen (Eyrolles), aussi diffusé gratuitement en ligne par son auteur.
- Python pour les kids, Jason R. Briggs (Eyrolles) : listes et boucles avec des exemples ludiques.
- docs.python.org/fr : la documentation officielle en français, page du module csv.
- Chaîne YouTube Graven - Développement : ses vidéos Python pour débutants.
- data.gouv.fr et insee.fr : des milliers de tables CSV réelles ; pixees.fr (Inria), rubrique SNT « Les données structurées et leur traitement » ; programme officiel sur eduscol.education.fr.