Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -109,29 +109,35 @@ def load_last_7_days_stats():
|
|
| 109 |
return pd.DataFrame()
|
| 110 |
|
| 111 |
def load_dashboard_summary():
|
| 112 |
-
"""Charge
|
| 113 |
engine = get_db_connection()
|
| 114 |
query = text("""
|
| 115 |
SELECT
|
| 116 |
COUNT(*) as total_transactions,
|
| 117 |
-
SUM(CASE WHEN pred_is_fraud = 1 THEN 1 ELSE 0 END) as total_frauds,
|
| 118 |
-
SUM(CASE WHEN pred_is_fraud = 0 THEN 1 ELSE 0 END) as total_no_frauds,
|
| 119 |
-
SUM(CASE WHEN pred_is_fraud = 1 THEN amt ELSE 0 END) as total_fraud_amount
|
| 120 |
-
FROM fraud_predictions
|
| 121 |
""")
|
| 122 |
-
|
| 123 |
try:
|
| 124 |
with engine.connect() as conn:
|
| 125 |
-
result = conn.execute(query).
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
return {
|
| 127 |
-
'total_frauds': result
|
| 128 |
-
'total_no_frauds': result
|
| 129 |
-
'total_fraud_amount': result
|
| 130 |
}
|
|
|
|
| 131 |
except Exception as e:
|
| 132 |
st.error(f"❌ Erreur lors du chargement du résumé: {e}")
|
| 133 |
return {'total_frauds': 0, 'total_no_frauds': 0, 'total_fraud_amount': 0}
|
| 134 |
|
|
|
|
| 135 |
# ========================== PAGE: DASHBOARD ==========================
|
| 136 |
def page_dashboard():
|
| 137 |
st.title("🕵🏻 Fraud Detection Dashboard")
|
|
|
|
| 109 |
return pd.DataFrame()
|
| 110 |
|
| 111 |
def load_dashboard_summary():
|
| 112 |
+
"""Charge les métriques pour le dashboard (robuste à toutes versions SQLAlchemy)"""
|
| 113 |
engine = get_db_connection()
|
| 114 |
query = text("""
|
| 115 |
SELECT
|
| 116 |
COUNT(*) as total_transactions,
|
| 117 |
+
COALESCE(SUM(CASE WHEN pred_is_fraud = 1 THEN 1 ELSE 0 END), 0) as total_frauds,
|
| 118 |
+
COALESCE(SUM(CASE WHEN pred_is_fraud = 0 THEN 1 ELSE 0 END), 0) as total_no_frauds,
|
| 119 |
+
COALESCE(SUM(CASE WHEN pred_is_fraud = 1 THEN amt ELSE 0 END), 0) as total_fraud_amount
|
| 120 |
+
FROM fraud_predictions;
|
| 121 |
""")
|
| 122 |
+
|
| 123 |
try:
|
| 124 |
with engine.connect() as conn:
|
| 125 |
+
result = conn.execute(query).mappings().first() # ✅ renvoie un dict directement
|
| 126 |
+
|
| 127 |
+
if not result:
|
| 128 |
+
return {'total_frauds': 0, 'total_no_frauds': 0, 'total_fraud_amount': 0}
|
| 129 |
+
|
| 130 |
return {
|
| 131 |
+
'total_frauds': result.get('total_frauds', 0),
|
| 132 |
+
'total_no_frauds': result.get('total_no_frauds', 0),
|
| 133 |
+
'total_fraud_amount': result.get('total_fraud_amount', 0)
|
| 134 |
}
|
| 135 |
+
|
| 136 |
except Exception as e:
|
| 137 |
st.error(f"❌ Erreur lors du chargement du résumé: {e}")
|
| 138 |
return {'total_frauds': 0, 'total_no_frauds': 0, 'total_fraud_amount': 0}
|
| 139 |
|
| 140 |
+
|
| 141 |
# ========================== PAGE: DASHBOARD ==========================
|
| 142 |
def page_dashboard():
|
| 143 |
st.title("🕵🏻 Fraud Detection Dashboard")
|