import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split def load_and_preprocess_data(): """Charge les données sans renommer les colonnes""" try: data = pd.read_csv("inflation_beac_complet_2010_2025.csv") data['Année'] = pd.to_datetime(data['Année'], format='%Y').dt.strftime('%Y-%m-%d') # Nettoyage data = data.dropna() # Normalisation (en utilisant les noms exacts des colonnes) scaler = MinMaxScaler() numeric_cols = [ "Taux d'inflation (%)", "Taux directeur", "Masse monétaire (M2)", "Croissance PIB (%)", "Balance commerciale", "Taux de change FCFA/USD" ] data[numeric_cols] = scaler.fit_transform(data[numeric_cols]) return data except Exception as e: raise ValueError(f"Erreur de prétraitement: {str(e)}") def prepare_timeseries_data(data, country, start_date, end_date, look_back=12): """Prépare les séries temporelles avec vos noms de colonnes""" try: country_data = data[data['Pays'] == country] filtered_data = country_data[ (country_data['Année'] >= str(start_date)) & (country_data['Année'] <= str(end_date)) ].sort_values('Année') # Préparation des séquences X, y = [], [] for i in range(look_back, len(filtered_data)): X.append(filtered_data.iloc[i-look_back:i][[ "Taux d'inflation (%)", "Masse monétaire (M2)", "Croissance PIB (%)", "Taux directeur", "Balance commerciale", "Taux de change FCFA/USD" ]].values) y.append(filtered_data.iloc[i]["Taux d'inflation (%)"]) X = np.array(X) y = np.array(y) # Séparation train/test X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, shuffle=False ) return X_train, X_test, y_train, y_test, filtered_data except Exception as e: raise ValueError(f"Erreur de préparation des données: {str(e)}") def apply_scenarios(data, taux_directeur_change, pib_change, m2_change): """Applique les scénarios avec vos noms de colonnes exacts""" try: modified_data = data.copy() # Application des modifications modified_data["Taux directeur"] = modified_data["Taux directeur"] * (1 + taux_directeur_change/100) modified_data["Croissance PIB (%)"] = modified_data["Croissance PIB (%)"] * (1 + pib_change/100) modified_data["Masse monétaire (M2)"] = modified_data["Masse monétaire (M2)"] * (1 + m2_change/100) return modified_data except Exception as e: raise ValueError(f"Erreur d'application des scénarios: {str(e)}")