Aller au contenu

TP - La table Base Aliens

Ce TP est adapté d'un exercice proposé par l'ouvrage Prépabac (éditions Hatier).

Si ce n'est pas encore fait, téléchargez et enregistrez le module fonctions_csv.py dans le dossier [NSI_Tables_Donnees].

Rappel

Ce module contient toutes les fonctions indispensables pour effectuer les requêtes demandées au cours de ce TP.

Les programmes réalisés devront commencer par l'importation du module fonctions_csv.py, c'est-à-dire par l'instruction :

1
from fonctions_csv import *

Remarque importante pour ceux qui utilisent Pyzo

Pour travailler sur des fichiers avec Pyzo, le plus simple est de déplacer le shell dans le répertoire de travail. Pour cela :

  1. Dans l'interface, repérez, en bas à droite, l'Explorateur de fichiers : Pyzo 01
  2. En cliquant sur l'icône , on remonte d'un dossier.
    En cliquant sur un dossier, on l'ouvre : Pyzo 03
  3. Rendez-vous dans le dossier [NSI_Tables_Donnees].
    Une fois dans ce dossier, cliquer sur l'étoile : Pyzo 04
  4. L'étoile devient jaune, avec un petite flèche en bas à droite.
    Cliquez sur cette petite flèche et sélectionnez [Allez dans ce dossier (shell courant)] : Pyzo 06

  5. Dans la console, le changement de dossier est effectif : Pyzo 07

Vous pouvez désormais travailler (importer/exporter) avec les fichiers CSV qui seront placés dans le dossier [NSI_Tables_Donnees].

Ce TP a pour but de concevoir un programme complet permettant d'extraire et de trier des données provenant d'un fichier de données CSV.

Téléchargez le fichier « à trous » TPC02.20.py (clic droit -> [Enregistrer la cible du lien sous]) et enregistrez-le dans le dossier [NSI_Tables_Donnees].

Important

Appelez régulièrement l'enseignant pour vérifier votre avancement.

Partie 1 - Sélection de données

  1. Enregistrez dans votre répertoire de travail la table de données BaseAliens.csv, téléchargeable en cliquant sur ce lien.

  2. Importez cette table de données dans une variable nommée table_aliens.
    Convertissez sous forme d'entiers les valeurs qui le nécessitent.

  3. Affichez cette table dans la console dictionnaire par dictionnaire.

    Affichage à obtenir

    {'NoCabine': 1, 'NomAlien': 'Zorglub', 'Sexe': 'M', 'Planete': 'Trantor'}
    {'NoCabine': 2, 'NomAlien': 'Blorx', 'Sexe': 'M', 'Planete': 'Euterpe'}
    {'NoCabine': 3, 'NomAlien': 'Urxiz', 'Sexe': 'M', 'Planete': 'Aurora'}
    {'NoCabine': 4, 'NomAlien': 'Zbleurdite', 'Sexe': 'F', 'Planete': 'Trantor'}
    {'NoCabine': 5, 'NomAlien': 'Darneurane', 'Sexe': 'M', 'Planete': 'Trantor'}
    {'NoCabine': 6, 'NomAlien': 'Mulzo', 'Sexe': 'M', 'Planete': 'Helicon'}
    {'NoCabine': 7, 'NomAlien': 'Zzzzzz', 'Sexe': 'F', 'Planete': 'Aurora'}
    {'NoCabine': 8, 'NomAlien': 'Arghh', 'Sexe': 'M', 'Planete': 'Nexon'}
    {'NoCabine': 9, 'NomAlien': 'Joranum', 'Sexe': 'F', 'Planete': 'Euterpe'}
    
  4. Extraire les informations sur les aliens qui ont un numéro de cabine (strictement) supérieur à 5.
    Placez ces informations dans une nouvelle table nommée table_aliens2.

    Affichage à obtenir

    {'NoCabine': 6, 'NomAlien': 'Mulzo', 'Sexe': 'M', 'Planete': 'Helicon'}
    {'NoCabine': 7, 'NomAlien': 'Zzzzzz', 'Sexe': 'F', 'Planete': 'Aurora'}
    {'NoCabine': 8, 'NomAlien': 'Arghh', 'Sexe': 'M', 'Planete': 'Nexon'}
    {'NoCabine': 9, 'NomAlien': 'Joranum', 'Sexe': 'F', 'Planete': 'Euterpe'}
    
  5. Extraire les informations sur les aliens qui sont originaire de la planète Trantor.
    Placez ces informations dans une nouvelle table nommée table_aliens3.

    Affichage à obtenir

    {'NoCabine': 1, 'NomAlien': 'Zorglub', 'Sexe': 'M', 'Planete': 'Trantor'}
    {'NoCabine': 4, 'NomAlien': 'Zbleurdite', 'Sexe': 'F', 'Planete': 'Trantor'}
    {'NoCabine': 5, 'NomAlien': 'Darneurane', 'Sexe': 'M', 'Planete': 'Trantor'}
    
  6. Extraire les informations sur les aliens dont le nom contient la lettre « z » (minuscule ou majuscule).
    Placez ces informations dans une nouvelle table nommée table_aliens4.

    Affichage à obtenir

    {'NoCabine': 1, 'NomAlien': 'Zorglub', 'Sexe': 'M', 'Planete': 'Trantor'}
    {'NoCabine': 3, 'NomAlien': 'Urxiz', 'Sexe': 'M', 'Planete': 'Aurora'}
    {'NoCabine': 4, 'NomAlien': 'Zbleurdite', 'Sexe': 'F', 'Planete': 'Trantor'}
    {'NoCabine': 6, 'NomAlien': 'Mulzo', 'Sexe': 'M', 'Planete': 'Helicon'}
    {'NoCabine': 7, 'NomAlien': 'Zzzzzz', 'Sexe': 'F', 'Planete': 'Aurora'}
    

Partie 2 - Valeurs d'attributs

  1. Copiez/collez et complétez la définition de la fonction tableau_valeurs_distinctes() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    8
    def tableau_valeurs_distinctes(table, attribut):
        """   
        table - list, Table de données représentée par un tableau de dictionnaires
                ayant tous les mêmes clefs
        attribut - str, chaîne de caractères étant une clef de cette table
        Sortie: list - tableau contenant les valeurs distinctes prises par la clef
                attribut dans table. Attention, il ne doit pas y avoir de doublon.
        """
    

    Exemple de tests

    >>> tableau_valeurs_distinctes(table_aliens, 'Planete')
    ['Trantor', 'Euterpe', 'Aurora', 'Helicon', 'Nexon']
    
    Une piste

    On construit un tableau dans lequel on ajoute au fur et à mesure de la lecture les nouvelles valeurs. Si la nouvelle valeur lue est déjà présente dans le tableau, on ne la place pas à nouveau dans celui-ci.

  2. Copiez/collez et complétez la définition de la fonction valeurs_toutes_distinctes() en respectant ses spécifications.

    1
    2
    3
    4
    5
    6
    7
    8
    def valeurs_toutes_distinctes(table, attribut):
        """   
        table - list, Table de données représentée par un tableau de dictionnaires
                ayant tous les mêmes clefs
        attribut - str, chaîne de caractères étant une clef de cette table
        Sortie: bool - True si toutes les valeurs de la clé attribut sont différentes,
                False sinon.
        """
    

    Exemple de tests

    >>> valeurs_toutes_distinctes(table_aliens, 'Planete')
    False
    
    >>> valeurs_toutes_distinctes(table_aliens, 'NoCabine')
    True
    
    Une piste

    C'est presque le même principe que l'exercice précédent...

Partie 3 - Projection (sélection de colonnes)

  1. Extraire la table composée uniquement du nom et du numéro de cabine de ces aliens.
    Placez ces informations dans une nouvelle table nommée table_aliens5.

    Affichage à obtenir

    {'NoCabine': 1, 'NomAlien': 'Zorglub'}
    {'NoCabine': 2, 'NomAlien': 'Blorx'}
    {'NoCabine': 3, 'NomAlien': 'Urxiz'}
    {'NoCabine': 4, 'NomAlien': 'Zbleurdite'}
    {'NoCabine': 5, 'NomAlien': 'Darneurane'}
    {'NoCabine': 6, 'NomAlien': 'Mulzo'}
    {'NoCabine': 7, 'NomAlien': 'Zzzzzz'}
    {'NoCabine': 8, 'NomAlien': 'Arghh'}
    {'NoCabine': 9, 'NomAlien': 'Joranum'}
    
  2. Extraire la table composée uniquement du sexe et de la planète de ces aliens.
    Placez ces informations dans une nouvelle table nommée table_aliens6.

    Affichage à obtenir

    {'Sexe': 'M', 'Planete': 'Trantor'}
    {'Sexe': 'M', 'Planete': 'Euterpe'}
    {'Sexe': 'M', 'Planete': 'Aurora'}
    {'Sexe': 'F', 'Planete': 'Trantor'}
    {'Sexe': 'M', 'Planete': 'Trantor'}
    {'Sexe': 'M', 'Planete': 'Helicon'}
    {'Sexe': 'F', 'Planete': 'Aurora'}
    {'Sexe': 'M', 'Planete': 'Nexon'}
    {'Sexe': 'F', 'Planete': 'Euterpe'}
    
  3. Extraire la table composée uniquement des numéros de cabine et du nom des aliens de sexe masculin.
    Placez ces informations dans une nouvelle table nommée table_aliens7.

    Affichage à obtenir

    {'NoCabine': 1, 'NomAlien': 'Zorglub'}
    {'NoCabine': 2, 'NomAlien': 'Blorx'}
    {'NoCabine': 3, 'NomAlien': 'Urxiz'}
    {'NoCabine': 5, 'NomAlien': 'Darneurane'}
    {'NoCabine': 6, 'NomAlien': 'Mulzo'}
    {'NoCabine': 8, 'NomAlien': 'Arghh'}
    
    Une piste

    Une seule instruction ne suffira pas...

  4. Extraire la table composée uniquement du nom des aliens dont le nom de planète termine par la lettre « n ».
    Placez ces informations dans une nouvelle table nommée table_aliens8.

    Affichage à obtenir

    {'NomAlien': 'Mulzo'}
    {'NomAlien': 'Arghh'}
    
    Une piste

    Une seule instruction ne suffira pas.
    De plus, on rappelle qu'en Python, le dernier élément d'une séquence a pour indice len(sequence)-1 ou, plus simplement, -1.

Partie 4 - Tri des données

  1. Triez la table table_aliens par ordre croissant du nom des aliens dans une nouvelle table nommée table_aliens9. Vous pouvez définir une fonction auxiliaire qui servira de critère de tri au préalable.
    Affichez cette table triée dans la console dictionnaire par dictionnaire.

    Affichage à obtenir

    {'NoCabine': 8, 'NomAlien': 'Arghh', 'Sexe': 'M', 'Planete': 'Nexon'}
    {'NoCabine': 2, 'NomAlien': 'Blorx', 'Sexe': 'M', 'Planete': 'Euterpe'}
    {'NoCabine': 5, 'NomAlien': 'Darneurane', 'Sexe': 'M', 'Planete': 'Trantor'}
    {'NoCabine': 9, 'NomAlien': 'Joranum', 'Sexe': 'F', 'Planete': 'Euterpe'}
    {'NoCabine': 6, 'NomAlien': 'Mulzo', 'Sexe': 'M', 'Planete': 'Helicon'}
    {'NoCabine': 3, 'NomAlien': 'Urxiz', 'Sexe': 'M', 'Planete': 'Aurora'}
    {'NoCabine': 4, 'NomAlien': 'Zbleurdite', 'Sexe': 'F', 'Planete': 'Trantor'}
    {'NoCabine': 1, 'NomAlien': 'Zorglub', 'Sexe': 'M', 'Planete': 'Trantor'}
    {'NoCabine': 7, 'NomAlien': 'Zzzzzz', 'Sexe': 'F', 'Planete': 'Aurora'}
    
  2. Triez la table table_aliens par ordre croissant du sexe puis par ordre décroissant des noms de planète dans une nouvelle table nommée table_aliens10.
    Affichez cette table triée dans la console dictionnaire par dictionnaire.

    Affichage à obtenir

    {'NoCabine': 4, 'NomAlien': 'Zbleurdite', 'Sexe': 'F', 'Planete': 'Trantor'}
    {'NoCabine': 9, 'NomAlien': 'Joranum', 'Sexe': 'F', 'Planete': 'Euterpe'}
    {'NoCabine': 7, 'NomAlien': 'Zzzzzz', 'Sexe': 'F', 'Planete': 'Aurora'}
    {'NoCabine': 1, 'NomAlien': 'Zorglub', 'Sexe': 'M', 'Planete': 'Trantor'}
    {'NoCabine': 5, 'NomAlien': 'Darneurane', 'Sexe': 'M', 'Planete': 'Trantor'}
    {'NoCabine': 8, 'NomAlien': 'Arghh', 'Sexe': 'M', 'Planete': 'Nexon'}
    {'NoCabine': 6, 'NomAlien': 'Mulzo', 'Sexe': 'M', 'Planete': 'Helicon'}
    {'NoCabine': 2, 'NomAlien': 'Blorx', 'Sexe': 'M', 'Planete': 'Euterpe'}
    {'NoCabine': 3, 'NomAlien': 'Urxiz', 'Sexe': 'M', 'Planete': 'Aurora'}
    

Partie 5 - Jointure

  1. Enregistrez dans votre répertoire de travail la table de données BaseAliens2.csv, téléchargeable en cliquant sur ce lien.

  2. Importez cette table de données dans une variable nommée info_aliens.
    Convertissez sous forme d'entiers les valeurs qui le nécessitent.

  3. Fusionnez les tables table_aliens et info_aliens en une seule nommée aliens.
    Affichez cette table dans la console dictionnaire par dictionnaire.

    Affichage à obtenir

    {'NoCabine': 1, 'NomAlien': 'Zorglub', 'Sexe': 'M', 'Planete': 'Trantor', 'Age': '43', 'Taille': '164'}
    {'NoCabine': 2, 'NomAlien': 'Blorx', 'Sexe': 'M', 'Planete': 'Euterpe', 'Age': '53', 'Taille': '654'}
    {'NoCabine': 3, 'NomAlien': 'Urxiz', 'Sexe': 'M', 'Planete': 'Aurora', 'Age': '50', 'Taille': '16'}
    {'NoCabine': 4, 'NomAlien': 'Zbleurdite', 'Sexe': 'F', 'Planete': 'Trantor', 'Age': '439', 'Taille': '189'}
    {'NoCabine': 5, 'NomAlien': 'Darneurane', 'Sexe': 'M', 'Planete': 'Trantor', 'Age': '4', 'Taille': '664'}
    {'NoCabine': 6, 'NomAlien': 'Mulzo', 'Sexe': 'M', 'Planete': 'Helicon', 'Age': '564', 'Taille': '327'}
    {'NoCabine': 7, 'NomAlien': 'Zzzzzz', 'Sexe': 'F', 'Planete': 'Aurora', 'Age': '48', 'Taille': '134'}
    {'NoCabine': 8, 'NomAlien': 'Arghh', 'Sexe': 'M', 'Planete': 'Nexon', 'Age': '876', 'Taille': '87'}
    {'NoCabine': 9, 'NomAlien': 'Joranum', 'Sexe': 'F', 'Planete': 'Euterpe', 'Age': '23', 'Taille': '187'}
    
  4. Exportez cette table dans un fichier nommé BaseAliens3.csv.
    Ouvrez ce fichier à l'aide d'un éditeur de texte et vérifiez son contenu.

    Affichage à obtenir

    NoCabine,NomAlien,Sexe,Planete,Age,Taille
    1,Zorglub,M,Trantor,43,164
    2,Blorx,M,Euterpe,53,654
    3,Urxiz,M,Aurora,50,16
    4,Zbleurdite,F,Trantor,439,189
    5,Darneurane,M,Trantor,4,664
    6,Mulzo,M,Helicon,564,327
    7,Zzzzzz,F,Aurora,48,134
    8,Arghh,M,Nexon,876,87
    9,Joranum,F,Euterpe,23,187
    
  5. Conservez uniquement les attributs 'NomAlien', 'Age' et 'Planete' de la table aliens, triez les données par ordre croissant des noms de planète puis exportez cette table dans un fichier nommé BaseAliens4.csv.
    Ouvrez ce fichier à l'aide d'un éditeur de texte et vérifiez son contenu.

    Affichage à obtenir

    NomAlien,Age,Planete
    Urxiz,50,Aurora
    Zzzzzz,48,Aurora
    Blorx,53,Euterpe
    Joranum,23,Euterpe
    Mulzo,564,Helicon
    Arghh,876,Nexon
    Zorglub,43,Trantor
    Zbleurdite,439,Trantor
    Darneurane,4,Trantor