Spaces:
Sleeping
Sleeping
Update src/module/Data_Exploration.py
Browse files- src/module/Data_Exploration.py +48 -11
src/module/Data_Exploration.py
CHANGED
|
@@ -203,10 +203,17 @@ class AdvancedAnalyzer:
|
|
| 203 |
return
|
| 204 |
|
| 205 |
try:
|
| 206 |
-
#
|
| 207 |
df_ts = df_adm.copy()
|
| 208 |
|
| 209 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 210 |
df_ts = df_ts.set_index('date').sort_index()
|
| 211 |
series = df_ts['nb_admissions'].resample('D').sum().asfreq('D').fillna(0)
|
| 212 |
|
|
@@ -233,9 +240,18 @@ class AdvancedAnalyzer:
|
|
| 233 |
if df_adm is None: return
|
| 234 |
|
| 235 |
try:
|
| 236 |
-
#
|
| 237 |
df_ts = df_adm.copy()
|
| 238 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 239 |
series = df_ts['nb_admissions'].resample('D').sum().asfreq('D').fillna(0)
|
| 240 |
|
| 241 |
lag_count = min(60, max(20, int(len(series) / 2)))
|
|
@@ -261,21 +277,42 @@ class AdvancedAnalyzer:
|
|
| 261 |
return
|
| 262 |
|
| 263 |
try:
|
|
|
|
| 264 |
tmp = df_adm.copy()
|
| 265 |
-
# FIX : Conversion explicite avant d'utiliser l'accesseur .dt
|
| 266 |
tmp['date'] = pd.to_datetime(tmp['date'], errors='coerce')
|
| 267 |
-
tmp =
|
|
|
|
|
|
|
|
|
|
| 268 |
|
|
|
|
|
|
|
|
|
|
| 269 |
tmp['day_name'] = tmp['date'].dt.day_name()
|
| 270 |
tmp['month'] = tmp['date'].dt.month_name()
|
| 271 |
|
| 272 |
-
#
|
| 273 |
-
|
| 274 |
-
|
| 275 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 276 |
|
| 277 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 278 |
st.plotly_chart(fig, use_container_width=True)
|
|
|
|
| 279 |
except Exception as e:
|
| 280 |
st.error(f'Erreur Heatmap : {e}')
|
| 281 |
|
|
|
|
| 203 |
return
|
| 204 |
|
| 205 |
try:
|
| 206 |
+
# --- Dans tab_time_series_advanced ET tab_stationarity ---
|
| 207 |
df_ts = df_adm.copy()
|
| 208 |
|
| 209 |
+
# 1. FORCE LA CONVERSION (Crucial pour l'erreur DatetimeIndex)
|
| 210 |
+
df_ts['date'] = pd.to_datetime(df_ts['date'], errors='coerce')
|
| 211 |
+
df_ts['nb_admissions'] = pd.to_numeric(df_ts['nb_admissions'], errors='coerce')
|
| 212 |
+
|
| 213 |
+
# 2. NETTOYE LES NAS CRÉÉS PAR LA CONVERSION
|
| 214 |
+
df_ts = df_ts.dropna(subset=['date', 'nb_admissions'])
|
| 215 |
+
|
| 216 |
+
# 3. SET L'INDEX
|
| 217 |
df_ts = df_ts.set_index('date').sort_index()
|
| 218 |
series = df_ts['nb_admissions'].resample('D').sum().asfreq('D').fillna(0)
|
| 219 |
|
|
|
|
| 240 |
if df_adm is None: return
|
| 241 |
|
| 242 |
try:
|
| 243 |
+
# --- Dans tab_time_series_advanced ET tab_stationarity ---
|
| 244 |
df_ts = df_adm.copy()
|
| 245 |
+
|
| 246 |
+
# 1. FORCE LA CONVERSION (Crucial pour l'erreur DatetimeIndex)
|
| 247 |
+
df_ts['date'] = pd.to_datetime(df_ts['date'], errors='coerce')
|
| 248 |
+
df_ts['nb_admissions'] = pd.to_numeric(df_ts['nb_admissions'], errors='coerce')
|
| 249 |
+
|
| 250 |
+
# 2. NETTOYE LES NAS CRÉÉS PAR LA CONVERSION
|
| 251 |
+
df_ts = df_ts.dropna(subset=['date', 'nb_admissions'])
|
| 252 |
+
|
| 253 |
+
# 3. SET L'INDEX
|
| 254 |
+
df_ts = df_ts.set_index('date').sort_index()
|
| 255 |
series = df_ts['nb_admissions'].resample('D').sum().asfreq('D').fillna(0)
|
| 256 |
|
| 257 |
lag_count = min(60, max(20, int(len(series) / 2)))
|
|
|
|
| 277 |
return
|
| 278 |
|
| 279 |
try:
|
| 280 |
+
# 1. Copie et Conversion forcée (Le "Triple Cast")
|
| 281 |
tmp = df_adm.copy()
|
|
|
|
| 282 |
tmp['date'] = pd.to_datetime(tmp['date'], errors='coerce')
|
| 283 |
+
tmp['nb_admissions'] = pd.to_numeric(tmp['nb_admissions'], errors='coerce')
|
| 284 |
+
|
| 285 |
+
# 2. Nettoyage des données invalides
|
| 286 |
+
tmp = tmp.dropna(subset=['date', 'nb_admissions'])
|
| 287 |
|
| 288 |
+
# 3. Extraction des composants temporels
|
| 289 |
+
# On récupère le numéro du jour (0=Lundi) pour un tri automatique fiable
|
| 290 |
+
tmp['day_num'] = tmp['date'].dt.weekday
|
| 291 |
tmp['day_name'] = tmp['date'].dt.day_name()
|
| 292 |
tmp['month'] = tmp['date'].dt.month_name()
|
| 293 |
|
| 294 |
+
# 4. Pivotage
|
| 295 |
+
# On indexe par le duo (numéro, nom) pour garder l'ordre chronologique
|
| 296 |
+
heat = tmp.pivot_table(
|
| 297 |
+
index=['day_num', 'day_name'],
|
| 298 |
+
columns='month',
|
| 299 |
+
values='nb_admissions',
|
| 300 |
+
aggfunc='mean'
|
| 301 |
+
)
|
| 302 |
|
| 303 |
+
# 5. Tri et nettoyage de l'index pour l'affichage
|
| 304 |
+
heat = heat.sort_index(level=0)
|
| 305 |
+
heat.index = heat.index.get_level_values(1)
|
| 306 |
+
|
| 307 |
+
# 6. Affichage Plotly
|
| 308 |
+
fig = px.imshow(
|
| 309 |
+
heat,
|
| 310 |
+
title='Intensité Moyenne des Admissions (Jour vs Mois)',
|
| 311 |
+
color_continuous_scale='Viridis',
|
| 312 |
+
aspect="auto"
|
| 313 |
+
)
|
| 314 |
st.plotly_chart(fig, use_container_width=True)
|
| 315 |
+
|
| 316 |
except Exception as e:
|
| 317 |
st.error(f'Erreur Heatmap : {e}')
|
| 318 |
|