jaimalklyde commited on
Commit
eedf685
·
verified ·
1 Parent(s): 947ee6f

Update src/module/Data_Exploration.py

Browse files
Files changed (1) hide show
  1. 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
- # PRÉPARATION FORCÉE (Fix pour l'erreur DatetimeIndex)
207
  df_ts = df_adm.copy()
208
 
209
- # Définition de l'index temporel avec fréquence explicite
 
 
 
 
 
 
 
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
- # Même logique de nettoyage pour l'ACF
237
  df_ts = df_adm.copy()
238
- df_ts = df_ts.dropna(subset=['date']).set_index('date').sort_index()
 
 
 
 
 
 
 
 
 
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 = tmp.dropna(subset=['date'])
 
 
 
268
 
 
 
 
269
  tmp['day_name'] = tmp['date'].dt.day_name()
270
  tmp['month'] = tmp['date'].dt.month_name()
271
 
272
- # Pivotage et réindexation pour l'ordre chronologique
273
- heat = tmp.pivot_table(index='day_name', columns='month', values='nb_admissions', aggfunc='mean')
274
- days = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
275
- heat = heat.reindex(days)
 
 
 
 
276
 
277
- fig = px.imshow(heat, title='Intensité Hebdo vs Mensuelle', color_continuous_scale='Viridis')
 
 
 
 
 
 
 
 
 
 
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