Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
|
@@ -42,7 +42,9 @@ def generate_summary(df):
|
|
| 42 |
yesterday = now - timedelta(days=1)
|
| 43 |
last_14 = now - timedelta(days=14)
|
| 44 |
|
| 45 |
-
|
|
|
|
|
|
|
| 46 |
df_day = df[df["timestamp"] >= yesterday.replace(hour=0, minute=0, second=0)]
|
| 47 |
df_14 = df[df["timestamp"] >= last_14]
|
| 48 |
|
|
@@ -50,9 +52,55 @@ def generate_summary(df):
|
|
| 50 |
summary.append(f"📅 Datum: {now.strftime('%Y-%m-%d')}")
|
| 51 |
summary.append(f"🗨️ Antal meddelanden senaste 24h: {len(df_day)}")
|
| 52 |
summary.append(f"👥 Unika sessioner senaste 24h: {df_day['session_id'].nunique()}")
|
| 53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
summary.append(f"📊 Antal meddelanden (14 dagar): {len(df_14)}")
|
| 55 |
summary.append(f"📈 Unika användare (14 dagar): {df_14['user_id'].nunique()}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
return "\n".join(summary)
|
| 57 |
|
| 58 |
# --- Huvudfunktion ---
|
|
|
|
| 42 |
yesterday = now - timedelta(days=1)
|
| 43 |
last_14 = now - timedelta(days=14)
|
| 44 |
|
| 45 |
+
# Konvertera timestamp till datetime
|
| 46 |
+
df["timestamp"] = pd.to_datetime(df["timestamp"], errors="coerce")
|
| 47 |
+
# Filtrera loggar för senaste 24h och 14 dagar
|
| 48 |
df_day = df[df["timestamp"] >= yesterday.replace(hour=0, minute=0, second=0)]
|
| 49 |
df_14 = df[df["timestamp"] >= last_14]
|
| 50 |
|
|
|
|
| 52 |
summary.append(f"📅 Datum: {now.strftime('%Y-%m-%d')}")
|
| 53 |
summary.append(f"🗨️ Antal meddelanden senaste 24h: {len(df_day)}")
|
| 54 |
summary.append(f"👥 Unika sessioner senaste 24h: {df_day['session_id'].nunique()}")
|
| 55 |
+
|
| 56 |
+
# Beräkna snitt antal meddelanden per session (om minst en session finns)
|
| 57 |
+
unique_sessions = df_day['session_id'].nunique()
|
| 58 |
+
avg_messages_per_session = round(len(df_day) / unique_sessions, 2) if unique_sessions > 0 else 0
|
| 59 |
+
summary.append(f"📊 Meddelanden per session (snitt): {avg_messages_per_session}")
|
| 60 |
+
|
| 61 |
+
# Snittsvarstid (om kolumnen finns och har giltiga värden)
|
| 62 |
+
if "response_time" in df_day.columns and not df_day["response_time"].empty:
|
| 63 |
+
avg_response_time = round(df_day["response_time"].mean(), 2)
|
| 64 |
+
summary.append(f"🕒 Snittsvarstid senaste 24h: {avg_response_time} sekunder")
|
| 65 |
+
else:
|
| 66 |
+
summary.append("🕒 Snittsvarstid senaste 24h: N/A")
|
| 67 |
+
|
| 68 |
summary.append(f"📊 Antal meddelanden (14 dagar): {len(df_14)}")
|
| 69 |
summary.append(f"📈 Unika användare (14 dagar): {df_14['user_id'].nunique()}")
|
| 70 |
+
|
| 71 |
+
# Likes och dislikes under senaste 24h
|
| 72 |
+
if "feedback" in df_day.columns:
|
| 73 |
+
df_day_feedback = df_day.dropna(subset=["feedback"])
|
| 74 |
+
likes = df_day_feedback[df_day_feedback["feedback"] == "up"].shape[0]
|
| 75 |
+
dislikes = df_day_feedback[df_day_feedback["feedback"] == "down"].shape[0]
|
| 76 |
+
else:
|
| 77 |
+
likes, dislikes = 0, 0
|
| 78 |
+
summary.append(f"👍 Likes senaste 24h: {likes}")
|
| 79 |
+
summary.append(f"👎 Dislikes senaste 24h: {dislikes}")
|
| 80 |
+
|
| 81 |
+
# Nyckeltal kring webbläsare: visa de tre mest använda
|
| 82 |
+
if "browser" in df_day.columns:
|
| 83 |
+
browser_counts = df_day["browser"].value_counts()
|
| 84 |
+
top_browsers = browser_counts.head(3)
|
| 85 |
+
browser_summary = "🌐 Browser-fördelning senaste 24h: " + ", ".join([f"{browser}: {count}" for browser, count in top_browsers.items()])
|
| 86 |
+
else:
|
| 87 |
+
browser_summary = "🌐 Browser-fördelning senaste 24h: Ingen data"
|
| 88 |
+
summary.append(browser_summary)
|
| 89 |
+
|
| 90 |
+
# Tre exempel på frågor och svar med tumme ner
|
| 91 |
+
if "feedback" in df_day.columns:
|
| 92 |
+
df_down = df_day[df_day["feedback"] == "down"].dropna(subset=["user_message", "bot_reply"])
|
| 93 |
+
else:
|
| 94 |
+
df_down = pd.DataFrame()
|
| 95 |
+
if not df_down.empty:
|
| 96 |
+
examples = df_down.head(3)
|
| 97 |
+
examples_text = "❌ Exempel på frågor och svar med tumme ner:\n"
|
| 98 |
+
for idx, row in examples.iterrows():
|
| 99 |
+
examples_text += f"• Fråga: {row['user_message']}\n Svar: {row['bot_reply']}\n"
|
| 100 |
+
else:
|
| 101 |
+
examples_text = "❌ Inga exempel med tumme ner hittades senaste 24h."
|
| 102 |
+
summary.append(examples_text)
|
| 103 |
+
|
| 104 |
return "\n".join(summary)
|
| 105 |
|
| 106 |
# --- Huvudfunktion ---
|