Aller au contenu

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.