agritech-api / utils /eda_utils.py
github-actions
Deploy API from GitHub Actions
2477a46
Raw
History Blame Contribute Delete
5.56 kB
"""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