Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- 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,
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
| 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
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
|
| 328 |
-
|
| 329 |
-
|
| 330 |
-
|
| 331 |
-
|
| 332 |
-
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
|
| 336 |
|
| 337 |
-
|
| 338 |
recent = merged.sort_values("timestamp", ascending=False).head(5)
|
| 339 |
-
|
| 340 |
-
show_movie_row(row)
|
| 341 |
|
| 342 |
-
|
| 343 |
top = merged[merged["rating"] >= 4].sort_values("rating", ascending=False).head(5)
|
| 344 |
-
|
| 345 |
-
show_movie_row(row)
|
| 346 |
|
| 347 |
-
|
| 348 |
worst = merged[merged["rating"] <= 2].sort_values("rating").head(5)
|
| 349 |
-
|
| 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 |
|