Databac

# Traitement des données en tables (tri et fusion)

Publié le 21/03/2024

Extrait du document

« # Traitement des données en tables (tri et fusion) ## Tri d'une table Lorsqu'on manipule des données en table, il est fréquent de vouloir les trier. Si on reprend l'exercice 2 avec le fichier de données `villes.csv`, on peut par exemple vouloir afficher la liste des villes par ordre décroissant de leurs populations. On utilisera pour cela les fonctionnalités de tri de python avec la fonction `sorted`. La fonction `sorted` prend en argument un tableau (une liste) et renvoie une version triée **sous la forme d'un nouveau tableau** : ```python >>> t = [21, 12, 34, 8, 45] >>> sorted(t) [8, 12, 21, 34, 45] ``` On peut remarquer que le tableau initial n'est pas modifié : ```python >>> t [21, 12, 34, 8, 45] ``` Cette fonction ne permet pas seulement le tri d'entiers, on peut aussi trier des chaînes de caractères qui se fera alors dans l'ordre alphabétique : ```python >>> t = ['pomme', 'poire', 'banane', 'cerise', 'fraise'] >>> sorted(t) ['banane', 'cerise', 'fraise', 'poire', 'pomme'] ``` La fonction `sorted` peut prendre des paramètres comme par exemple pour inverser l'ordre de tri : ```python >>> sorted(t, reverse = True) ['pomme', 'poire', 'fraise', 'cerise', 'banane'] ``` Plus d'informations : [https://docs.python.org/fr/3/howto/sorting.html](https://docs.python.org/fr/3/ howto/sorting.html) Si on essaye de trier le tableau contenant les villes avec le programme suivant : ```python import csv def lecture(fichier_csv) : with open(fichier_csv, 'r', encoding='utf-8') as csvfich: reader = csv.DictReader(csvfich) data = [dict(ligne) for ligne in reader] return data donnees = lecture('villes.csv') sorted(donnees) ``` On obtient : ```python TypeError: ' > Donner la liste triée par altitude décroissante des villes dont l'altitude maximum est de plus de 3000 m. ## Fusion de tables Il est fréquent losqu'on travaille avec des données, de se retrouver avec plusieurs jeux de données.

On peut alors se poser la question : "comment comniner les jeux de données en une seule table ?".

Cette opération s'appelle une fusion de tables et nécessite quelques précautions particulières. ##### Réunion de tables Une première opération naturelle est de vouloir mettre dans une même table les données de deux tables existantes (ou plus). On trouve par exemple des fichiers CSV recensant les listes de prénoms nés dans certaines villes pour chaque année. Chaque année est stockée dans un fichiers CSV propre : Prénoms2007GF_Rennes.csv, Prénoms2008GF_Rennes.csv, Prénoms2009GF_Rennes.csv... ```csv # début d'un fichier CSV avec les prénoms donnés en 2011 ANNAISS;MNAISS;CODCOM;LBCOM;SEXE;PRN;NBR 2011;35238;RENNES;FEMME;Manon;57 2011;35238;RENNES;FEMME;Louise;55 2011;35238;RENNES;FEMME;Chloé;50 2011;35238;RENNES;FEMME;Camille;42 ``` Il est naturel de vouloir reunir tous ces jeux de données en un seul et ainsi pouvoir réaliser des opérations de tri ou encore des extractions. Cette opération a du sens car tous ces fichiers et donc les tables correspondantes possèdent la même structure (les attributs ont les mêmes noms et sont en nombre identique) : ANNAISS, CODCOM, LBCOM, SEXE, PRN, NBR ```python import csv def lecture(fichier_csv) : with open(fichier_csv, 'r', encoding='latin-1') as csvfich: reader = csv.DictReader(csvfich, delimiter=';') data = [dict(ligne) for ligne in reader] return data prenom2014 = lecture('Prenoms2014GF_Rennes.csv') prenom2015 = lecture('Prenoms2015GF_Rennes.csv') prenom2014_2015 = prenom2014 + prenom2015 ``` On obtient un nouveau tableau contenant les élèments de `prenom2014` suivis des élèments de `prenom2015`.

Du point de vue de python cette opération est toujours autorisé mais dans le cadre de tables de données, il faut que les tables réunies aient les mêmes attributs. ##### Jointure de tables On peut aller plus loin en considérant des tables ayant des attributs différents, mais au moins un attribut en commun. Soit deux tables : ```csv # liste_eleves.csv Nom,Prénom,Année,e-mail Galois,Evariste,2001,[email protected] Gauss,Carl,2000,[email protected] Euler,Leonhard,2005,[email protected] # notes.csv Nom,Maths,NSI,Anglais Galois,17,14,17 Gauss,20,12,8 Euler,19,15,13 ``` On constate que ces deux tables ont comme attribut commun uniquement `Nom`. L'idée est de fusionner ces deux tables pour obtenir : ```csv Nom,Prénom,année,e-mail,Maths,NSI,Anglais Galois,Evariste,2001,[email protected],17,14,17 Gauss,Carl,2000,[email protected],20,12,8 Euler,Leonhard,2005,[email protected],19,15,13 ``` On commence par mettre le contenu des fichiers csv `liste_eleves.csv` et `notes.csv` sous forme de deux listes de dictionnaires : ```python import csv def lecture(fichier_csv) : with open(fichier_csv, 'r', encoding='utf-8') as csvfich: reader = csv.DictReader(csvfich) data = [dict(ligne) for ligne in reader] return data liste = lecture('liste_eleves.csv') notes.... »

↓↓↓ APERÇU DU DOCUMENT ↓↓↓

Liens utiles