"""eda_utils.py Ce module contient des fonctions utilitaires pour l'analyse exploratoire des données (EDA) et l'analyse en composantes principales (PCA). Les fonctions incluent : - check_duplicates : vérifie les doublons dans un dataframe - check_missing_values : vérifie les valeurs manquantes dans un dataframe - summarize_dataframe : résume les caractéristiques d'un dataframe - run_pca : effectue une analyse en composantes principales (PCA) sur les données fournies """ import pandas as pd from IPython.display import display import numpy as np def check_duplicates(df,list_col=None): """ Vérifie les doublons dans un dataframe en fonction d'une liste de colonnes args: df: dataframe à vérifier list_col: liste des colonnes à utiliser pour vérifier les doublons si pas de list_col, la fonction vérifie les doublons sur toutes les colonnes du dataframe la fonction affiche le nombre de doublons. la fonction retourne un dataframe contenant les doublons. return: dataframe contenant les doublons """ try: import pandas as pd if list_col is None: list_col = df.columns.tolist() duplicate_rows = df[df.duplicated(subset=list_col, keep=False)] print(f"Nombre de doublons : {duplicate_rows.shape[0]}") return duplicate_rows except ImportError as e: print("Erreur d'importation : ", e) return None def check_missing_values(df, list_col=None, group_by=None): """ Vérifie les valeurs manquantes dans un dataframe args: df: dataframe à vérifier optionnel: list_col: liste des colonnes à utiliser pour vérifier les valeurs manquantes optionnel: regrouper les valeurs manquantes par une ou plusieurs colonnes (ex: par année, par pays, etc.) la fonction affiche le taux de valeurs manquantes pour chaque colonne du dataframe return: dataframe contenant le taux de valeurs manquantes pour chaque colonne du dataframe """ try: if list_col is None: list_col = df.columns.tolist() if isinstance(list_col, str): list_col = [list_col] missing_values = df[list_col].isna().sum() missing_values_percentage = (missing_values / len(df) * 100).round(2) missing_values_df = pd.DataFrame({ "column": missing_values.index, "missing_values": missing_values.values, "missing_values_percentage": missing_values_percentage.values }) if group_by is not None: grouped_missing = ( df.groupby(group_by, as_index=False)[list_col] .apply(lambda x: x.isna().mean() * 100) .round(2) .reset_index() ) display(grouped_missing) return grouped_missing else: display(missing_values_df) return missing_values_df except Exception as e: print("Erreur lors de l'analyse des valeurs manquantes :", e) def summarize_dataframe(df): """ Résume les caractéristiques d'un dataframe args: df: dataframe à résumer la fonction affiche : - les 5 premières et dernières lignes du dataframe - le nombre de lignes et de colonnes du dataframe - les infos du dataframe (types de données, valeurs manquantes, etc.) - les statistiques descriptives du dataframe (moyenne, écart-type, etc.) pour les colonnes numériques - les statistiques descriptives du dataframe (moyenne, écart-type, etc.) pour les colonnes objects """ try: print("5 premières lignes du dataframe :") display(df.head()) print(f"\nNombre de lignes : {df.shape[0]}, Nombre de colonnes : {df.shape[1]}") print("\nInfos du dataframe :") display(df.info()) print("\nStatistiques descriptives pour les colonnes numériques :") display(df.describe()) print("\nStatistiques descriptives pour les colonnes objects :") display(df.describe(include=['object'])) except Exception as e: print("Erreur lors de la summarisation du dataframe : ", e) from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA def run_pca(df, features): """ Effectue une analyse en composantes principales (PCA) sur les données fournies. Args: df (pd.DataFrame): Le DataFrame contenant les données à analyser. features (list): Liste des noms de colonnes à utiliser pour la PCA. Returns: explained_var (np.array): Pourcentage de variance expliquée par chaque composante principale. cumulative_var (np.array): Variance cumulée expliquée par les composantes principales. X_pca (np.array): Les données transformées dans l'espace des composantes principales. pca (PCA object): L'objet PCA ajusté, contenant les composantes et les valeurs propres. """ try: X = df[features] X_scaled = StandardScaler().fit_transform(X) pca = PCA() X_pca = pca.fit_transform(X_scaled) explained_var = pca.explained_variance_ratio_ * 100 cumulative_var = np.cumsum(explained_var) print("PCA effectuée avec succès.") except Exception as e: print(f"Erreur lors de l'exécution de la PCA : {e}") explained_var, cumulative_var, X_pca, pca = None, None, None, None return explained_var, cumulative_var, X_pca, pca