Projection
(sélection de colonnes)☘
A partir d'une table initiale, on cherche à créer une nouvelle table par extraction des colonnes correspondant aux attributs choisis.
Vocabulaire
Cette opération de sélection de colonnes s'appelle une projection.
Principe☘
- On crée une nouvelle table vide (un nouveau tableau).
- Pour chaque ligne de la table étudiée, on crée une ligne « vide » dans la nouvelle table.
- Dans cette ligne « vide », on place uniquement les attributs sélectionnés (et leur valeur) dans la nouvelle ligne de la nouvelle table.
- La nouvelle table contient les mêmes lignes que la table initiale, mais restreintes aux attributs sélectionnés.
Remarque
Il est bien évidemment possible de conjuguer sélection de lignes et projection. Cela sera travaillé dans les TP.
Exemples☘
On se réfère à nouveau à la table Personnes suivante :
num | nom | prenom | genre | annee_nais |
---|---|---|---|---|
1 | Labrosse | Adam | M | 2000 |
2 | Gemlamorte | Adèle | F | 1985 |
3 | Auboisdormant | Abel | M | 2001 |
4 | Etpan | Ahmed | M | 1975 |
5 | Térieur | Alain | M | 1999 |
Rappel
Le module fonctions_csv.py
contient la fonction
projection()
qui permet d'effectuer cette sélection de colonne :
def projection(table, liste_attributs):
new_table = []
for dico in table:
new_dico = {}
for attribut in dico.keys():
if attribut in liste_attributs:
new_dico[attribut] = dico[attribut]
new_table.append(new_dico)
return new_table
-
Ouvrez un éditeur Python puis copiez/collez la table de données suivante :
1 2 3 4 5 6 7
from fonctions_csv import * personnes = [{'id_personne': 1, 'nom': 'Labrosse', 'prenom': 'Adam', 'genre': 'M', 'annee_nais': 2000}, {'id_personne': 2, 'nom': 'Gemlamorte', 'prenom': 'Adèle', 'genre': 'F', 'annee_nais': 1985}, {'id_personne': 3, 'nom': 'Auboisdormant', 'prenom': 'Abel', 'genre': 'M', 'annee_nais': 2001}, {'id_personne': 4, 'nom': 'Etpan', 'prenom': 'Ahmed', 'genre': 'M', 'annee_nais': 1975}, {'id_personne': 5, 'nom': 'Térieur', 'prenom': 'Alain', 'genre': 'M', 'annee_nais': 1999}]
-
On veut extraire de cette table uniquement les nom et prénom des individus.
Copiez, collez et complétez en ligne 9 l'appel à la fonctionprojection()
(définie dans le modulefonctions_csv.py
- cf. Rappel) qui permet de réaliser cette extraction de données.9
table_nom_prenom = projection(..., ...)
Tests dans la console
Vérifiez que vous obtenez les résultats suivants lors de l'appel dans la console :
>>> table_nom_prenom [{'nom': 'Labrosse', 'prenom': 'Adam'}, {'nom': 'Gemlamorte', 'prenom': 'Adèle'}, {'nom': 'Auboisdormant', 'prenom': 'Abel'}, {'nom': 'Etpan', 'prenom': 'Ahmed'}, {'nom': 'Térieur', 'prenom': 'Alain'}]
Une solution
1 2 3 4 5 6 7 8 9
from fonctions_csv import * personnes = [{'id_personne': 1, 'nom': 'Labrosse', 'prenom': 'Adam', 'genre': 'M', 'annee_nais': 2000}, {'id_personne': 2, 'nom': 'Gemlamorte', 'prenom': 'Adèle', 'genre': 'F', 'annee_nais': 1985}, {'id_personne': 3, 'nom': 'Auboisdormant', 'prenom': 'Abel', 'genre': 'M', 'annee_nais': 2001}, {'id_personne': 4, 'nom': 'Etpan', 'prenom': 'Ahmed', 'genre': 'M', 'annee_nais': 1975}, {'id_personne': 5, 'nom': 'Térieur', 'prenom': 'Alain', 'genre': 'M', 'annee_nais': 1999}] table_nom_prenom = projection(personnes, ['nom', 'prenom'])
-
On veut extraire de cette table uniquement les nom et année de naissances des individus.
Copiez, collez et complétez en ligne 11 l'appel à la fonctionprojection()
qui permet de réaliser cette extraction de données.11
table_nom_nais = projection(..., ...)
Tests dans la console
Vérifiez que vous obtenez les résultats suivants lors de l'appel dans la console :
>>> table_nom_nais [{'nom': 'Labrosse', 'annee_nais': 2000}, {'nom': 'Gemlamorte', 'annee_nais': 1985}, {'nom': 'Auboisdormant', 'annee_nais': 2001}, {'nom': 'Etpan', 'annee_nais': 1975}, {'nom': 'Térieur', 'annee_nais': 1999}]
Une solution
1 2 3 4 5 6 7 8 9 10 11
from fonctions_csv import * personnes = [{'id_personne': 1, 'nom': 'Labrosse', 'prenom': 'Adam', 'genre': 'M', 'annee_nais': 2000}, {'id_personne': 2, 'nom': 'Gemlamorte', 'prenom': 'Adèle', 'genre': 'F', 'annee_nais': 1985}, {'id_personne': 3, 'nom': 'Auboisdormant', 'prenom': 'Abel', 'genre': 'M', 'annee_nais': 2001}, {'id_personne': 4, 'nom': 'Etpan', 'prenom': 'Ahmed', 'genre': 'M', 'annee_nais': 1975}, {'id_personne': 5, 'nom': 'Térieur', 'prenom': 'Alain', 'genre': 'M', 'annee_nais': 1999}] table_nom_prenom = projection(personnes, ['nom', 'prenom']) table_nom_nais = projection(personnes, ['nom', 'annee_nais'])