mayss14 commited on
Commit
6e4e24e
·
verified ·
1 Parent(s): b05cd48

Create preprocess.py

Browse files
Files changed (1) hide show
  1. utils/preprocess.py +75 -0
utils/preprocess.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pandas as pd
3
+ import numpy as np
4
+
5
+ def standardize(data):
6
+ mean = np.mean(data, axis=0)
7
+ std = np.std(data, axis=0)
8
+ std[std == 0] = 1 # éviter division par 0
9
+ return (data - mean) / std
10
+
11
+ def min_max_normalize(data):
12
+ """Normalisation Min-Max [0, 1] avec NumPy"""
13
+ min_vals = np.min(data, axis=0)
14
+ max_vals = np.max(data, axis=0)
15
+ range_vals = max_vals - min_vals
16
+ range_vals[range_vals == 0] = 1.0 # Éviter la division par zéro
17
+ return (data - min_vals) / range_vals
18
+
19
+
20
+
21
+ def load_and_preprocess_dataset(base_path='data/Dataset/room1/', normalization_type='standard'):
22
+ data_path = os.path.join(base_path, 'data.csv')
23
+ label_path = os.path.join(base_path, 'label.csv')
24
+
25
+ if not os.path.exists(data_path) or not os.path.exists(label_path):
26
+ print(f"[ERREUR] Fichiers manquants : {data_path} ou {label_path}")
27
+ return pd.DataFrame()
28
+
29
+ # Charger les fichiers
30
+ # Ici, on spécifie que les valeurs dans la colonne sont séparées par des virgules
31
+ data = pd.read_csv(data_path, header=None, delimiter=',')
32
+ label = pd.read_csv(label_path, header=None)
33
+
34
+ print(f"data.csv chargé avec {data.shape[0]} lignes et {data.shape[1]} colonnes.")
35
+ print(f"label.csv chargé avec {label.shape[0]} lignes et {label.shape[1]} colonnes.")
36
+
37
+ # Remplacer les valeurs manquantes dans data par la moyenne de chaque colonne
38
+ data.fillna(data.mean(), inplace=True)
39
+
40
+ # Remplir les valeurs manquantes dans label par la méthode de forward fill
41
+ label.fillna(method='ffill', inplace=True)
42
+
43
+ # Égaliser le nombre de lignes entre data et label
44
+ min_len = min(len(data), len(label))
45
+ data = data.iloc[:min_len]
46
+ label = label.iloc[:min_len]
47
+
48
+ # Normalisation
49
+ if normalization_type == 'standard':
50
+ data_scaled = standardize(data.values)
51
+ elif normalization_type == 'minmax':
52
+ data_scaled = min_max_normalize(data.values)
53
+ else:
54
+ raise ValueError("normalization_type must be 'standard' or 'minmax'")
55
+
56
+ # Fusion des données et des labels
57
+ all_samples = []
58
+ for i in range(min_len):
59
+ sample = data_scaled[i]
60
+ activity = label.iloc[i, 1] if label.shape[1] > 1 else label.iloc[i, 0]
61
+ all_samples.append(np.append(sample, activity))
62
+
63
+ # Construction du DataFrame final
64
+ final_df = pd.DataFrame(all_samples)
65
+
66
+ # Vérification du contenu
67
+ if final_df.empty:
68
+ print("[ERREUR] Le DataFrame final est vide. Aucune donnée n'a été chargée.")
69
+ return pd.DataFrame()
70
+
71
+ # Attribuer les noms de colonnes
72
+ final_df.columns = [f'feature_{i}' for i in range(final_df.shape[1] - 1)] + ['label']
73
+
74
+ print(f"[INFO] Données finales : {final_df.shape[0]} lignes, {final_df.shape[1]} colonnes.")
75
+ return final_df