# 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
- Données personnelles : la vie privée en voie d’extinction ?
- Oral Chimie - Dans quelle mesure, l’utilisation des acides se révèle efficace dans le traitement des eaux usées ?
- La loi des XII Tables
- Le traitement de l'espace: Fin de partie de Beckett
- Ayant surmonté ces faiblesses, mon domicile et mon ameublement étant établis aussi bien que possible, je commençai mon journal dont je vais vous donner la copie, dit le Robinson de Daniel Defoe. (Texte A) Vous rédigerez deux ou trois pages de ce journal dans lesquelles Robinson Crusoé, à partir des événements de sa vie quotidienne sur l'île, réfléchit à la condition de tout naufragé. Vous pourrez utiliser librement les indications données par les textes du corpus. Vous pourrez égaleme