MMOON commited on
Commit
0b14012
·
verified ·
1 Parent(s): 27253f5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -7
app.py CHANGED
@@ -10,7 +10,9 @@ from utils import (
10
  mois_numero_vers_nom,
11
  mois_nom_vers_numero,
12
  obtenir_derniers_rapports,
13
- est_rapport_deja_traite
 
 
14
  )
15
 
16
  # Configuration de la page
@@ -137,6 +139,35 @@ def main():
137
  st.error(f"Erreur lors du traitement: {str(e)}")
138
  else:
139
  st.error("Veuillez entrer une URL valide.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
 
141
  # Option pour télécharger la base de données
142
  st.subheader("Télécharger la base de données")
@@ -293,16 +324,49 @@ def main():
293
 
294
  if date_column is not None:
295
  try:
296
- # Essayer de convertir la colonne Date en datetime
297
- filtered_df["DateFormat"] = pd.to_datetime(filtered_df[date_column], format="%d/%m/%Y", errors="coerce")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
298
 
299
  if not filtered_df["DateFormat"].isna().all():
300
- monthly_counts = filtered_df.groupby(pd.Grouper(key="DateFormat", freq="M")).size().reset_index()
301
- monthly_counts.columns = ["Date", "Nombre de cas"]
 
 
 
 
 
 
 
 
302
 
303
  fig = px.line(monthly_counts, x="Date", y="Nombre de cas",
304
- title="Évolution mensuelle des cas de fraude",
305
- markers=True, line_shape="spline")
306
  fig.update_traces(line=dict(color="#4b6043", width=3), marker=dict(size=8))
307
  fig.update_layout(
308
  xaxis_title="Date",
@@ -314,6 +378,7 @@ def main():
314
  st.warning("Les dates ne sont pas dans un format valide pour la visualisation temporelle")
315
  except Exception as e:
316
  st.warning(f"Impossible de créer le graphique temporel: {str(e)}")
 
317
  else:
318
  st.warning("Colonne Date non disponible dans votre base de données")
319
 
 
10
  mois_numero_vers_nom,
11
  mois_nom_vers_numero,
12
  obtenir_derniers_rapports,
13
+ est_rapport_deja_traite,
14
+ telecharger_et_extraire_pdf,
15
+ parser_cas_fraude
16
  )
17
 
18
  # Configuration de la page
 
139
  st.error(f"Erreur lors du traitement: {str(e)}")
140
  else:
141
  st.error("Veuillez entrer une URL valide.")
142
+
143
+ # Section pour tester une URL spécifique
144
+ st.subheader("Tester une URL spécifique")
145
+ test_url = st.text_input("URL à tester (laissez vide pour utiliser l'URL par défaut)", "")
146
+ if st.button("Tester l'extraction"):
147
+ with st.spinner("Test en cours..."):
148
+ try:
149
+ if not test_url:
150
+ test_url = "https://knowledge4policy.ec.europa.eu/sites/default/files/202502_0.pdf" # URL par défaut
151
+ st.info(f"Utilisation de l'URL par défaut : {test_url}")
152
+
153
+ texte_pdf = telecharger_et_extraire_pdf(test_url)
154
+ st.success(f"PDF téléchargé avec succès. Longueur du texte : {len(texte_pdf)} caractères")
155
+
156
+ # Tester l'extraction des cas
157
+ with st.expander("Aperçu du texte extrait"):
158
+ st.text(texte_pdf[:1000] + "...")
159
+
160
+ # Tester le parsing des cas
161
+ mois_test = "February"
162
+ annee_test = 2025
163
+ df_test = parser_cas_fraude(texte_pdf, mois_test, annee_test)
164
+
165
+ st.success(f"{len(df_test)} cas de fraude extraits")
166
+
167
+ with st.expander("Aperçu des cas extraits"):
168
+ st.dataframe(df_test.head(10))
169
+ except Exception as e:
170
+ st.error(f"Erreur lors du test : {str(e)}")
171
 
172
  # Option pour télécharger la base de données
173
  st.subheader("Télécharger la base de données")
 
324
 
325
  if date_column is not None:
326
  try:
327
+ # Essayer différents formats de date
328
+ try:
329
+ # Format JJ/MM/AAAA
330
+ filtered_df["DateFormat"] = pd.to_datetime(filtered_df[date_column], format="%d/%m/%Y", errors="coerce")
331
+ except:
332
+ # Autre tentative si le premier format échoue
333
+ try:
334
+ filtered_df["DateFormat"] = pd.to_datetime(filtered_df[date_column], dayfirst=True, errors="coerce")
335
+ except:
336
+ # Dernière tentative
337
+ filtered_df["DateFormat"] = pd.to_datetime(filtered_df[date_column], errors="coerce")
338
+
339
+ # Si trop de dates sont NaT, essayer de créer des dates à partir des colonnes Mois et Année
340
+ if filtered_df["DateFormat"].isna().mean() > 0.5 and "Mois" in filtered_df.columns and "Année" in filtered_df.columns:
341
+ # Créer dates à partir de Mois et Année
342
+ def create_date(row):
343
+ try:
344
+ if isinstance(row["Mois"], str):
345
+ mois_num = mois_nom_vers_numero(row["Mois"])
346
+ else:
347
+ mois_num = str(row["Mois"]).zfill(2)
348
+
349
+ return pd.to_datetime(f"{row['Année']}-{mois_num}-01")
350
+ except:
351
+ return pd.NaT
352
+
353
+ filtered_df["DateFormat"] = filtered_df.apply(create_date, axis=1)
354
 
355
  if not filtered_df["DateFormat"].isna().all():
356
+ # Grouper par mois
357
+ filtered_df["YearMonth"] = filtered_df["DateFormat"].dt.to_period("M")
358
+ monthly_counts = filtered_df.groupby("YearMonth").size().reset_index()
359
+ monthly_counts.columns = ["YearMonth", "Nombre de cas"]
360
+
361
+ # Convertir YearMonth back to datetime for plotting
362
+ monthly_counts["Date"] = monthly_counts["YearMonth"].dt.to_timestamp()
363
+
364
+ # Trier par date
365
+ monthly_counts = monthly_counts.sort_values("Date")
366
 
367
  fig = px.line(monthly_counts, x="Date", y="Nombre de cas",
368
+ title="Évolution mensuelle des cas de fraude",
369
+ markers=True, line_shape="spline")
370
  fig.update_traces(line=dict(color="#4b6043", width=3), marker=dict(size=8))
371
  fig.update_layout(
372
  xaxis_title="Date",
 
378
  st.warning("Les dates ne sont pas dans un format valide pour la visualisation temporelle")
379
  except Exception as e:
380
  st.warning(f"Impossible de créer le graphique temporel: {str(e)}")
381
+ st.code(str(e)) # Afficher l'erreur détaillée pour le débogage
382
  else:
383
  st.warning("Colonne Date non disponible dans votre base de données")
384