School 47

Lignes, colonnes et scripts : faire parler une table de données

Seconde · Numérique & code · environ 20 min

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.
La moyenne Un diagramme en barres de quatre valeurs : 4, 8, 6 et 2. La moyenne est marquée par une ligne pointillée horizontale à hauteur 5 : c'est le niveau que prendraient toutes les barres si on répartissait équitablement. On l'obtient en additionnant toutes les valeurs puis en divisant par leur nombre : (4 + 8 + 6 + 2) ÷ 4 = 5. 4862 moyenne = 5 (4 + 8 + 6 + 2) ÷ 4 = 20 ÷ 4 = 5

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.DictReader lit la table ; une liste en compréhension filtre, sorted avec key trie, sum et len agrègent ; pense à convertir le texte en nombre avec int ou float.

★ 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.