C15.3 : Fusions de deux séries de données

Réunion de deux tables

Définition

On parle de la réunion de deux tables lorsqu'on souhaite réunir les données de deux tables qui ont des attributs communs.

Exemple

On dispose de deux fichiers csv.

• Le premier correspondant au calendrier des saisons des légumes : legumes.csv.

Nom Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre
Artichauts 1 1 1
Asperges 1 1 1 1
Aubergines 1 1 1 1 1
... ... ... ... ... ... ... ... ... ... ... ... ...

• Le deuxième est similaire et correspond au calendrier des saisons des fruits : fruits.csv

On souhaite réunir les deux tables en ajoutant l'attribut 'Type' qui permet de savoir si on a un fruit ou un légume.

Mise en pratique

Proposer un programme qui permet :

Jointure de deux tables

Définition

On parle de jointure de deux tables lorsqu'on souhaite combiner les données de deux tables sur le critère d'un attribut en commun.

Exemple

On dispose de deux fichiers csv correspondant aux tables suivantes :

• Population des Haut-de-France par département en 2017 : population_hdf.csv

code population
02 534490
59 2604361
60 824503
62 1468018
80 572443

• Correspondance des numéros et des noms de départements : departements.csv

code nom
01 Ain
02 Aisne
03 Allier
... ...

On souhaite obtenir une seule table, l'attribut commun étant le code du département :

dept_code dept_nom population
02 Aisne 534490
59 Nord 2604361
60 Oise 824503
62 Pas-de-Calais 1468018
80 Somme 572443

Mise en pratique

Proposer un programme qui permet :

Afficher la correction
import csv

# ----- Chargement des données -----
listePop2017 = []
with open('population_hdf.csv', 'r', encoding='utf-8') as objFichier:
    objDatasCsv = csv.DictReader(objFichier, delimiter=';')
    for ligne in objDatasCsv:
        listePop2017.append(dict(ligne))

listeDepts = []
with open('departements.csv', 'r', encoding='utf-8') as objFichier:
    objDatasCsv = csv.DictReader(objFichier, delimiter=';')
    for ligne in objDatasCsv:
        listeDepts.append(dict(ligne))

# ----- Jointure des deux listes -----
def dico_fusion(L_population, L_departements):
    return {'dept': L_population['dept'], 'dept_nom': L_departements['nom'], 'population' : L_population['population']}

listeFinale = []
for D_population in listePop2017:
    for D_departement in listeDepts:
        if D_population['dept'] == D_departement['code']:
            listeFinale.append(dico_fusion(D_population, D_departement))

print(listeFinale)