Spaces:
Sleeping
Sleeping
| import os | |
| import pandas as pd | |
| import numpy as np | |
| def standardize(data): | |
| mean = np.mean(data, axis=0) | |
| std = np.std(data, axis=0) | |
| std[std == 0] = 1 # éviter division par 0 | |
| return (data - mean) / std | |
| def min_max_normalize(data): | |
| """Normalisation Min-Max [0, 1] avec NumPy""" | |
| min_vals = np.min(data, axis=0) | |
| max_vals = np.max(data, axis=0) | |
| range_vals = max_vals - min_vals | |
| range_vals[range_vals == 0] = 1.0 # Éviter la division par zéro | |
| return (data - min_vals) / range_vals | |
| def load_and_preprocess_dataset(base_path='data/Dataset/room1/', normalization_type='standard'): | |
| data_path = os.path.join(base_path, 'data.csv') | |
| label_path = os.path.join(base_path, 'label.csv') | |
| if not os.path.exists(data_path) or not os.path.exists(label_path): | |
| print(f"[ERREUR] Fichiers manquants : {data_path} ou {label_path}") | |
| return pd.DataFrame() | |
| # Charger les fichiers | |
| # Ici, on spécifie que les valeurs dans la colonne sont séparées par des virgules | |
| data = pd.read_csv(data_path, header=None, delimiter=',') | |
| label = pd.read_csv(label_path, header=None) | |
| print(f"data.csv chargé avec {data.shape[0]} lignes et {data.shape[1]} colonnes.") | |
| print(f"label.csv chargé avec {label.shape[0]} lignes et {label.shape[1]} colonnes.") | |
| # Remplacer les valeurs manquantes dans data par la moyenne de chaque colonne | |
| data.fillna(data.mean(), inplace=True) | |
| # Remplir les valeurs manquantes dans label par la méthode de forward fill | |
| label.fillna(method='ffill', inplace=True) | |
| # Égaliser le nombre de lignes entre data et label | |
| min_len = min(len(data), len(label)) | |
| data = data.iloc[:min_len] | |
| label = label.iloc[:min_len] | |
| # Normalisation | |
| if normalization_type == 'standard': | |
| data_scaled = standardize(data.values) | |
| elif normalization_type == 'minmax': | |
| data_scaled = min_max_normalize(data.values) | |
| else: | |
| raise ValueError("normalization_type must be 'standard' or 'minmax'") | |
| # Fusion des données et des labels | |
| all_samples = [] | |
| for i in range(min_len): | |
| sample = data_scaled[i] | |
| activity = label.iloc[i, 1] if label.shape[1] > 1 else label.iloc[i, 0] | |
| all_samples.append(np.append(sample, activity)) | |
| # Construction du DataFrame final | |
| final_df = pd.DataFrame(all_samples) | |
| # Vérification du contenu | |
| if final_df.empty: | |
| print("[ERREUR] Le DataFrame final est vide. Aucune donnée n'a été chargée.") | |
| return pd.DataFrame() | |
| # Attribuer les noms de colonnes | |
| final_df.columns = [f'feature_{i}' for i in range(final_df.shape[1] - 1)] + ['label'] | |
| print(f"[INFO] Données finales : {final_df.shape[0]} lignes, {final_df.shape[1]} colonnes.") | |
| return final_df |