ConsigneAnalyse exploratoire de données complète
eda (Exploratory Data Analysis) = analyse exploratoire. L'étape entre les données brutes et le modèle : comprendre ce qu'on a, repérer les patterns, formuler des hypothèses.
1. Combien de lignes / colonnes ? Types ?2. Y a-t-il des NaN ou des doublons ?3. Distribution de chaque variable (forme, outliers) ?4. Corrélations entre variables ?5. Différences entre groupes (cible vs features) ?df.shapedf.info()df.describe() stats numériquesdf.describe(include='object') stats catégoriellesdf.isnull().sum()df.duplicated().sum()df.corr().round(2) matrice de corrélation (numériques)df[col].value_counts() fréquences- histogrammes distribution d'une variable- boxplots outliers, comparaison de groupes- scatter plots corrélations 2 à 2- heatmap matrice de corrélation- bar charts fréquences catégoriellesimport seaborn as sns # bibliothèque sur-couche de matplotlibsns.pairplot(df, hue='cible')sns.heatmap(df.corr(), annot=True)import pandas as pdimport numpy as npnp.random.seed(42)n = 200heures_etude = np.random.uniform(1, 15, n)note_precedente = np.random.uniform(5, 18, n)bruit = np.random.normal(0, 5, n)df = pd.DataFrame({ 'heures_etude': heures_etude, 'nb_exercices': np.random.randint(5, 50, n), # sans lien avec la réussite 'note_precedente': note_precedente, # la réussite DÉPEND des heures et de la note précédente : c'est ce lien # que l'exploration doit retrouver, sinon on ne regarde que du bruit 'reussite': (heures_etude * 2 + note_precedente * 3 + bruit > 45).astype(int)})print('=== EDA ===')print(f'Shape: {df.shape}')print(f'Stats:\n{df.describe()}')print(f'Corrélations:\n{df.corr().round(2)}')print(f'Réussite: {df["reussite"].value_counts().to_dict()}')# Comparer les moyennes par groupe (réussis vs échoués)for col in ['heures_etude', 'nb_exercices', 'note_precedente']: reussis = df[df['reussite']==1][col].mean() echoues = df[df['reussite']==0][col].mean() print(f'{col}: reussis={reussis:.1f}, echoues={echoues:.1f}')- écrire un notebook EDA AVANT de modéliser- documenter les hypothèses au fur et à mesure- vérifier les valeurs absurdes (âge négatif, dates futures...)- identifier la cible et son taux de baseydata-profiling (ex pandas-profiling) génère un rapport eda complet en une ligne : df.profile_report(). Excellent pour démarrer.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →