KJ commited on
Commit ·
06be36e
1
Parent(s): 8f43b7e
updating dropdown
Browse files
app.py
CHANGED
|
@@ -16,7 +16,8 @@ T = {
|
|
| 16 |
"all_scores": "Show All Score Types",
|
| 17 |
"no_data": "No data matches the selected filters.",
|
| 18 |
"avg_over_time": "Average {} Over Time",
|
| 19 |
-
"scores_over_time": "Sentiment Scores Over Time"
|
|
|
|
| 20 |
},
|
| 21 |
"Български": {
|
| 22 |
"title": "📊 Табло за анализ на настроенията",
|
|
@@ -27,7 +28,8 @@ T = {
|
|
| 27 |
"all_scores": "Покажи всички типове оценки",
|
| 28 |
"no_data": "Няма данни за избраните филтри.",
|
| 29 |
"avg_over_time": "Средна стойност на {} във времето",
|
| 30 |
-
"scores_over_time": "Оценки на настроенията във времето"
|
|
|
|
| 31 |
}
|
| 32 |
}
|
| 33 |
|
|
@@ -55,22 +57,33 @@ def get_data():
|
|
| 55 |
st.title(T[LANG]["title"])
|
| 56 |
df = get_data()
|
| 57 |
|
|
|
|
| 58 |
entity_counts = df["entity"].value_counts()
|
| 59 |
-
|
|
|
|
|
|
|
|
|
|
| 60 |
|
| 61 |
-
|
|
|
|
| 62 |
domains = st.multiselect(T[LANG]["select_domains"], domain_counts.index.tolist())
|
| 63 |
score_type = st.selectbox(T[LANG]["score_type"], ["entity_score", "title_score", "overall_score"])
|
| 64 |
group_by_domain = st.checkbox(T[LANG]["group_by_domain"])
|
| 65 |
group_by_score_type = st.checkbox(T[LANG]["all_scores"])
|
| 66 |
|
| 67 |
-
#
|
| 68 |
filtered_df = df.copy()
|
| 69 |
if entities:
|
| 70 |
filtered_df = filtered_df[filtered_df["entity"].isin(entities)]
|
| 71 |
if domains:
|
| 72 |
filtered_df = filtered_df[filtered_df["domain"].isin(domains)]
|
| 73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
if not filtered_df.empty:
|
| 75 |
filtered_df["date"] = filtered_df["created_at"].dt.floor("D")
|
| 76 |
|
|
@@ -120,8 +133,6 @@ if not filtered_df.empty:
|
|
| 120 |
return label
|
| 121 |
|
| 122 |
grouped["label"] = grouped.apply(build_label, axis=1)
|
| 123 |
-
|
| 124 |
-
# ✅ Sort by avg score then by date
|
| 125 |
label_avg = grouped.groupby("label")["score"].mean().reset_index(name="avg_score")
|
| 126 |
grouped = grouped.merge(label_avg, on="label")
|
| 127 |
grouped = grouped.sort_values(by=["avg_score", "date"], ascending=[False, True])
|
|
@@ -170,8 +181,6 @@ if not filtered_df.empty:
|
|
| 170 |
return label
|
| 171 |
|
| 172 |
grouped["label"] = grouped.apply(build_label, axis=1)
|
| 173 |
-
|
| 174 |
-
# ✅ Sort by avg score then by date
|
| 175 |
label_avg = grouped.groupby("label")[score_type].mean().reset_index(name="avg_score")
|
| 176 |
grouped = grouped.merge(label_avg, on="label")
|
| 177 |
grouped = grouped.sort_values(by=["avg_score", "date"], ascending=[False, True])
|
|
|
|
| 16 |
"all_scores": "Show All Score Types",
|
| 17 |
"no_data": "No data matches the selected filters.",
|
| 18 |
"avg_over_time": "Average {} Over Time",
|
| 19 |
+
"scores_over_time": "Sentiment Scores Over Time",
|
| 20 |
+
"select_entities_prompt": "Please select at least one entity to view the graph."
|
| 21 |
},
|
| 22 |
"Български": {
|
| 23 |
"title": "📊 Табло за анализ на настроенията",
|
|
|
|
| 28 |
"all_scores": "Покажи всички типове оценки",
|
| 29 |
"no_data": "Няма данни за избраните филтри.",
|
| 30 |
"avg_over_time": "Средна стойност на {} във времето",
|
| 31 |
+
"scores_over_time": "Оценки на настроенията във времето",
|
| 32 |
+
"select_entities_prompt": "Моля, изберете поне един обект, за да видите графиката."
|
| 33 |
}
|
| 34 |
}
|
| 35 |
|
|
|
|
| 57 |
st.title(T[LANG]["title"])
|
| 58 |
df = get_data()
|
| 59 |
|
| 60 |
+
# --- Entity dropdown with counts ---
|
| 61 |
entity_counts = df["entity"].value_counts()
|
| 62 |
+
entity_labels = [f"{ent} ({count})" for ent, count in entity_counts.items()]
|
| 63 |
+
entity_lookup = {f"{ent} ({count})": ent for ent, count in entity_counts.items()}
|
| 64 |
+
selected_labels = st.multiselect(T[LANG]["select_entities"], entity_labels)
|
| 65 |
+
entities = [entity_lookup[label] for label in selected_labels]
|
| 66 |
|
| 67 |
+
# --- Domain dropdown ---
|
| 68 |
+
domain_counts = df["domain"].value_counts()
|
| 69 |
domains = st.multiselect(T[LANG]["select_domains"], domain_counts.index.tolist())
|
| 70 |
score_type = st.selectbox(T[LANG]["score_type"], ["entity_score", "title_score", "overall_score"])
|
| 71 |
group_by_domain = st.checkbox(T[LANG]["group_by_domain"])
|
| 72 |
group_by_score_type = st.checkbox(T[LANG]["all_scores"])
|
| 73 |
|
| 74 |
+
# --- Filters ---
|
| 75 |
filtered_df = df.copy()
|
| 76 |
if entities:
|
| 77 |
filtered_df = filtered_df[filtered_df["entity"].isin(entities)]
|
| 78 |
if domains:
|
| 79 |
filtered_df = filtered_df[filtered_df["domain"].isin(domains)]
|
| 80 |
|
| 81 |
+
# --- Stop early if no entity selected ---
|
| 82 |
+
if not entities:
|
| 83 |
+
st.info(T[LANG]["select_entities_prompt"])
|
| 84 |
+
st.stop()
|
| 85 |
+
|
| 86 |
+
# --- Continue only if data exists ---
|
| 87 |
if not filtered_df.empty:
|
| 88 |
filtered_df["date"] = filtered_df["created_at"].dt.floor("D")
|
| 89 |
|
|
|
|
| 133 |
return label
|
| 134 |
|
| 135 |
grouped["label"] = grouped.apply(build_label, axis=1)
|
|
|
|
|
|
|
| 136 |
label_avg = grouped.groupby("label")["score"].mean().reset_index(name="avg_score")
|
| 137 |
grouped = grouped.merge(label_avg, on="label")
|
| 138 |
grouped = grouped.sort_values(by=["avg_score", "date"], ascending=[False, True])
|
|
|
|
| 181 |
return label
|
| 182 |
|
| 183 |
grouped["label"] = grouped.apply(build_label, axis=1)
|
|
|
|
|
|
|
| 184 |
label_avg = grouped.groupby("label")[score_type].mean().reset_index(name="avg_score")
|
| 185 |
grouped = grouped.merge(label_avg, on="label")
|
| 186 |
grouped = grouped.sort_values(by=["avg_score", "date"], ascending=[False, True])
|