In [1]:
    
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from scipy.stats import pearsonr
%matplotlib inline
    
In [2]:
    
lycee2015 = pd.read_csv(
    filepath_or_buffer='../../DATA/MEN-DEPP-indicateurs-de-resultats-des-LEGT-2015.csv',
    encoding='latin-1',
    sep=';')
    
In [3]:
    
lycee2015.head(2).transpose()
    
    Out[3]:
In [4]:
    
plt.figure(figsize=(10, 6))
lycee2015.groupby('Département')['Taux Brut de Réussite Total séries'].mean().order(ascending=False).head(20).plot(kind='barh')
plt.gca().invert_yaxis()
    
    
    
In [5]:
    
plt.figure(figsize=(10, 6))
lycee2015.groupby('Académie')['Taux Brut de Réussite Total séries'].mean().order(ascending=False).head(20).plot(kind='barh')
plt.gca().invert_yaxis()
    
    
    
In [6]:
    
effectifs_cols = [
    'Effectif de seconde',
    'Effectif de première',
    'Effectif de terminale']
lycee2015.ix[:, effectifs_cols + ['Taux Brut de Réussite Total séries']].head(2)
    
    Out[6]:
In [7]:
    
variations_cols = [
    'variation_seconde_premiere',
    'variation_seconde_terminale',
    'variation_premiere_terminale']
lycee2015['variation_seconde_premiere'] = (lycee2015['Effectif de première'] / lycee2015['Effectif de seconde'] - 1) * 100
lycee2015['variation_premiere_terminale'] = (lycee2015['Effectif de terminale'] / lycee2015['Effectif de première'] - 1) * 100
lycee2015['variation_seconde_terminale'] = (lycee2015['Effectif de terminale'] / lycee2015['Effectif de seconde'] - 1) * 100
lycee2015.ix[:, effectifs_cols + variations_cols + ['Taux Brut de Réussite Total séries']].head(4)
    
    Out[7]:
In [8]:
    
lycee2015.ix[:, variations_cols].describe()
    
    Out[8]:
Wow, il y a des variations d'effectifs gigantesques pour certains lycées.
In [9]:
    
lycee2015.loc[~np.isfinite(lycee2015.variation_seconde_terminale), effectifs_cols]
    
    Out[9]:
In [10]:
    
# Nombre de lycées français de l'échantillon (2015)
len(lycee2015)
    
    Out[10]:
In [11]:
    
no_outliers = (lycee2015.variation_premiere_terminale > -40) & (lycee2015.variation_premiere_terminale <= 20) & (lycee2015['Taux Brut de Réussite Total séries'] > 70)
plt.figure(figsize=(10, 8))
plt.scatter(
    data=lycee2015.loc[no_outliers],
    x='Taux Brut de Réussite Total séries',
    y='variation_premiere_terminale',
    alpha=0.1)
plt.xlabel('Taux Brut de Réussite Total séries')
plt.ylabel('variation effectif première terminale')
    
    Out[11]:
    
On ne voit pas grand chose, regardons la corrélation de Pearson.
In [12]:
    
lycee2015.loc[:, variations_cols + ['Taux Brut de Réussite Total séries']].corr(method='pearson')
    
    Out[12]:
Une corrélation de -0.24 entre le taux de réussite au BAC toutes séries confondues et variation d'effectif entre la première et la terminale. Not bad !
Vérifions avec le package scipy.stats si la corrélation est significative (p-value < 1%).
In [13]:
    
pearsonr(lycee2015.variation_premiere_terminale, lycee2015['Taux Brut de Réussite Total séries'])
    
    Out[13]: