TP : exploiter des données ouvertes
L’INSEE est l’institut chargé de la production, de l’analyse et de la publication des statistiques officielles en France. Nombre de ces données sont accessibles librement sur son site, par exemple à l’adresse https://www.insee.fr/fr/statistiques/4994589 on peut télécharger un fichier CSV de 2.3 millions de ligne, chacune listant des informations sur une personne salariée (une personne sur 12 est dans le fichier).
Pour faciliter un peu le traitement, je vous ai préparé le fichier salaires_2017_20k.csv qui contient seulement 20000 lignes prises au hasard, mais une fois que votre code fonctionne vous pouvez le tester sur le fichier entier.
À faire
Ouvrez dans Geany le fichier salaires_2017_20k.csv
. Les noms des champs sur la première
ligne ainsi que les valeurs de ces champs sur les lignes suivantes sont un peu mystérieux, et
sont détaillés dans un autre fichier CSV : Varmod_SALAAN_2017.csv.
En regardant les deux fichiers, trouvez dans quelle tranche est le salaire annuel de la personne de la première ligne.
Ouvrez ensuite Thonny, et enregistrez un script python dans le même dossier que le fichier csv.
Lorsqu'on lit un très gros fichier, on préfère ne pas convertir directement le fichier en liste python car c'est possible qu'il ne tienne pas dans la RAM de l'ordinateur. Au lieu de convertir le résultat de csv.DictReader()
directement avec list()
, on peut le parcourir ligne par ligne avec une boucle for :
import csv
fichier = open("salaires_2017_20k.csv")
reader = csv.DictReader(fichier,delimiter=";")
nb_femmes = 0
for ligne in reader:
if ligne["SEXE"]=="2":
nb_femmes += 1
print(nb_femmes)
Attention
On ne peut pas parcourir deux fois de suite le fichier de cette manière car lire chaque ligne la "consomme", et la deuxième fois il n'y en aura plus. Il faut dans ce cas remettre la lecture du fichier au début avec fichier.seek(0)
À faire
Ajoutez une variable nb_hommes
au code précédent, et mettez là à jour dans
la même boucle for pour afficher à la fin le nombre de femmes et d'hommes dans
ce fichier.
Le champ qui correspond au salaire s'appelle TRNNETO et prend des valeurs entre 0 et 23.
À faire
En ajoutant une condition, trouvez le nombre de femmes du fichiers qui ont un salaire dans la tranche la plus élevée (23). Trouvez de même le nombre d'hommes qui ont un salaire dans cette tranche.
On voudrait avoir une vue d'ensemble pour chacune des tranches salariales :
- Créez deux listes, salairesF et salairesH de 24 éléments chacune, initialisées à 0.
salairesF[t]
contiendra le nombre de femmes dont le salaire est dans la tranchet
. - Dans la boucle for, mettez dans une variable
t
la tranche salariale de la personne de la ligne actuelle, convertie en int. - Puis selon le cas, incrémentez
salairesF[t]
ousalairesH[t]
- Affichez le contenu de
salairesF
etsalairesH
Pour voir ça sous forme graphique, on peut utiliser la bibliothèque python matplotlib
qui permet de tracer des graphiques (et numpy
que vous verrez parfois et qui sert
à manipuler des données avec plus de fonctionnalités que les listes) :
import matplotlib.pyplot as plt
import numpy as np
def hbar_plot(l1, label1, l2, label2):
"""Affiche les données de l1 et l2 en barres"""
n = len(l1)
x = np.arange(n)
plt.barh(x - 0.2,l2,0.4,color="gray",label=label2)
plt.barh(x + 0.2,l1,0.4,color="purple",label=label1)
plt.xlabel("nombre de personnes")
plt.ylabel("catégorie de salaires")
plt.legend()
plt.show()
Copiez ce code et utilisez la fonction hbar_plot
pour afficher visuellement
le contenu de salairesF
et salairesH
, en donnant "Femmes"
et "Hommes"
comme label1 et label2 par exemple.
Que peut-on en conclure sur l'égalité salariale entre les femmes et les hommes en France ?
À faire
Pour vérifier l'analyse, téléchargez le fichier complet sur le site de l'INSEE et faites tourner le code sur les 2.3 millions de lignes.
Combien de temps cela prend-il ?
À faire
Observer le fichier de description des champs pour bien voir les variables à votre disposition.
Formulez une hypothèse qui vous intéresse et modifier votre code pour la tester !