lenawilli commited on
Commit
346ce48
verified
1 Parent(s): 7b3606c

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +28 -26
src/streamlit_app.py CHANGED
@@ -208,7 +208,7 @@ 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, default=all_genres)
212
 
213
  min_year = int(movie_df["year"].min())
214
  max_year = int(movie_df["year"].max())
@@ -216,8 +216,14 @@ elif page:
216
 
217
  # Gefilterter Pool
218
  filtered_df = movie_df[
 
 
 
219
  movie_df["year"].between(selected_years[0], selected_years[1]) &
220
- movie_df["genres"].apply(lambda x: any(g in x.split("|") for g in selected_genres))
 
 
 
221
  ].copy()
222
 
223
  # Neuen Pool bei Filter盲nderung neu setzen
@@ -310,7 +316,6 @@ elif search_query:
310
  st.markdown(f"[Details](/?movie_id={movie['movieId']})", unsafe_allow_html=True)
311
  else:
312
  st.title("Welcome to Movie Recommender")
313
- st.write("Use the navigation above to explore.")
314
 
315
  if not all_ratings_data:
316
  st.info("No ratings available yet. Start rating some movies!")
@@ -319,33 +324,30 @@ else:
319
  ratings_df["timestamp"] = pd.to_datetime(ratings_df["timestamp"])
320
  merged = pd.merge(ratings_df, movie_df, left_on="movie_id", right_on="movieId")
321
 
322
- def show_movie_row(movie_row):
323
- poster_url, _ = get_tmdb_data(movie_row["clean_title"], movie_row["year"])
324
- cols = st.columns([1, 4])
325
- with cols[0]:
326
- if poster_url and "placeholder.com" not in poster_url:
327
- st.image(poster_url, width=100)
328
- else:
329
- st.markdown("""
330
- <div style='width:100px;height:150px;border:2px dashed gray;display:flex;align-items:center;justify-content:center;color:gray;font-size:12px;'>No picture<br>available</div>
331
- """, unsafe_allow_html=True)
332
- with cols[1]:
333
- st.markdown(f"**[{movie_row['clean_title']}](/?movie_id={movie_row['movieId']})**")
334
- st.markdown(f"{render_star_rating(movie_row['rating'])}", unsafe_allow_html=True)
335
- st.caption(f"{movie_row['genres']} 路 {movie_row['year']} 路 {movie_row['timestamp'].strftime('%Y-%m-%d')}")
336
 
337
- st.subheader("馃晸 Recently Rated")
338
  recent = merged.sort_values("timestamp", ascending=False).head(5)
339
- for _, row in recent.iterrows():
340
- show_movie_row(row)
341
 
342
- st.subheader("馃専 Top Rated")
343
  top = merged[merged["rating"] >= 4].sort_values("rating", ascending=False).head(5)
344
- for _, row in top.iterrows():
345
- show_movie_row(row)
346
 
347
- st.subheader("馃槥 Worst Rated")
348
  worst = merged[merged["rating"] <= 2].sort_values("rating").head(5)
349
- for _, row in worst.iterrows():
350
- show_movie_row(row)
351
 
 
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())
 
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
 
316
  st.markdown(f"[Details](/?movie_id={movie['movieId']})", unsafe_allow_html=True)
317
  else:
318
  st.title("Welcome to Movie Recommender")
 
319
 
320
  if not all_ratings_data:
321
  st.info("No ratings available yet. Start rating some movies!")
 
324
  ratings_df["timestamp"] = pd.to_datetime(ratings_df["timestamp"])
325
  merged = pd.merge(ratings_df, movie_df, left_on="movie_id", right_on="movieId")
326
 
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")
339
+ df_display = df_display[["Title", "Rated", "genres", "year", "Date"]]
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