Spaces:
Sleeping
Sleeping
| """Module de prétraitement des données pour les modèles de machine learning. | |
| Ce module contient des fonctions pour identifier les types de features (numériques et catégorielles) | |
| et pour construire des préprocesseurs adaptés aux différents types de modèles (linéaires, basés sur les arbres, boosting).""" | |
| import pandas as pd | |
| from sklearn.compose import ColumnTransformer | |
| from sklearn.preprocessing import OneHotEncoder, StandardScaler | |
| def get_feature_types(X: pd.DataFrame): | |
| """ | |
| Identifie les colonnes numériques et catégorielles. | |
| args: | |
| X : pd.DataFrame | |
| returns: | |
| numeric_features : list | |
| categorical_features : list | |
| """ | |
| numeric_features = X.select_dtypes(include=["int64", "float64"]).columns.tolist() | |
| categorical_features = X.select_dtypes(include=["object", "category"]).columns.tolist() | |
| return numeric_features, categorical_features | |
| def build_linear_preprocessor(X: pd.DataFrame): | |
| """ | |
| Preprocessing pour modèles linéaires. | |
| Numériques : | |
| StandardScaler | |
| Catégorielles : | |
| OneHotEncoder | |
| args: | |
| X : pd.DataFrame | |
| returns: | |
| preprocessor : ColumnTransformer | |
| """ | |
| numeric_features, categorical_features = get_feature_types(X) | |
| preprocessor = ColumnTransformer( | |
| transformers=[ | |
| ("num", StandardScaler(), numeric_features), | |
| ("cat", OneHotEncoder(handle_unknown="ignore", sparse_output=False), categorical_features), | |
| ], | |
| remainder="drop", | |
| ) | |
| return preprocessor | |
| def build_tree_preprocessor(X: pd.DataFrame): | |
| """ | |
| Preprocessing pour modèles basés sur les arbres. | |
| Numériques : | |
| Pas de transformation | |
| Catégorielles : | |
| OneHotEncoder | |
| args: | |
| X : pd.DataFrame | |
| returns: | |
| preprocessor : ColumnTransformer | |
| """ | |
| numeric_features, categorical_features = get_feature_types(X) | |
| preprocessor = ColumnTransformer( | |
| transformers=[ | |
| ("num", "passthrough", numeric_features), | |
| ("cat", OneHotEncoder(handle_unknown="ignore", sparse_output=False), categorical_features), | |
| ], | |
| remainder="drop", | |
| ) | |
| return preprocessor | |
| def build_preprocessor(X: pd.DataFrame, model_type: str): | |
| """ | |
| Construit un préprocesseur adapté au type de modèle. | |
| args: | |
| X : pd.DataFrame | |
| model_type : str, parmi 'linear', 'tree', 'boosting' | |
| returns: | |
| preprocessor : ColumnTransformer | |
| """ | |
| if model_type == "linear": | |
| return build_linear_preprocessor(X) | |
| elif model_type in ["tree", "boosting"]: | |
| return build_tree_preprocessor(X) | |
| else: | |
| raise ValueError( | |
| "model_type doit être parmi : 'linear', 'tree', 'boosting'" | |
| ) | |
| def get_categorical_features(X): | |
| return X.select_dtypes(include=["object", "category"]).columns.tolist() |