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 Pronote, est attendu à la fin de la séance. Il devra impérativement être rendu au format PDF (un point sera enlevé à la note finale si un autre format est utilisé).Répondez sur ce compte-rendu aux questions marquées d'un crayon : ✏️.
Préparation du compte-rendu
- 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).
- Écrivez vos noms, la date, le titre de la séance.
- Enregistrez le document dans votre répertoire personnel.
Format CSV
- ✏️ Que signifient les initiales du format de fichier
.csv
? Donner la signification anglaise, et sa traduction en français. - Téléchargez le fichier informaticiens.csv, et enregistrez-le dans votre répertoire personnel (dans le dossier
snt/données
). - Ouvrez le logiciel Notepad++, puis éditez le fichier que vous venez de télécharger avec ce logiciel.
La première ligne du fichier correspond aux descripteurs, c'est-à-dire aux titres des colonnes de classement.
- ✏️ Quels sont les descripteurs de ce fichier ?
- ✏ Quel symbole est utilisé comme séparateur ?
Analyse du fichier « à la main ». Toutes les réponses à ces questions sont à lire dans le fichier.
- ✏️ En quelle année est née Ada Lovelace ?
- ✏️ Quel est le prénom de Mme Hamilton ?
- ✏️ 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
- 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
csv
. - Ouvrez le fichier
.zip
ainsi obtenu, et extrayez le fichierdpt2021.csv
, que vous enregistrez dans votre répertoire personnel.
Préparation de Thonny
- Ouvrez le logiciel Thonny.
Recopiez le programme suivant dans Thonny, et enregistrez-le dans le même dossier que le fichier
.csv
de la question précédente.import pandas prenoms = pandas.read_csv("dpt2021.csv", sep=";") print(prenoms)
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 (remarque : le fichier étant mis à jour chaque année, il est possible que vous n'obteniez pas exactement les mêmes résultats que ceux présentés ici).
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 (attention : il s'agit de l'année de naissance, et non pas du prénom Anaïs) ;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 incorrectes ou inconnues.Chaque ligne suivante correspond à une données différente. Par exemple, l'antépénultième ligne (avant-avant dernière ligne, numéro 3676679) signifie :
En 2013, dans le département de Seine-Saint-Denis (93), trois filles sont nées avec le prénom Zyna.
✏️ Complétez la phrase suivante avec les données d'une des lignes que vous voyez affichées (sans prénom rare, ni XXXX) :
En ????, dans le département ???? (??), ??? ????? sont nés/nées avec le prénom ????.
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 3784668.
import pandas prenoms = pandas.read_csv("dpt2021.csv", sep=";") recherche = prenoms.loc[3784668, "annais"] print(recherche)
Exécutez-ce programme et vérifiez qu'il donne la valeur attendue.
✏️ Modifiez le programme précédent pour qu'il affiche uniquement un des prénoms du tableau. Recopiez sur votre compte-rendu la ligne de votre programme
`recherche = prenoms.loc[???????]
.✏️ Il est aussi possible d'afficher toute une ligne ou toute une colonne, en utilisant la syntaxe
prenoms.loc[3676679, :]
(pour avoir toute la ligne numéro 3676679), ouprenoms.loc[:, "annais"]
(pour avoir toute la colonneannais
(année de naissance)).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.
Recopier le programme suivant dans Thonny, et exécutez-le.
import pandas prenoms = pandas.read_csv("dpt2021.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).
Dans le programme précédent, remplacez la troisième ligne (
recherche = prenoms.loc…
) par :recherche = prenoms.loc[(prenoms['annais'] == "2021"), :]
Exécutez le programme, et vérifiez que ne sont affichés que les prénoms donnés l'année 2021.
Enfin, il est possible de combiner les conditions. Remplacez encore la troisième ligne (
recherche = …
) par :recherche = prenoms.loc[(prenoms['dpt'] == "38") & (prenoms['annais'] == "2021"), :]
Exécutez-le, et vérifiez que ne sont affichés que les prénoms donnés en Isère (38), l'année 2021 (remarquez le symbole
&
situé entre les deux conditions).Il est possible aussi de trier les résultats. Ajoutons cela à la dernère recherche :
import pandas prenoms = pandas.read_csv("dpt2021.csv", sep=";") recherche = prenoms.loc[(prenoms['dpt'] == "38") & (prenoms['annais'] == "2019"), :] 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.
Répondre à cette question en lisant le résultat du programme de la question précédente. Ignorer les prénoms rares.
- ✏️ En 2019, en Isère, quel a été le prénom le plus donné ?
- ✏️ En 2019, en Isère, quel a été le prénom de filles le plus donné ?
- ✏️ En 2019, en Isère, combien de garçons ont été prénommés Gabriel ?
Répondre à cette question en modifiant le programme qui est actuellement ouvert dans Thonny.
- ✏️ En quelle année êtes-vous né·e ? Dans quel département ?
- ✏️ 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 ?
- ✏️ 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 ?
Un peu plus d'autonomie
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.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'] == 2019), ["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 2019 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 ligne506 France 3 35.906998
signifie : « En 2019, sur France 3, le temps consacré à la prise de parole (par opposition aux silences ou à la musique) a été pris par les femmes à 35,9 % (et donc par les hommes à 63,1 %) ».Ajoutez
.mean()
à la fin de la lignerecherche = …
, et exécutez le programme. Il affiche alors la moyenne de la proportion du temps de parole par les femmes pour l'année 2019, pour l'ensemble des chaînes radio et télé étudiées1.✏️ Quelle est la moyenne de la proportion du temps de parole par les femmes pour les années 1999, 2009, 2019 ?
Ne donnez pas seulement la réponse, mais expliquer les modifications faites à votre programme pour obtenir cette réponse (ou copiez-collez le programme qui vous a permis de trouver la réponse).
✏️ La situation semble-t-elle être plus égalitaire au fil du temps ?
Enlevez le
.mean()
ajouté à la question précédente, et modifiez (si nécessaire) votre programme pour qu'il affiche les données de l'année 2019.✏️ En 2019, 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 (ou copiez-collez le programme qui vous a permis de trouver la réponse).
Rendu
- Vérifiez que vos deux noms apparaissent dans l'en-tête du document.
- Convertissez votre compte-rendu au format PDF.
- Rendez-moi le compte-rendu (celui au format PDF) sur Pronote.
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…↩