Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- 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 |
-
|
| 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 |
-
#
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
| 222 |
-
movie_df[
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
|
| 226 |
-
|
| 227 |
-
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 333 |
st.caption("No entries.")
|
| 334 |
return
|
| 335 |
-
|
|
|
|
| 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)
|
| 344 |
-
show_table(recent, "🕓 Recently Rated")
|
| 345 |
|
| 346 |
# Top Rated
|
| 347 |
-
top = merged[merged["rating"] >= 4].sort_values("rating", ascending=False)
|
| 348 |
-
show_table(top, "🌟 Top Rated")
|
| 349 |
|
| 350 |
# Worst Rated
|
| 351 |
-
worst = merged[merged["rating"] <= 2].sort_values("rating")
|
| 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 |
|