lenawilli commited on
Commit
6bbf6e1
verified
1 Parent(s): 322d156

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +52 -0
src/streamlit_app.py CHANGED
@@ -1,3 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import pandas as pd
3
  import random
@@ -487,4 +505,38 @@ else:
487
  worst = merged[merged["rating"] <= 2].sort_values(["rating", "timestamp"], ascending=[True, False])
488
  show_table(worst, "馃槥 Worst Rated", checkbox_key="worst_rated")
489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
490
 
 
1
+ from recommendation_utils import (
2
+ load_nn_model, load_svd_model, load_trainset,
3
+ recommend_with_nn, recommend_with_svd
4
+ )
5
+
6
+ import pickle
7
+ from keras.models import load_model
8
+
9
+ # Nur einmal laden
10
+ @st.cache_resource
11
+ def load_models():
12
+ nn_model = load_nn_model("recommender_model.keras")
13
+ svd_model = load_svd_model("svd_model.pkl")
14
+ trainset = load_trainset("trainset.pkl")
15
+ return nn_model, svd_model, trainset
16
+
17
+ nn_model, svd_model, trainset = load_models()
18
+
19
  import streamlit as st
20
  import pandas as pd
21
  import random
 
505
  worst = merged[merged["rating"] <= 2].sort_values(["rating", "timestamp"], ascending=[True, False])
506
  show_table(worst, "馃槥 Worst Rated", checkbox_key="worst_rated")
507
 
508
+ st.subheader("馃幆 Recommended For You")
509
+
510
+ user_ratings_dict = {r["movie_id"]: r["rating"] for r in all_ratings_data}
511
+
512
+ if user_ratings_dict:
513
+ if st.session_state["model_selection"] == "Neural Network":
514
+ available_movies = movie_df["movieId"].tolist()
515
+ recommendations = recommend_with_nn(user_ratings_dict, nn_model, available_movies, top_n=10)
516
+ else:
517
+ ratings_full = pd.DataFrame(all_ratings_data)
518
+ ratings_full["userId"] = 999999 # Dummy user
519
+ ratings_full["rating"] = ratings_full["rating"].astype(float)
520
+ recommendations = recommend_with_svd(svd_model, trainset, ratings_full, user_ratings_dict, top_n=10)
521
+
522
+ recommended_df = pd.merge(recommendations, movie_df, on="movieId", how="left")
523
+
524
+ for _, movie in recommended_df.iterrows():
525
+ poster_url, _ = get_tmdb_data(movie["clean_title"], movie["year"])
526
+ st.markdown(f"""
527
+ <div style="margin-bottom:1em;padding:1em;border:1px solid #333;border-radius:10px;background:#1a1a1a;">
528
+ <div style="display:flex;gap:20px;">
529
+ <div>
530
+ <img src="{poster_url}" width="100" style="border-radius:5px;" />
531
+ </div>
532
+ <div>
533
+ <a href='/?movie_id={movie["movieId"]}' style="font-size:18px;color:#e63946;font-weight:bold;">{movie['clean_title']}</a><br>
534
+ <span style="color:#ccc;">{movie['genres']} 路 {movie['year']}</span><br>
535
+ <span style="color:#d4af37;">Predicted Rating: {round(movie['rating'], 2)}</span>
536
+ </div>
537
+ </div>
538
+ </div>
539
+ """, unsafe_allow_html=True)
540
+ else:
541
+ st.info("Rate a few movies to get recommendations.")
542