Études statistiques sur Parcoursup
Si Binder ne fonctionne pas, vous pouvez utiliser une version locale de Python (Pyzo, Spider... où il faudra d'abord installer pandas avec install pandas
ou pip install pandas
) ou un éditeur Python en ligne (https://www.programiz.com/python-programming/online-compiler/ par exemple).
Dans ce TP, nous allons explorer les données en libre accès issues de Parcoursup sur https://data.enseignementsup-recherche.gouv.fr/explore/dataset/fr-esr-parcoursup.
Commençons par charger les données en utilisant le module pandas (particulièrement adapté en data science) en exécutant la case suivante (ce qui peut prendre quelques minutes) :
import pandas as pd
url = "https://data.enseignementsup-recherche.gouv.fr/explore/dataset/fr-esr-parcoursup/download/?format=csv&timezone=Europe/Berlin&lang=fr&use_labels_for_header=true&csv_separator=%3B" # Lien du dataset
df = pd.read_csv(url, sep=";").iloc[:, [110, 3, 5, 7, 8, 9, 17, 45, 82, 83, 84, 85, 101, 107, 113, 114, 115]]
df = df.rename(columns={"% d’admis néo bacheliers sans mention au bac": "Sans mention", "% d’admis néo bacheliers avec mention Assez Bien au bac": "Mention Assez Bien", "% d’admis néo bacheliers avec mention Bien au bac": "Mention Bien", "% d’admis néo bacheliers avec mention Très Bien au bac": "Mention Très Bien", "Rang du dernier appelé du groupe 1": "Rang dernier appelé", "Taux d’accès des candidats ayant postulé à la formation (ratio entre le dernier appelé et le nombre vœux PP)": "Taux d'accès", "LIB_FOR_VOE_INS": "Filière", "Effectif total des candidats ayant accepté la proposition de l’établissement (admis)": "Effectif"})
df
est un dataframe : un tableau de données. Voici un aperçu de df
:
df
Filière | Établissement | Département de l’établissement | Académie de l’établissement | Commune de l’établissement | Sélectivité | Effectif total des candidats pour une formation | Effectif | Sans mention | Mention Assez Bien | Mention Bien | Mention Très Bien | Rang dernier appelé | Taux d'accès | Dont taux d’accès des candidats ayant un bac général ayant postulé à la formation | Dont taux d’accès des candidats ayant un bac technologique ayant postulé à la formation | Dont taux d’accès des candidats ayant un bac professionnel ayant postulé à la formation | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Licence - Portail Philosophie - Anthropologie ... | Aix Marseille Université - Site d'Aix-en-Provence | Bouches-du-Rhône | Aix-Marseille | Aix-en-Provence | formation non sélective | 385 | 46 | 14.298828 | 28.597656 | 14.298828 | 28.6 | 318.0 | 91.0 | 78.0 | 9.0 | 7.0 |
1 | D.E Assistant de Service Social | ECOLE PRATIQUE SERVICE SOCIAL CTRE POLYTECHN. ... | Val-d'oise | Versailles | Cergy | formation sélective | 72 | 30 | 66.687500 | 13.298828 | 13.298828 | 6.7 | 43.0 | 65.0 | 37.0 | 37.0 | 23.0 |
2 | DN MADE - Graphisme - - Spécialité : Design gr... | Lycée De La Communication | Moselle | Nancy-Metz | Metz | formation sélective | 779 | 14 | 0.000000 | 18.199219 | 45.500000 | 36.4 | 123.0 | 16.0 | 79.0 | 14.0 | 7.0 |
3 | Licence - Langues, littératures & civilisation... | Université Sorbonne Nouvelle Paris 3 | Paris | Paris | Paris 5e Arrondissement | formation non sélective | 55 | 14 | 40.000000 | 60.000000 | 0.000000 | 0.0 | 42.0 | 98.0 | 86.0 | 14.0 | 0.0 |
4 | Licence - Langues, littératures & civilisation... | Université Sorbonne Nouvelle Paris 3 | Paris | Paris | Paris 5e Arrondissement | formation non sélective | 83 | 19 | 45.500000 | 36.398438 | 18.199219 | 0.0 | 48.0 | 100.0 | 63.0 | 21.0 | 16.0 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
13391 | Licence - Langues, littératures & civilisation... | Aix Marseille Université - Site d'Aix-en-Provence | Bouches-du-Rhône | Aix-Marseille | Aix-en-Provence | formation non sélective | 108 | 18 | 18.199219 | 63.593750 | 0.000000 | 18.2 | 66.0 | 99.0 | 89.0 | 11.0 | 0.0 |
13392 | Licence - Langues, littératures & civilisation... | Aix Marseille Université - Site d'Aix-en-Provence | Bouches-du-Rhône | Aix-Marseille | Aix-en-Provence | formation non sélective | 474 | 34 | 21.097656 | 42.093750 | 31.597656 | 5.3 | 184.0 | 39.0 | 94.0 | 3.0 | 3.0 |
13393 | Licence - Langues, littératures & civilisation... | Université Sorbonne Nouvelle Paris 3 | Paris | Paris | Paris 5e Arrondissement | formation non sélective | 338 | 36 | 10.000000 | 40.000000 | 40.000000 | 10.0 | 142.0 | 42.0 | 72.0 | 11.0 | 14.0 |
13394 | Licence - Langues, littératures & civilisation... | Aix Marseille Université - Site d'Aix-en-Provence | Bouches-du-Rhône | Aix-Marseille | Aix-en-Provence | formation non sélective | 329 | 40 | 20.000000 | 20.000000 | 40.000000 | 20.0 | 260.0 | 82.0 | 78.0 | 15.0 | 8.0 |
13395 | Licence - Portail Histoire - Géographie à dist... | Aix Marseille Université - Site d'Aix-en-Provence | Bouches-du-Rhône | Aix-Marseille | Aix-en-Provence | formation non sélective | 324 | 35 | 50.000000 | 0.000000 | 50.000000 | 0.0 | 292.0 | 94.0 | 71.0 | 23.0 | 3.0 |
13396 rows × 17 columns
Chaque ligne correspond à une formation (13396 au total) et chaque colonne à un attribut. Par exemple, la première ligne correspond au lycée Sainte Famille à Grenoble.
df.columns
est une liste contenant les noms des colonnes. Par exemple la première colonne est :
df.columns[0]
'Filière'
Exercice
Afficher le nom de chaque colonne avec une boucle for
.
Solution
for col in df.columns:
print(col)
Filière Établissement Département de l’établissement Académie de l’établissement Commune de l’établissement Sélectivité Effectif total des candidats pour une formation Effectif total des candidats ayant accepté la proposition de l’établissement (admis) Sans mention Mention Assez Bien Mention Bien Mention Très Bien Rang dernier appelé Taux d'accès Dont taux d’accès des candidats ayant un bac général ayant postulé à la formation Dont taux d’accès des candidats ayant un bac technologique ayant postulé à la formation Dont taux d’accès des candidats ayant un bac professionnel ayant postulé à la formation
Formation sélective ou non¶
Une des colonnes de df
est "Sélectivité"
et indique si une formation est sélective ou pas (c'est-à-dire si les élèves sont sélectionnés suivant leur dossier) :
df["Sélectivité"] # liste des sélectivités ("formation sélective" "formation non sélective")
0 formation sélective 1 formation sélective 2 formation sélective 3 formation sélective 4 formation sélective ... 13391 formation non sélective 13392 formation non sélective 13393 formation sélective 13394 formation non sélective 13395 formation non sélective Name: Sélectivité, Length: 13396, dtype: object
df["Sélectivité"][0] # indique la sélectivité de la 1ère formation
'formation sélective'
Exercice
Calculer le pourcentage de formations sélectives.
Solution
p = 0
for i in range(len(df)):
if df["Sélectivité"][i] == "formation sélective":
p += 1
p/len(df) # proportion de formations sélectives
0.7843386085398626
Lycée Fénelon Sainte-Marie¶
Pour chercher des valeurs, on peut utiliser query
. Par exemple, l'instruction suivante permet de récupérer toutes les MP2I de France :
df.query("Filière == 'CPGE - MP2I'")
Filière | Établissement | Département de l’établissement | Académie de l’établissement | Commune de l’établissement | Sélectivité | Effectif total des candidats pour une formation | Effectif total des candidats ayant accepté la proposition de l’établissement (admis) | Sans mention | Mention Assez Bien | Mention Bien | Mention Très Bien | Rang dernier appelé | Taux d'accès | Dont taux d’accès des candidats ayant un bac général ayant postulé à la formation | Dont taux d’accès des candidats ayant un bac technologique ayant postulé à la formation | Dont taux d’accès des candidats ayant un bac professionnel ayant postulé à la formation | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2297 | CPGE - MP2I | Lycée Paul Valery | Paris | Paris | Paris 12e Arrondissement | formation sélective | 1705 | 49 | 2.099609 | 36.195312 | 44.695312 | 14.9 | 767.0 | 45.0 | 98.0 | 2.0 | 0.0 |
2338 | CPGE - MP2I | Lycée Victor Hugo | Doubs | Besancon | Besançon | formation sélective | 750 | 42 | 0.000000 | 23.796875 | 42.898438 | 26.2 | 401.0 | 53.0 | 100.0 | 0.0 | 0.0 |
2340 | CPGE - MP2I | Lycée Faidherbe | Nord | Lille | Lille | formation sélective | 1309 | 47 | 0.000000 | 0.000000 | 17.398438 | 58.7 | 297.0 | 23.0 | 100.0 | 0.0 | 0.0 |
2341 | CPGE - MP2I | Lycée Henri Wallon | Nord | Lille | Valenciennes | formation sélective | 679 | 24 | 0.000000 | 8.298828 | 54.195312 | 33.3 | 250.0 | 37.0 | 100.0 | 0.0 | 0.0 |
2342 | CPGE - MP2I | Lycée Fénelon Sainte-Marie | Paris | Paris | Paris 8e Arrondissement | formation sélective | 1384 | 43 | 0.000000 | 2.299805 | 55.796875 | 41.9 | 366.0 | 26.0 | 100.0 | 0.0 | 0.0 |
2343 | CPGE - MP2I | Lycée Pierre De Fermat | Haute-Garonne | Toulouse | Toulouse | formation sélective | 2234 | 48 | 0.000000 | 0.000000 | 2.099609 | 68.1 | 285.0 | 13.0 | 100.0 | 0.0 | 0.0 |
5332 | CPGE - MP2I | Lycée Charles Coeffin | Guadeloupe | Guadeloupe | Baie-Mahault | formation sélective | 160 | 20 | 17.597656 | 35.296875 | 35.296875 | 11.8 | 107.0 | 74.0 | 100.0 | 0.0 | 0.0 |
5333 | CPGE - MP2I | Lycée Colbert | Nord | Lille | Tourcoing | formation sélective | 433 | 18 | 0.000000 | 15.398438 | 53.796875 | 23.1 | 238.0 | 55.0 | 100.0 | 0.0 | 0.0 |
5334 | CPGE - MP2I | Lycée du Parc | Rhône | Lyon | Lyon 6e Arrondissement | formation sélective | 2551 | 46 | 0.000000 | 0.000000 | 0.000000 | 62.2 | 344.0 | 13.0 | 100.0 | 0.0 | 0.0 |
5372 | CPGE - MP2I | Lycée Carnot | Côte-d'or | Dijon | Dijon | formation sélective | 1233 | 46 | 0.000000 | 13.000000 | 67.390625 | 17.4 | 483.0 | 41.0 | 100.0 | 0.0 | 0.0 |
5374 | CPGE - MP2I | Lycée Louis Le Grand | Paris | Paris | Paris 5e Arrondissement | formation sélective | 2970 | 47 | 0.000000 | 0.000000 | 8.699219 | 47.8 | 127.0 | 4.0 | 100.0 | 0.0 | 0.0 |
7012 | CPGE - MP2I | Lycée Kléber | Bas-Rhin | Strasbourg | Strasbourg | formation sélective | 1207 | 46 | 0.000000 | 2.199707 | 34.796875 | 58.7 | 224.0 | 19.0 | 100.0 | 0.0 | 0.0 |
7050 | CPGE - MP2I | Lycée Champollion | Isère | Grenoble | Grenoble | formation sélective | 1672 | 48 | 0.000000 | 2.099609 | 34.000000 | 59.6 | 269.0 | 16.0 | 100.0 | 0.0 | 0.0 |
7051 | CPGE - MP2I | Lycée général Clemenceau | Loire-Atlantique | Nantes | Nantes | formation sélective | 1837 | 48 | 0.000000 | 0.000000 | 12.798828 | 68.1 | 229.0 | 12.0 | 100.0 | 0.0 | 0.0 |
7052 | CPGE - MP2I | Lycée International de Valbonne | Alpes-Maritimes | Nice | Valbonne | formation sélective | 844 | 47 | 0.000000 | 14.898438 | 44.695312 | 36.2 | 324.0 | 38.0 | 100.0 | 0.0 | 0.0 |
9832 | CPGE - MP2I | Lycée Thiers | Bouches-du-Rhône | Aix-Marseille | Marseille 1er Arrondissement | formation sélective | 1247 | 48 | 0.000000 | 0.000000 | 28.296875 | 71.7 | 305.0 | 24.0 | 100.0 | 0.0 | 0.0 |
9836 | CPGE - MP2I | Lycée Claude Fauriel | Loire | Lyon | Saint-Etienne | formation sélective | 881 | 47 | 0.000000 | 19.097656 | 48.898438 | 31.9 | 456.0 | 52.0 | 100.0 | 0.0 | 0.0 |
9838 | CPGE - MP2I | Lycée Descartes | Indre-et-Loire | Orléans-Tours | Tours | formation sélective | 1562 | 46 | 0.000000 | 0.000000 | 31.097656 | 62.2 | 329.0 | 21.0 | 100.0 | 0.0 | 0.0 |
9840 | CPGE - MP2I | Lycée Janson De Sailly | Paris | Paris | Paris 16e Arrondissement | formation sélective | 2931 | 50 | 0.000000 | 0.000000 | 30.000000 | 62.0 | 379.0 | 13.0 | 100.0 | 0.0 | 0.0 |
11980 | CPGE - MP2I | Lycée Gay-Lussac | Haute-Vienne | Limoges | Limoges | formation sélective | 664 | 23 | 0.000000 | 0.000000 | 52.195312 | 43.5 | 254.0 | 38.0 | 100.0 | 0.0 | 0.0 |
11981 | CPGE - MP2I | Lycée Franklin Roosevelt | Marne | Reims | Reims | formation sélective | 702 | 45 | 2.299805 | 23.296875 | 58.093750 | 16.3 | 393.0 | 56.0 | 100.0 | 0.0 | 0.0 |
12019 | CPGE - MP2I | Lycée Louis Thuillier | Somme | Amiens | Amiens | formation sélective | 851 | 37 | 0.000000 | 2.899902 | 65.687500 | 25.7 | 274.0 | 35.0 | 100.0 | 0.0 | 0.0 |
12020 | CPGE - MP2I | Lycée Montaigne | Gironde | Bordeaux | Bordeaux | formation sélective | 1994 | 48 | 0.000000 | 0.000000 | 29.199219 | 62.5 | 299.0 | 15.0 | 100.0 | 0.0 | 0.0 |
12021 | CPGE - MP2I | Lycée Aux Lazaristes | Rhône | Lyon | Lyon 5e Arrondissement | formation sélective | 1240 | 12 | 0.000000 | 0.000000 | 0.000000 | 50.0 | 141.0 | 11.0 | 100.0 | 0.0 | 0.0 |
12022 | CPGE - MP2I | Lycée Saint-Louis (6ème) | Paris | Paris | Paris 6e Arrondissement | formation sélective | 3057 | 46 | 0.000000 | 0.000000 | 8.699219 | 69.6 | 278.0 | 9.0 | 100.0 | 0.0 | 0.0 |
12023 | CPGE - MP2I | Lycée Hoche | Yvelines | Versailles | Versailles | formation sélective | 2102 | 48 | 0.000000 | 0.000000 | 22.898438 | 52.1 | 193.0 | 9.0 | 100.0 | 0.0 | 0.0 |
Quelles sont les MP2I avec le plus/le moins d'élèves ?
Exercice
En utilisant df.query
de façon similaire à ci-dessus, chercher toutes les formations correpondants à l'établissement "Lycée Fénelon Sainte-Marie". Quelle est la filière du lycée avec le plus de mentions TB ?
Effectif¶
df["Effectif"]
donne l'effectif (nombre d'élèves) de chaque formation. Par exemple, pour obtenir l'effectif de la première formation :
df["Effectif"][0]
19
Exercice
Quel est l'effectif moyen d'une formation en France ?
Calculer l'effectif maximum et minimum d'une formation en France. Quels sont les noms des filières correspondantes ?
Filières en CPGE¶
On peut tester si une chaîne de caractère contient un mot en utilisant in
:
"mat" in "informatique"
True
"math" in "informatique"
False
Exercice
Quel est le nombre de CPGE en France ? Et pour chaque filière de CPGE (MPSI, PCSI, MP2I, BCPST...) ?
Pourcentage de mentions Très Bien¶
Exercice
Combien y a t-il eu de mentions TB en France ?
Indice : Il faut multiplier chaque pourcentage de mentions TB par l'effectif de la formation, puis prendre la somme.
À vous de jouer !¶
Chercher d'autres statistiques sur les données : pourcentage de bacheliers technologiques dans le supérieur, filière de CPGE la plus sélective...
Vous pouvez aussi explorer d'autres données sur https://data.enseignementsup-recherche.gouv.fr.