Vous avez sûrement remarqué que le fichier countries.csv
qui a servi à nos recherche précédentes ne contient pas le nom des capitales de pays.
En effet les villes sont répertoriées selon un code représenté par un entier.
On retrouve plus de 49000 viles dans le fichier cities.csv dont voici un extrait de données :
id,nameCity,latitude,longitude,country,population
0,Sant Julià de Lòria,42.46372,1.49129,AD,8022
1,Ordino,42.55623,1.53319,AD,3066
2,les Escaldes,42.50729,1.53414,AD,15853
3,la Massana,42.54499,1.51483,AD,7211
4,Encamp,42.53474,1.58014,AD,11223
5,Canillo,42.5676,1.59756,AD,3292
6,Andorra la Vella,42.50779,1.52109,AD,20430
Le champ id
du fichier cities.csv
correspond au champ capital
du fichier countries.csv
.
Nous dirons qu'il y a une clef commune aux deux tables de données.
Dans le fichier cities.csv
le champ id
permet de différencier deux villes qui auraient le même nom. Chaque id
n’apparaît qu'une fois dans le fichier,
on parle dans ce cas de clef primaire.
Dans le fichier countries.csv
, le champs capital
est nécessairement pris dans les id
du fichier cities.csv
.
On parle dans ce cas de clef étrangère.
On comprend bien que l'on aimerait enrichir les données propres aux pays avec celles contenues dans le fichier des villes (ou inversement).
Une des règles de construction des bases de données est de séparer au maximum les données pour ne pas gérer des tables trop lourdes.
Donc si les données sont séparées dans plusieurs tables, il est nécessaire de pouvoir construire, souvent uniquement pour le temps d'une recherche, une table à partir de deux tables séparées.
C'est que que l'on appelle fusionner les tables.
Pour fusionner deux tables il faut donc :
Pour bien comprendre le mécanisme de la fusion nous allons tout d'abord en faire une "à la main".
Pour cela nous disposons de deux courts extraits de données en tables :
LesActeurs
.LesFilms
.Et comme on peut s'en douter :
Compléter "à la main" la fusion de ces deux tables sur le critère d'égalité lié au champ film_id
:
La fonction ci-dessous permet de fusionner les tables table1
et table2
.
La fusion se fera sur les lignes dont la valeur liée à la cle1
dans table1
et la valeur liée à la cle2
dans table2
sont égales.
Contrairement à ce que l'on a pût faire dans l'exemple "à la main", les deux clefs dans les deux tables n'ont pas nécessairement le même nom, d'où l'existence de deux variables
cle1
et cle2
.
countries.csv
et cities.csv
en ajoutant à chaque pays toutes les caractéristiques de sa capitalefusion
pour éviter cette redondance.Nous allons maintenant exploiter cette notion de fusion de table pour effectuer des recherches :
Nous avons vu dans cette partie que la gestion des données en tables entraîne des problèmes :
On a également pu constater que l'accumulation de ces problèmes peut être résolu par des codes python assez lourds.
Il existe d'autres façons de résoudre ces problèmes :
pandas
; voir page suivante )