Aller au contenu

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

  1. On crée une nouvelle table vide (un nouveau tableau).
  2. Pour chaque ligne de la table étudiée, on crée une ligne « vide » dans la nouvelle table.
  3. Dans cette ligne « vide », on place uniquement les attributs sélectionnés (et leur valeur) dans la nouvelle ligne de la nouvelle table.
  4. 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
Il n'est pas nécessaire d'apprendre par coeur ce code, mais lisez-le attentivement et essayez de comprendre son fonctionnement.

  1. 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}]
    

  2. 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 fonction projection() (définie dans le module fonctions_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'])
    
  3. 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 fonction projection() 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'])