lenawilli commited on
Commit
cb690e9
·
verified ·
1 Parent(s): 346ce48

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +30 -23
src/streamlit_app.py CHANGED
@@ -206,25 +206,26 @@ if movie_id:
206
 
207
  elif page:
208
  st.title("🍿 Rate Random Movies")
209
- # Genre- und Jahrfilter
210
  all_genres = sorted(set(genre.strip() for sublist in movie_df["genres"].dropna().str.split("|") for genre in sublist))
211
  selected_genres = st.multiselect("Select genres:", options=all_genres, placeholder="All genres")
212
-
213
  min_year = int(movie_df["year"].min())
214
  max_year = int(movie_df["year"].max())
215
  selected_years = st.slider("Select release year range:", min_value=min_year, max_value=max_year, value=(min_year, max_year))
216
-
217
- # Gefilterter Pool
218
- filtered_df = movie_df[
219
- if filtered_df.empty:
220
- st.warning("No movies match the selected filters.")
221
- st.stop()
222
- movie_df["year"].between(selected_years[0], selected_years[1]) &
223
- (
224
- (movie_df["genres"].apply(lambda x: any(g in x.split("|") for g in selected_genres)))
225
- if selected_genres else True
226
- )
227
- ].copy()
 
228
 
229
  # Neuen Pool bei Filteränderung neu setzen
230
  if "last_filter_state" not in st.session_state or \
@@ -327,12 +328,18 @@ else:
327
  def make_clickable_title(row):
328
  return f"<a href='/?movie_id={row['movieId']}' target='_self'>{row['clean_title']}</a>"
329
 
330
- def show_table(dataframe, label):
 
331
  st.subheader(label)
332
- if dataframe.empty:
 
 
 
 
333
  st.caption("No entries.")
334
  return
335
- df_display = dataframe[["movieId", "clean_title", "rating", "genres", "year", "timestamp"]].copy()
 
336
  df_display["Title"] = df_display.apply(make_clickable_title, axis=1)
337
  df_display["Rated"] = df_display["rating"].apply(render_star_rating)
338
  df_display["Date"] = df_display["timestamp"].dt.strftime("%Y-%m-%d")
@@ -340,14 +347,14 @@ else:
340
  st.markdown(df_display.to_html(escape=False, index=False), unsafe_allow_html=True)
341
 
342
  # Recently Rated
343
- recent = merged.sort_values("timestamp", ascending=False).head(5)
344
- show_table(recent, "🕓 Recently Rated")
345
 
346
  # Top Rated
347
- top = merged[merged["rating"] >= 4].sort_values("rating", ascending=False).head(5)
348
- show_table(top, "🌟 Top Rated")
349
 
350
  # Worst Rated
351
- worst = merged[merged["rating"] <= 2].sort_values("rating").head(5)
352
- show_table(worst, "😞 Worst Rated")
353
 
 
206
 
207
  elif page:
208
  st.title("🍿 Rate Random Movies")
209
+ # Genre- und Jahrfilter
210
  all_genres = sorted(set(genre.strip() for sublist in movie_df["genres"].dropna().str.split("|") for genre in sublist))
211
  selected_genres = st.multiselect("Select genres:", options=all_genres, placeholder="All genres")
212
+
213
  min_year = int(movie_df["year"].min())
214
  max_year = int(movie_df["year"].max())
215
  selected_years = st.slider("Select release year range:", min_value=min_year, max_value=max_year, value=(min_year, max_year))
216
+
217
+ # Anwenden der Filter
218
+ genre_filter = movie_df["genres"].apply(lambda g: any(genre in g.split("|") for genre in selected_genres)) if selected_genres else True
219
+ year_filter = movie_df["year"].between(selected_years[0], selected_years[1])
220
+
221
+ if isinstance(genre_filter, pd.Series):
222
+ filtered_df = movie_df[genre_filter & year_filter].copy()
223
+ else:
224
+ filtered_df = movie_df[year_filter].copy()
225
+
226
+ if filtered_df.empty:
227
+ st.warning("No movies match the selected filters.")
228
+ st.stop()
229
 
230
  # Neuen Pool bei Filteränderung neu setzen
231
  if "last_filter_state" not in st.session_state or \
 
328
  def make_clickable_title(row):
329
  return f"<a href='/?movie_id={row['movieId']}' target='_self'>{row['clean_title']}</a>"
330
 
331
+ def show_table(dataframe, label, checkbox_key):
332
+ show_all = st.checkbox(f"Show all in {label}", key=checkbox_key)
333
  st.subheader(label)
334
+ display_df = dataframe.copy()
335
+ if not show_all:
336
+ display_df = display_df.head(5)
337
+
338
+ if display_df.empty:
339
  st.caption("No entries.")
340
  return
341
+
342
+ df_display = display_df[["movieId", "clean_title", "rating", "genres", "year", "timestamp"]].copy()
343
  df_display["Title"] = df_display.apply(make_clickable_title, axis=1)
344
  df_display["Rated"] = df_display["rating"].apply(render_star_rating)
345
  df_display["Date"] = df_display["timestamp"].dt.strftime("%Y-%m-%d")
 
347
  st.markdown(df_display.to_html(escape=False, index=False), unsafe_allow_html=True)
348
 
349
  # Recently Rated
350
+ recent = merged.sort_values("timestamp", ascending=False)
351
+ show_table(recent, "🕓 Recently Rated", checkbox_key="recently_rated")
352
 
353
  # Top Rated
354
+ top = merged[merged["rating"] >= 4].sort_values(["rating", "timestamp"], ascending=[False, False])
355
+ show_table(top, "🌟 Top Rated", checkbox_key="top_rated")
356
 
357
  # Worst Rated
358
+ worst = merged[merged["rating"] <= 2].sort_values(["rating", "timestamp"], ascending=[True, False])
359
+ show_table(worst, "😞 Worst Rated", checkbox_key="worst_rated")
360