Python et Format CSV

Crédit

Cette séance est largement inspirée de celle de David Roche. Merci à lui.

Compte-rendu

Un compte-rendu numérique, à rendre sur l'ENT, est attendu à la fin de la séance. Il devra impérativement être rendu au format PDF (aucun autre format de document ne sera accepté).
Répondez sur ce compte-rendu aux questions marquées d'un ✏️.

Préparation du compte-rendu

  1. Ouvrez le traitement de texte LibreOffice (vous pouvez utiliser Microsoft Word si vous préférez, mais je ne pourrai pas vous aider dans son utilisation).
  2. Écrivez vos noms, la date, le titre de la séance.
  3. Enregistrez le document dans votre répertoire personnel, en lui donnant pour nom snt-5-python-NOMS (en remplaçant NOMS par vos noms de famille).
  4. Convertissez le document en PDF (pour vérifier que vous savez comment faire). Vous ferez cela à nouveau à la fin de l'activité, au moment de me rendre le compte-rendu.

Format CSV

  1. ✏️ Que signifient les initiales du format de fichier .csv ? Donner la signification anglaise, et sa traduction en français.
  2. Téléchargez le fichier informaticiens.csv, et enregistrez-le dans votre répertoire personnel (dans le dossier snt/données).
  3. Ouvrez le logiciel Notepad++, puis éditez le fichier que vous venez de télécharger avec ce logiciel.
  4. La première ligne du fichier correspond aux descripteurs, c'est-à-dire aux titres des colonnes de classement.

    1. ✏️ Quels sont les descripteurs de ce fichier ?
    2. ✏ Quel symbole est utilisé comme séparateur ?
  5. Analyse du fichier « à la main ». Toutes les réponses à ces questions sont à lire dans le fichier.

    1. ✏️ En quelle année est née Ada Lovelace ?
    2. ✏️ Quel est le prénom de Mme Hamilton ?
    3. ✏️ Qui, parmi les personnes listées dans ce fichier, est né le plus tard ?

Exemple pas à pas

Un tout petit fichier comme celui étudié à la question précédente est simple à manipuler avec un éditeur de textes, mais cela devient plus compliqué pour de gros fichiers.

Téléchargement du fichier

  1. Télécharger le fichier des prénoms par département de naissance : sur cette page, téléchargez Fichiers par départements de naissance au format txt.
  2. Ouvrez le fichier .zip ainsi obtenu, et extrayez le fichier dpt2018.csv, que vous enregistrez dans votre répertoire personnel.

Préparation de Thonny

  1. Ouvrez le logiciel Thonny.
  2. Installez la bibliothèque Pandas.
  3. Recopiez le programme suivant dans Thonny, et enregistrez-le sous le nom prenoms-NOMS.py (où NOMS est à remplacer par vos noms de famille) dans le même dossier que le fichier .csv de la question précédente.

    import pandas
    prenoms = pandas.read_csv("dpt2018.csv", sep=";")
    print(prenoms)
    
  4. Exécutez ce fichier, et regardez le shell (le bas de la fenêtre de Thonny).

    • Si vous voyez afficher un tableau, le programme s'est exécuté sans erreur : passez à la question suivante.
    • Si une erreur apparaît, essayez de la comprendre et de la corriger. Appelez le professeur si nécessaire.

Parcours du tableau

Analysons le tableau affiché dans Thonny à la question précédente.

  • La première ligne correspond aux descripteurs du fichier :

    • sexe : sexe du prénom (1 pour un garçon ; 2 pour une fille) ;
    • preusuel : prénom ;
    • annais : année de naissance ;
    • dpt : département de naissance ;
    • nombre : nombre d'enfants portant ce prénom.

    Certaines valeurs (pour les années et les départements) sont égales à XXXX. Cela correspond sans doute à des données incorrecteus ou inconnues.

  • Chaque ligne suivante correspond à une données différente. Par exemple, la ligne numéro 3 signifie :

    En 1983, dans le département du Vaucluse (84), trois garçons sont nés avec le prénom Aadil.

  1. ✏️ Complétez la phrase suivante avec les données de la ligne 4 :

    En ????, dans le département ???? (??), ??? ????? sont nés/nées avec le prénom ????.

  2. Il est possible d'afficher une cellule du tableau en particulier. Par exemple, le programme suivant donne l'année de naissance de la ligne numéro 3.

    import pandas
    prenoms = pandas.read_csv("dpt2018.csv", sep=";")
    recherche = prenoms.loc[3, "annais"]
    print(recherche)
    

    Exécutez-ce programme et vérifiez qu'il donne la valeur attendue.

  3. ✏️ Modifiez le programme précédent pour qu'il affiche ÏNAYA. Recopiez sur votre compte-rendu la ligne de votre programme `recherche = prenoms.loc[???????].

  4. ✏️ Il est aussi possible d'afficher toute une ligne ou toute une colonne, en utilisant la syntaxe prenoms.loc[3, :] (pour avoir toute la ligne numéro 3), ou prenoms.loc[:, "annais"] (pour avoir toute la colonne annais).

    Modifiez votre programme pour qu'il affiche la colonne des prénoms. Recopiez l'ensemble de votre programme sur le compte-rendu.

Recherche dans le tableau

Nous allons maintenant faire des recherches dans cette base de données.

  1. Recopier le programme suivant dans Thonny, et exécutez-le.

    import pandas
    prenoms = pandas.read_csv("dpt2018.csv", sep=";")
    recherche = prenoms.loc[(prenoms['dpt'] == "38"), :]
    print(recherche)
    

    Vérifiez que ne sont affichés que les prénoms donnés dans le département de l'Isère (38).

  2. Dans le programme précédent, remplacez la troisième ligne (recherche = prenoms.loc…) par :

    recherche = prenoms.loc[(prenoms['annais'] == "2018"), :]
    

    Exécutez le programme, et vérifiez que ne sont affichés que les prénoms donnés l'année 2018.

  3. Enfin, il est possible de combiner les conditions. Remplacez encore la troisième ligne (recherche = …) par :

    recherche = prenoms.loc[(prenoms['dpt'] == "38") & (prenoms['annais'] == "2018"), :]
    

    Exécutez-le, et vérifiez que ne sont affichés que les prénoms donnés en Isère (38), l'année 2018 (remarquez le symbole & situé entre les deux conditions).

  4. Il est possible aussi de trier les résultats. Ajoutons cela à la dernère recherche :

    import pandas
    prenoms = pandas.read_csv("dpt2018.csv", sep=";")
    recherche = prenoms.loc[(prenoms['dpt'] == "38") & (prenoms['annais'] == "2018"), :]
    tri = recherche.sort_values(by="nombre")
    print(tri)
    

    Dans cet exemple, les résultats sont triés par le nombre d'enfants portant ces prénoms.

  5. Répondre à cette question en lisant le résultat du programme de la question précédente. Ignorer les prénoms rares.

    1. ✏️ En 2018, en Isère, quel a été le prénom le plus donné ?
    2. ✏️ En 2018, en Isère, quel a été le prénom de filles le plus donné ?
    3. ✏️ En 2018, en Isère, quel a été le prénom de garçons le plus donné ?
    4. ✏️ En 2018, en Isère, combien de filles ont été prénommés Emma ?
  6. Répondre à cette question en modifiant le programme qui est actuellement ouvert dans Thonny.

    1. ✏️ En quelle année êtes-vous né·e ? Dans quel département ?
    2. ✏️ Durant votre année de naissance, dans votre département, quels ont été les prénoms les plus donnés aux filles et aux garçons ?
    3. ✏️ Durant votre année de naissance, dans votre département, combien d'enfants ont été nommés avec le même prénom que vous ?

En autonomie

  1. Téléchargez le fichier Moyennes par années et par chaînes sur le site data.gouv.fr, et enregistrez-le dans votre dossier personnel.

  2. Recopiez le programme suivant dans un nouveau programme dans Thonny, et enregistrez-le dans le même répertoire que le fichier .csv téléchargé à la question précédente.

    import pandas
    parole = pandas.read_csv("20190308-years.csv")
    recherche = parole.loc[(parole['year'] == 2018), ["channel_name", "women_expression_rate"]]
    print(recherche)
    

    Ce programme affiche, à partir des données téléchargées sur data.gouv.fr, pour l'année 2018 et pour chacune des chaînes de radio et de télévision étudiée, la proportion du temps de parole des femmes. Par exemple, la ligne 505 France 3 35.373144 signifie : « En 2018, sur France 3, le temps consacré à la prise de parole (par opposition aux silences ou à la musique) a été pris par les femmes à 35% (et donc par les hommes à 65%) ».

  3. Ajoutez .mean() à la fin de la ligne recherche = …, et exécutez le programme. Il affiche alors la moyenne de la proportion du temps de parole par les femmes pour l'année 2018, pour l'ensemble des chaînes radio et télé étudiées1.

    1. ✏️ Quelle est la moyenne de la proportion du temps de parole par les femmes pour les années 1998, 2003, 2008, 2013, 2018 ?

      Ne donnez pas seulement la réponse, mais expliquer les modifications faites à votre programme pour obtenir cette réponse.

    2. ✏️ La situation semble-t-elle être plus égalitaire au fil du temps ?

  4. Enlevez le .mean() ajouté à la question précédente, et modifiez votre programme pour qu'il affiche les données de l'année 2018.

  5. ✏️ En 2018, quelle est la chaîne dans laquelle le partage de la parole entre hommes et femmes a été le plus inégalitaire ? Le moins inégalitaire ?

    Ne donnez pas seulement la réponse, mais expliquer les modifications faites à votre programme pour obtenir cette réponse.

Rendu

  1. Convertissez votre compte-rendu au format PDF.
  2. Vérifiez que le nom du fichier contient vos deux noms.
  3. Vérifiez que vos deux noms apparaissent dans l'en-tête du document.
  4. Envoyez moi le compte-rendu (celui au format PDF) par l'ENT.

  1. Si nous voulons faire une analyse rigoureuse de ces données, les moyennes calculées à cette question ne sont pas vraiment pertinentes. Il aurait été plus juste de :

    • calculer, pour chaque chaîne, le temps de parole des hommes et des femmes (possible grâce aux colonnes donnant la proportion de parole par rapport au reste (musique, silence), et le nombre d'heures analysées) ;
    • en déduire le temps de parole total (pour l'ensemble des chaînes) des hommes et des femmes ;
    • en déduire la proportion du temps de parole des femmes sur l'ensemble des chaînes.

    Tout cela aurait été possible pour des élèves de seconde, en étant guidé. Cela aurait même constitué un travail intéressant. Mais nous ne disposons que d'une heure et demie par semaine, donc je suis obligé de faire des choix…