Aller au contenu

C7 Lecture et traitement de données en table

Activités

▪ Activité 1 : Format csv

  1. Consulter le site data.gouv.fr et notamment sa page de documentation. Quels sont les objectifs de ce site ?
  2. Consulter cette page du site data.gouv.fr. Quelles données peut-on télécharger sur cette page ? Sous quelle forme sont-elles proposées ?
  3. Prévisualiser les données au format csv. Faites des recherches sur ce format de données.
  4. Expliquer rapidement comment sont représentées des données au format csv

▪ Activité 2 : De nouveaux outils en Python

Pour traiter des données en tables représentées sous forme de fichiers csv, on utilise de nouvelles fonctionnalités de Python à découvrir dans les Notebook suivants :

  1. La manipulation de fichiers en Python :

  2. Les dictionnaires en Python :

▪ Activité 3 : Lecture et traitement

▪ Activité 4 : Tri d'une table

Le fichier Médailles Tokyo 2021 présente au format csv le tableau des médailles des jeux olympiques de Tokyo 2021.

  1. Quelques révisions

    1. Télécharger ce fichier et l'ouvrir pour en avoir un aperçu, quels sont les descripteurs de ce fichier csv ?
    2. Comment sont classés les pays ?
    3. Recopier et compléter le programme Python suivant qui permet (à l'aide du module csv) de lire ce fichier sous la forme d'une liste de dictionnaires dont les clés sont les descripteurs.

      import csv
      # Attention : préciser éventuellement le chemin d'accès complet du fichier
      fichier_medailles=open(.......,"r",encoding="utf-8")
      # Lecture sous forme de dictionnaire 
      medailles = list(csv.DictReader(...........,delimiter=','))
      fichier_medailles......()
      
    4. Que contient la variable medailles[0]["Total"] ?

    5. De quel type est cette variable ?

      A retenir (source de bugs)

      Même une quantité numérique lue à partir d'un fichier   csv est une chaine de caractère pour Python. Penser à convertir en type numérique (int ou float avant d'effectuer comparaisons et tris)

  2. On souhaite lister les pays par nombre total de médailles (et pas par nombre de médaille d'or). On doit donc trier la liste de dictionnaire avec le critère de la clé Total. Pour cela :

    1. créer une fonction qui renvoie la valeur associée à la clé Total :
      def total_medailles(pays):
          return int(pays["Total"])
      
    2. utiliser la fonction sorted de python en précisant que cette fonction est la clé (key) de tri
      medailles_par_total = sorted(medailles,key = total_medailles)
      
    3. Afficher les cinq premières lignes du nouveau dictionnaire medailles_par_total, le résultat est-il celui attendu ? Quel est le problème ?

    4. Afficher (ou rechercher) l'aide sur la fonction sorted de Python, en déduire comment effectuer un tri par ordre décroissant.

  3. On décide d'effectuer un classement par points, en attribuant 10 points à une médaille d'or, 4 à une médaille d'argent et 1 à une médaille de bronze.

    1. Ecrire le programme Python permettant d'effectuer ce classement.
    2. Donner la liste des 10 premiers pays avec ce nouveau classement.

Cours

Vous pouvez télécharger une copie au format pdf du diaporama de synthèse de cours présenté en classe :

Diaporama de cours

Attention

Ce diaporama ne vous donne que quelques points de repères lors de vos révisions. Il devrait être complété par la relecture attentive de vos propres notes de cours et par une révision approfondie des exercices.

QCM

1. Qu'est-ce qu'un fichier csv ?

  • a) Un utilitaire de traiment d'image.
  • b) Un format de données.
  • c) Un format d'image.
  • d) Une bibliothèque Python permettant l'affichage des images.
  • a) Un utilitaire de traiment d'image.
  • b) Un format de données.
  • c) Un format d'image.
  • d) Une bibliothèque Python permettant l'affichage des images.

2. Dans la plupart des fichiers csv, que contient la première ligne ?

  • a) L'origine des données
  • b) Des informations sur l'auteur du fichier
  • c) La date de création du fichier
  • d) Les descripteurs des champs de la table de données
  • a) L'origine des données
  • b) Des informations sur l'auteur du fichier
  • c) La date de création du fichier
  • d) Les descripteurs des champs de la table de données

3. Dans un fichier csv,

  • a) Une ligne s'appelle un enregistrement et une colonne s'apelle un champ
  • b) Une ligne s'appelle un champ et une colonne s'apelle un enregistrement
  • c) Une ligne s'appelle un descripteur et une colonne s'apelle un champ
  • d) Une ligne s'appelle un enregistrement et une colonne s'apelle un descripteur
  • a) Une ligne s'appelle un enregistrement et une colonne s'apelle un champ
  • b) Une ligne s'appelle un champ et une colonne s'apelle un enregistrement
  • c) Une ligne s'appelle un descripteur et une colonne s'apelle un champ
  • d) Une ligne s'appelle un enregistrement et une colonne s'apelle un descripteur

4. Quels sont les descripteurs du tableau suivant :

Nom Prenom Naissance
Dupont Pierre 17/05/1987
Dupond Catherine 18/07/1981
Haddock Archibald 23/04/1998
  • a) Dupont, Pierre et 17/05/1987
  • b) Dupont, Dupond et Haddock
  • c) Nom Prenom et Naissance
  • d) Il n'y en a pas
  • a) Dupont, Pierre et 17/05/1987
  • b) Dupont, Dupond et Haddock
  • c) Nom Prenom et Naissance
  • d) Il n'y en a pas

5. On donne ci-dessous une variable Python pays contenant une liste de dictionnaires. Parmi les propositions, quelle variable contient Paris ?

pays = [
{'Nom':'France','Capitale':'Paris'},
{'Nom':'Allemagne','Capitale':'Berlin'},
{'Nom':'Espagne','Capitale':'Madrid'}]
  • a) pays[0]['Capitale']
  • b) pays[1]['Capitale']
  • c) Nom[0]['Capitale']
  • d) Capitale['France']
  • a) pays[0]['Capitale']
  • b) pays[1]['Capitale']
  • c) Nom[0]['Capitale']
  • d) Capitale['France']

6. On considère un dictionnaire contact dont les clés sont des prénoms et les valeurs un numéro de téléphone. Quel résultat produira l'exécution du programme suivant :

for c in contact:
    print(c)
  • a) L'affichage des clés et des valeurs du dictionnaire, c'est à dire les prénoms et les numéros de téléphone.
  • b) L'affichage des clés du dictionnaire, c'est à dire des prénoms.
  • c) L'affichage des valeurs du dictionnaire, c'est à dire les numéros de téléphone.
  • d) Ce code renvoie une erreur
  • a) L'affichage des clés et des valeurs du dictionnaire, c'est à dire les prénoms et les numéros de téléphone.
  • b) L'affichage des clés du dictionnaire, c'est à dire des prénoms.
  • c) L'affichage des valeurs du dictionnaire, c'est à dire les numéros de téléphone.
  • d) Ce code renvoie une erreur

7. On souhaite ajouter la clé "NSI" associée à la valeur 18 à un dictionnaire notes. Quelle est la syntaxe correcte ?

  • a) notes["NSI"] = 18
  • b) notes{"NSI"} = 18
  • c) notes{"NSI": 18}
  • d) On ne peut pas ajouter de nouvelles clés à un dictionnaire
  • a) notes["NSI"] = 18
  • b) notes{"NSI"} = 18
  • c) notes{"NSI": 18}
  • d) On ne peut pas ajouter de nouvelles clés à un dictionnaire

8. Quel paramètre prend la fonction open et que renvoie-t-elle ?

  • a) Elle prend en paramètre un nom de fichier et ne renvoie rien
  • b) Elle prend en paramètre un nom de fichier et renvoie un descripteur de fichier
  • c) Elle ne prend aucun paramètre et renvoie un nom de fichier
  • d) Elle prend en paramètre un descripteur de fichier et renvoie un nom de fichier
  • a) Elle prend en paramètre un nom de fichier et ne renvoie rien
  • b) Elle prend en paramètre un nom de fichier et renvoie un descripteur de fichier
  • c) Elle ne prend aucun paramètre et renvoie un nom de fichier
  • d) Elle prend en paramètre un descripteur de fichier et renvoie un nom de fichier

Exercices

▪ Exercice 1 : Manipulation de fichiers en Python

  1. Recopier et compléter le tableau suivant :

    Nom du fichier Descripteur Mode Ouverture Fermeture
    eleves.txt fic lecture
    d = open("dates.txt","a")
    couleurs.txt écriture fic.close()
    data.txt data ajout
    exos = open("exos.txt","r")
  2. Quel instruction Python permet d'écrire dans un fichier un passage à la ligne ?

  3. Que se passe-t-il si on ouvre un fichier déjà existant en mode écriture ?
  4. Quelle instruction doit-on toujours trouver après une instruction open ?

▪ Exercice 2 : Nombre de lignes d'un fichier

Ecrire une fonction qui prend en paramètre un nom de fichier et retourne le nombre de lignes de ce fichier.

▪ Exercice 3 : Recherche dans un dictionnaire

Pour cette exercice on utilise le dictionnaire téléchargeable ci-dessous: Dictionnaire

  1. Combien il y a-t-il de mots dans ce dictionnaire ?
  2. Lister tous les mots de 17 lettres de ce dictionnaire.
  3. Quel est le plus grand mot de ce dictionnaire ?
  4. Lister tous les mots de 5 lettres qui ont un d en deuxième position et se terminent par un e.
  5. Lister tous les mots palindromes de ce dictionnaire (un mot palindrome est un mot pouvant se lire indifféremment dans les deux sens par exemple kayak ou été)

▪ Exercice 4 : Créer et manipuler un dictionnaire

On suppose qu'on a crée un dictionnaire conversion dont les clés sont les chiffres (de 0 à 9) et les valeurs leur écriture en lettre. Par exemple conversion[3] = "trois".

  1. Ecrire une instruction Python permettant de créer ce dictionnaire
  2. Ajouter la clé 10 à ce dictionnaire avec pour valeur "dix"
  3. Modifier ce dictionnaire pour que la clé 1 corresponde à "one"
  4. Ecrire une boucle for permettant de parcourir les clés de ce dictionnaire.

▪ Exercice 5 : De l'utilité des dictionnaires

Au jeu du Scrabble, chaque lettre a une valeur comme indiqué sur l'image ci-dessous :

valeurs des lettres

Le but de l'exercice est d'écrire une fonction score qui prend un argument un mot et renvoie la somme des valeurs des lettres de ce mot. Par exemple valeur("GIRAFE") doit renvoyer 10 en effet : valeurs des lettres et donc la valeur est \(2+1+1+1+4+1 = 10\)

  1. Compléter une première version de score qui parcours les lettres du mots et ajoute la valeur suivant la lettre rencontrée.

    def score(mot):
        total = 0
        for lettre in ....:
            if lettre == 'A' or lettre=='E' or lettre=='I' ..... :
                total += 1
            if lettre == 'D' or lettre == 'G' or .......:
                totel += 2
            ...
            ...
        return ...
    

  2. Les dictionnaires à la rescousse

    1. Créer un dictionnaire valeur dont les clés sont les lettres de l'alphabet et qui associe à chaque lettre sa valeur.

    2. Utiliser ce dictionnaire afin d'écrire une version bien plus courte et lisible de la fonction score.

▪ Exercice 6 : Fichier csv

  1. Corriger le fichier pays.csv ci-dessous afin qu'il soit correct :
    Nom;Capitale;Surface(km2);Population(M)
    France;Paris;551695,67
    Allemagne;Berlin;83
    Espagne;505992;47
    
  2. Le programme Python suivant permet d'ouvrir ce fichier et de créer la liste de dictionnaires pays, corriger les erreurs commises à la ligne 2 :
    1
    2
    3
    4
    import csv
    fichier_pays.open("pays.csv","read")
    pays = list(csv.Dictreader(fichier_pays,delimiter=";")
    fichier_pays.close()
    
  3. Dans le programme précédent, on a supposé que le séparateur de champ est ;, quelle modification faut-il apporter à ce programme si le séparateur de champ est , ?
  4. Dans le programme précédent, on a supposé que l'encodage était utf-8, quelle modification faut-il apporter à ce programme pour lire un fichier dont l'encodage serait par exemple ascii ?

▪ Exercice 7 : Personnages célèbres de l'histoire de l'informatique

On reprend l'exemple de fichier csv d'informaticiens célèbres vu en cours :

Nom;Prénom;Naissance
Pascal;Blaise;1623
Lovelace;Ada;1815
Boole;George;1815

  1. Faire une copie de fichier sous le nom informaticiens.txt
  2. Ajouter les descripteurs suivant décès (pour l'année de la mort), nationalité, sexe et contribution. Ce dernier champ contient les contributions du personnage à l'histoire de l'informatique.
  3. Faire des recherches sur le Web afin de pouvoir compléter ces champs pour chacun des trois personnages ci-dessus

    Aide

    Pour Blaise Pascal, on peut par exemple écrire "Invention de la première machine à calculer" dans le champ contribution.

  4. Ajouter un enregistrement de votre choix à ce fichier csv.

  5. Ecrire un programme Python permettant de lire ce fichier csv et de créer la liste de dictionnaires celebres.
  6. Trier ce dictionnaire par date de naissance.

▪ Exercice 8 : Pays du monde

En cliquant sur le lien ci-dessous, télécharger un fichier au format csv (source : kaggle.com, licence : domaine public), contenant des informations sur les pays du monde : Pays du monde On précise la signification des champs suivants :
Population : le nombre d'habitants du pays,
Region: la région dans laquelle se trouve le pays, par exemple la France est dans la région western europe,
Area : la surface du pays en miles carrés,
Coastline : la surface cotière du pays, cette surface vaut "0,00" lorsque le pays n'a pas d'ouverture sur la mer,
GDP : le produit intérieur brut par habitant, c'est une mesure de la richesse du pays.

  1. Ecrire un programme Python permettant de lire ce fichier et de créer la liste de dictionnaires pays.
  2. Compléter votre programme en rajoutant les instructions permettant d'afficher :
    1. la population, la surface et le produit intérieur brut de la France,
    2. le nom des toutes les régions figurant dans cette table,
    3. la liste des trois pays les plus peuplés au monde,
    4. le plus grand pays n'ayant pas d'ouverture sur la mer.
  3. Ecrire une fonction Python permettant de convertir les miles carrés en kilomètres carrés.
  4. Donner la liste pays dont la surface est comprise en 500 000 et un million de kilomètres carrés.

▪ Exercice 9 : Statistiques des prénoms donnés en France

Le but de l'exercice est de réutiliser un fichier de données du site data.gouv.fr pour en extraire des informations. Il s'agit des prénoms donnés en France entre 1900 et 2019.

  1. Télécharger le fichier à partir de l'adresse suivante : fichier des prénoms
  2. Ce fichier peut-il être ouvert avec un tableur ? Pourquoi ?
  3. Ecrire un programme Python permettant de lire ce fichier et de créer la liste de dictionnaires prenoms.

    Aide

    • le délimiteur de champ est le point-virgule ;
  4. Donner la liste des descripteurs de ce fichier et leur signification.

  5. Recherche le nombre de fois où votre prénom à été attribué dans votre département l'année de votre naissance.
  6. Quels ont été les trois prénoms les plus attribués à la Réunion en 2000 ?
  7. Le prénom Dominique est mixte, en 2000 donner le nombre de personnes de chacun des deux sexes portant ce prénom.
  8. Rechercher les prénoms rares (attribués moins de 4 fois) à la Réunion en 2005.

Humour d'informaticien

csvmeme