KJ commited on
Commit
06be36e
·
1 Parent(s): 8f43b7e

updating dropdown

Browse files
Files changed (1) hide show
  1. app.py +18 -9
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
- domain_counts = df["domain"].value_counts()
 
 
 
60
 
61
- entities = st.multiselect(T[LANG]["select_entities"], entity_counts.index.tolist())
 
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
- # Apply filters
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])