--- a
+++ b/src/data_loader.py
@@ -0,0 +1,67 @@
+import pandas as pd
+
+def load_data(file_path):
+    return pd.read_csv(file_path)
+
+def save_processed_data(data, output_path):
+    data.to_pickle(output_path)
+
+def load_processed_data(input_path):
+    return pd.read_pickle(input_path)
+
+def balance_dataset(data_path, target_column, output_path, random_state=42):
+    """
+    Équilibre le dataset en assurant que chaque classe ait le même nombre de lignes, 
+    basé sur la classe ayant le moins de lignes.
+
+    Parameters:
+    - data_path (str): Le chemin du fichier CSV à charger.
+    - target_column (str): Le nom de la colonne cible pour équilibrer les classes.
+    - output_path (str): Le chemin du fichier CSV où sauvegarder le dataset équilibré.
+    - random_state (int): La graine aléatoire pour la reproductibilité (par défaut 42).
+    """
+    # Charger les données
+    df = pd.read_csv(data_path)
+    
+    # Trouver la taille de la plus petite classe
+    min_class_size = df[target_column].value_counts().min()
+    
+    # Échantillonner chaque classe pour avoir un nombre égal de lignes
+    df_balanced = df.groupby(target_column).apply(lambda x: x.sample(min_class_size, random_state=random_state)).reset_index(drop=True)
+    
+    # Sauvegarder le nouveau dataset
+    df_balanced.to_csv(output_path, index=False)
+    
+    # Vérifier la distribution des classes dans le nouvel ensemble de données
+    distribution = df_balanced[target_column].value_counts()
+    print("Distribution des classes dans le dataset équilibré :")
+    print(distribution)
+    
+    return df_balanced
+
+def reduce_dataset(data_path, target_column, output_path, train_size=100000, random_state=42):
+    """
+    Réduit le dataset à un nombre spécifié de lignes tout en conservant les proportions des classes.
+    
+    Parameters:
+    - data_path (str): Le chemin du fichier CSV à charger.
+    - target_column (str): Le nom de la colonne cible pour le stratified sampling.
+    - output_path (str): Le chemin du fichier CSV où sauvegarder le dataset réduit.
+    - train_size (int): Le nombre de lignes du dataset réduit (par défaut 100 000).
+    - random_state (int): La graine aléatoire pour la reproductibilité (par défaut 42).
+    """
+    # Charger les données
+    df = pd.read_csv(data_path)
+    
+    # Réduire le dataset à la taille spécifiée en utilisant un échantillonnage stratifié
+    df_reduced, _ = train_test_split(df, stratify=df[target_column], train_size=train_size, random_state=random_state)
+    
+    # Sauvegarder le nouveau dataset
+    df_reduced.to_csv(output_path, index=False)
+    
+    # Vérifier la distribution des classes dans le nouvel ensemble de données
+    distribution = df_reduced[target_column].value_counts()
+    print("Distribution des classes dans le dataset réduit :")
+    print(distribution)
+    
+    return df_reduced
\ No newline at end of file