Traitement de données en tables
Introduction au format CSV
Traitement de données
Les dictionnaires de Python permettent de réaliser des traitements sur des données. Ces traitements permettent notamment de trier, organiser, sélectionner des données en fonction de critères.
- Fichiers CSV : Le format CSV (Comma Separated Values) correspond à un format où les données sont structurées par des virgules (ou des points-virgules).
- Tableurs : Ces formats CSV sont manipulables via des logiciels tableurs (Excel, Libre Office, etc.) mais on peut également réaliser des traitements sur ces fichiers à l'aide de bibliothèques Python.
La bibliothèque CSV
La bibliothèque csv permet de charger des fichiers et stocke les données sous forme de listes. On ne traitera que de la fonction DictReader qui permet de traduire chaque ligne de notre fichier CSV dans des dictionnaires, eux-mêmes stockés dans une liste.
Structure d'ouverture
Voici la structure de l'ouverture d'un fichier CSV et du remplissage d'une liste organisant nos données :
import csv
liste_a_remplir = []
with open('communes.csv', newline='') as fichier_csv:
lecteur = csv.DictReader(fichier_csv, delimiter=',') # Objet DictReader (itérateur)
for ligne in lecteur:
liste_a_remplir.append(dict(ligne))
Exemple pratique : Communes de France
Le fichier CSV communes.csv représente l'ensemble des communes de France, associée à leur code postal, département, etc.
Pour "ouvrir" ce fichier CSV et structurer toutes les données le comportant, on utilisera l'exemple de code suivant :
import csv
def creer_liste_villes(nom_de_fichier : str) -> list:
villes = []
with open('communes.csv', newline='') as fichier_csv:
# Méthode DictReader qui permet de structurer les données contenues dans le fichier CSV
# en liste de dictionnaires où chaque descripteur (ou attribut) est renseigné.
lecteur = csv.DictReader(fichier_csv, delimiter=';')
for ligne in lecteur:
villes.append(dict(ligne))
Pour ce fichier CSV, il y a les descripteurs suivants :
code_commune_INSEE, nom_commune_postal, code_postal, latitude, longitude, code_commune, nom_commune, nom_commune_complet, code_departement, nom_departement, code_region, nom_region
Aperçu du fichier CSV :
code_commune_INSEE;nom_commune_postal;code_postal;latitude;longitude;code_commune;nom_commune;nom_departement
01001;L'Abergement-Clémenciat;01400;46.1667;4.9;1;L'Abergement-Clémenciat;Ain
01002;L'Abergement-de-Varey;01640;46.05;5.4833;1;L'Abergement-de-Varey;Ain
...
La fonction DictReader permet de créer une liste de dictionnaires et chaque dictionnaire correspond à une ligne du fichier CSV à laquelle on associe chacun des attributs à chacune des valeurs de la ligne.
Projection de données
On appelle projection le fait d'obtenir les valeurs de certains ou tous les attributs d'une table / base de données / fichiers CSV.
# Exemple : Afficher le nom des villes
for ligne in villes: # Pour chaque ligne dans la liste des villes
print(ligne["nom_commune"]) # Affiche la valeur associée à la clé 'nom_commune'
# Afficher le nom de toutes les villes
for ligne in villes:
print(ligne["nom_commune"])
# Afficher le département de chaque ville
for ligne in villes:
print("La ville ", ligne["nom_commune"], " est dans le département : ", ligne["nom_departement"])
Cela permet donc d'obtenir dans notre exemple de villes, le nom de celle-ci, le département, etc. de toutes les villes sans aucune contrainte.
Sélection de données
On appelle sélection le fait de sélectionner des valeurs suivant certains critères ou condition. Cela permet donc d'obtenir des informations ou de réaliser des traitements sur les données d'un fichier suivant divers critères (par exemple sur les villes).
# Afficher le nom des villes qui sont dans le département 59
for ligne in villes:
if ligne['code_departement'] == '59':
print(ligne["nom_commune"])
# Afficher les noms des villes commençant par la lettre C
for ligne in villes:
if ligne["nom_commune"][0] == "C":
print(ligne["nom_commune"])
Exercices pratiques
Explorateur de Données
| ID | Nom | Type | Niveau | Poids (kg) |
|---|---|---|---|---|
| #1 | Flaméou | Feu | 12 | 8.5 |
| #2 | Aquabulle | Eau | 5 | 3.2 |
| #3 | Herbizar | Plante | 18 | 12 |
| #4 | Voltali | Électrique | 25 | 5.4 |
| #5 | Rocabot | Normal | 8 | 9.1 |
| #6 | Pyroli | Feu | 32 | 15.6 |
| #7 | Tortipouss | Plante | 10 | 6.8 |
| #8 | Staross | Eau | 28 | 22.5 |
Moyenne : | 17.3 | |||
Exercices faciles
-
Afficher les noms des communes Écrire une fonction
afficher_noms_communesqui prend une liste de dictionnairesvillesen paramètre et affiche le nom de toutes les communes. -
Communes par code postal Écrire une fonction
afficher_communes_par_code_postalqui prend une liste de dictionnairesvilleset une chaînecode_postalen paramètre, et affiche les noms des communes ayant ce code postal. -
Communes avec coordonnées Écrire une fonction
afficher_communes_avec_coordonneesqui prend une liste de dictionnairesvilleset affiche pour chaque commune son nom, sa latitude et sa longitude.
Exercices intermédiaires
-
Communes par département Écrire une fonction
afficher_communes_par_departementqui prend une liste de dictionnairesvilleset une chaînedepartementen paramètre, et affiche les noms des communes du département donné. -
Noms avec longueur minimale Écrire une fonction
afficher_noms_longueur_minqui prend une liste de dictionnairesvilleset un entierlongueuren paramètre, et renvoie la liste des noms des communes ayant un nom d'au moinslongueurcaractères. -
Communes par latitude Écrire une fonction
afficher_communes_par_latitudequi prend une liste de dictionnairesvilleset une latitude maximalemax_latitudeen paramètre, et affiche les noms des communes ayant une latitude inférieure àmax_latitude.