Chapitre 2 : Le traitement des données¶
Programme officiel (B.O.)¶
B.O. spécial n° 1 du 22 janvier 2019 - SNT Seconde
| Contenus | Capacités attendues |
|---|---|
| Données, descripteurs, valeurs, collection, table | Définir une donnée personnelle. Identifier les principaux formats et représentations de données. |
| Données structurées : formats CSV et JSON | Collecter des données, les organiser sous forme de table et les traiter (recherche, tri, filtre, calcul). |
| Métadonnées | Retrouver les métadonnées d'un fichier personnel. |
| Données dans le nuage (Cloud) | Utiliser un support de stockage dans le nuage. Identifier les principales causes de la consommation énergétique des centres de données ainsi que leur ordre de grandeur. |
| Open Data | Utiliser un site de données ouvertes, pour sélectionner et récupérer des données. |
| Données personnelles et RGPD | Connaître les droits liés aux données personnelles garantis par le RGPD. |
5. Le traitement des données¶
Une fois les données structurées dans une table, on peut effectuer différentes opérations de traitement :
| Opération | Description | Exemple |
|---|---|---|
| Recherche | Trouver un enregistrement précis | Trouver l'élève dont le nom est "Dupont" |
| Tri | Ordonner les enregistrements selon un descripteur | Trier les élèves par âge croissant |
| Filtre | Sélectionner les enregistrements répondant à un critère | Garder uniquement les élèves de Lyon |
| Calcul | Effectuer des opérations sur les valeurs | Calculer l'âge moyen des élèves |
| Croisement | Combiner deux tables ayant un descripteur commun | Croiser une table d'élèves et une table de notes |
Traitement avec le module csv de Python¶
Le module csv de Python permet de lire facilement des fichiers CSV :
import csv
# Lire un fichier CSV
with open("eleves.csv", "r", encoding="utf-8") as fichier:
lecteur = csv.DictReader(fichier, delimiter=";")
eleves = list(lecteur)
# Filtre : garder les élèves de Lyon
lyonnais = [e for e in eleves if e["Ville"] == "Lyon"]
# Tri : trier par âge croissant
eleves_tries = sorted(eleves, key=lambda e: int(e["Age"]))
# Calcul : âge moyen
ages = [int(e["Age"]) for e in eleves]
age_moyen = sum(ages) / len(ages)
print(f"Âge moyen : {age_moyen}")
Traitement « à la main » avec open et split¶
On peut aussi lire un fichier CSV sans le module csv, en utilisant simplement open() pour ouvrir le fichier et split() pour découper chaque ligne :
# Ouvrir et lire le fichier ligne par ligne
with open("cinemas.csv", "r", encoding="utf-8") as fichier:
lignes = fichier.readlines()
# La première ligne contient les en-têtes
en_tetes = lignes[0].strip().split(";")
print("Colonnes :", en_tetes)
# Parcourir les lignes de données (à partir de la 2e ligne)
compteur_paris = 0
for ligne in lignes[1:]:
champs = ligne.strip().split(";")
departement = champs[2] # supposons que la colonne 2 est le département
if departement == "75":
compteur_paris += 1
print(f"Nombre de cinémas à Paris : {compteur_paris}")
Quand utiliser open/split plutôt que le module csv ?
La méthode avec open et split est plus simple à comprendre pour des débutants, car elle ne fait appel à aucun module externe. En revanche, le module csv gère mieux les cas particuliers (valeurs contenant le séparateur, guillemets, etc.). En SNT, les deux approches sont acceptées.
Exemple concret : compter les cinémas par département¶
Imaginons un fichier cinemas.csv contenant la liste des cinémas de France (disponible sur data.gouv.fr) avec les colonnes : nom, adresse, departement, commune, ecrans.
# Compter le nombre de cinémas par département
with open("cinemas.csv", "r", encoding="utf-8") as fichier:
lignes = fichier.readlines()
# Dictionnaire : département -> nombre de cinémas
cinemas_par_dept = {}
for ligne in lignes[1:]: # on saute la ligne d'en-tête
champs = ligne.strip().split(";")
dept = champs[2]
if dept in cinemas_par_dept:
cinemas_par_dept[dept] += 1
else:
cinemas_par_dept[dept] = 1
# Afficher les 5 départements ayant le plus de cinémas
classement = sorted(cinemas_par_dept.items(),
key=lambda x: x[1], reverse=True)
for dept, nb in classement[:5]:
print(f"Département {dept} : {nb} cinémas")
Visualisation cartographique avec folium¶
Lorsque les données contiennent des coordonnées géographiques (latitude, longitude), on peut les afficher sur une carte interactive grâce à la bibliothèque Python folium. Cela permet de croiser les données structurées avec la géolocalisation.
import folium
# Créer une carte centrée sur la France
carte = folium.Map(location=[46.6, 2.3], zoom_start=6)
# Ajouter un marqueur pour chaque cinéma (exemple simplifié)
folium.Marker(
location=[48.8566, 2.3522],
popup="Le Grand Rex - Paris"
).add_to(carte)
# Sauvegarder la carte au format HTML
carte.save("carte_cinemas.html")
Folium et le thème Géolocalisation
La bibliothèque folium fait le lien entre le thème Les données structurées et le thème Localisation, cartographie et mobilité. Elle permet de visualiser sur une carte n'importe quel jeu de données contenant des coordonnées GPS.