krishnaveni76 commited on
Commit
f7871c8
·
1 Parent(s): 7b636e6

Top animes recommender app completed

Browse files
Files changed (1) hide show
  1. app.py +17 -41
app.py CHANGED
@@ -21,11 +21,7 @@ if "anime_data" not in st.session_state or "anime_user_ratings" not in st.sessio
21
 
22
  # Load models only once
23
  if "models_loaded" not in st.session_state:
24
- st.session_state.models_loaded = {}
25
-
26
- # Define your repository name
27
- # models_repo = MODELS_FILEPATH
28
-
29
  # Load models
30
  st.session_state.models_loaded["cosine_similarity_model"] = hf_hub_download(MODELS_FILEPATH, MODEL_TRAINER_COSINESIMILARITY_MODEL_NAME)
31
  st.session_state.models_loaded["item_based_knn_model_path"] = hf_hub_download(MODELS_FILEPATH, MODEL_TRAINER_ITEM_KNN_TRAINED_MODEL_NAME)
@@ -48,32 +44,13 @@ if "models_loaded" not in st.session_state:
48
  anime_data = st.session_state.anime_data
49
  anime_user_ratings = st.session_state.anime_user_ratings
50
 
51
- # Display dataset info
52
- st.write("Anime Data:")
53
- st.dataframe(anime_data.head())
54
 
55
- st.write("Anime User Ratings Data:")
56
- st.dataframe(anime_user_ratings.head())
57
-
58
- # # Define your repository name
59
- # models_repo= MODELS_FILEPATH
60
-
61
- # # Load models
62
-
63
- # item_based_knn_model_path = hf_hub_download(repo_name, MODEL_TRAINER_ITEM_KNN_TRAINED_MODEL_NAME)
64
- # user_based_knn_model_path = hf_hub_download(repo_name, MODEL_TRAINER_USER_KNN_TRAINED_MODEL_NAME)
65
- # svd_model_path = hf_hub_download(repo_name,MODEL_TRAINER_SVD_TRAINED_MODEL_NAME)
66
-
67
- # with open(item_based_knn_model_path, "rb") as f:
68
- # item_based_knn_model = joblib.load(f)
69
-
70
- # with open(user_based_knn_model_path, "rb") as f:
71
- # user_based_knn_model = joblib.load(f)
72
-
73
- # with open(svd_model_path, "rb") as f:
74
- # svd_model = joblib.load(f)
75
-
76
-
77
  # Access the models from session state
78
  cosine_similarity_model_path = hf_hub_download(MODELS_FILEPATH, MODEL_TRAINER_COSINESIMILARITY_MODEL_NAME)
79
  item_based_knn_model = st.session_state.models_loaded["item_based_knn_model"]
@@ -87,11 +64,11 @@ app_selector = st.sidebar.radio(
87
  )
88
 
89
  if app_selector == "Content-Based Recommender":
90
- st.title("Content-Based Recommender System")
91
  try:
92
 
93
  anime_list = anime_data["name"].tolist()
94
- anime_name = st.selectbox("Select an Anime", anime_list)
95
 
96
  # Set number of recommendations
97
  max_recommendations = min(len(anime_data), 100)
@@ -146,17 +123,17 @@ elif app_selector == "Collaborative Recommender":
146
  # Sidebar for choosing the collaborative filtering method
147
  collaborative_method = st.sidebar.selectbox(
148
  "Choose a collaborative filtering method:",
149
- ["SVD Collaborative Filtering", "User-Based Collaborative Filtering", "Anime-Based KNN Collaborative Filtering"]
150
  )
151
 
152
  # User input
153
  if collaborative_method == "SVD Collaborative Filtering" or collaborative_method == "User-Based Collaborative Filtering":
154
- user_ids = anime_user_ratings['user_id'].unique() # Get unique user IDs
155
- user_id = st.selectbox("Select a user ID ", user_ids)
156
  n_recommendations = st.slider("Number of Recommendations:", min_value=1, max_value=50, value=10)
157
  elif collaborative_method == "Anime-Based KNN Collaborative Filtering":
158
- anime_list = anime_user_ratings["name"].dropna().unique().tolist() # Ensure no NaN values in anime names
159
- anime_name = st.selectbox("Select an Anime", anime_list)
160
  n_recommendations = st.slider("Number of Recommendations:", min_value=1, max_value=50, value=10)
161
 
162
  # Get recommendations
@@ -164,8 +141,7 @@ elif app_selector == "Collaborative Recommender":
164
  # Load the recommender
165
  recommender = CollaborativeAnimeRecommender(anime_user_ratings)
166
  if collaborative_method == "SVD Collaborative Filtering":
167
- recommendations = recommender.get_svd_recommendations(user_id, n=n_recommendations, svd_model=svd_model)
168
- # st.write(recommendations.head())
169
  elif collaborative_method == "User-Based Collaborative Filtering":
170
  recommendations = recommender.get_user_based_recommendations(user_id, n_recommendations=n_recommendations, knn_user_model=user_based_knn_model)
171
  elif collaborative_method == "Anime-Based KNN Collaborative Filtering":
@@ -176,7 +152,7 @@ elif app_selector == "Collaborative Recommender":
176
 
177
  if isinstance(recommendations, pd.DataFrame) and not recommendations.empty:
178
  if len(recommendations) < n_recommendations:
179
- st.warning(f"Only {len(recommendations)} recommendations available, fewer than the requested {n_recommendations}.")
180
  st.write(f"Here are the Collaborative Recommendations:")
181
  cols = st.columns(5)
182
  for i, row in enumerate(recommendations.iterrows()):
@@ -213,7 +189,7 @@ elif app_selector == "Top Anime Recommender":
213
 
214
  n_recommendations = st.slider("Number of Recommendations:", min_value=1, max_value=50, value=10)
215
 
216
- if st.button("Get Top Anime"):
217
  # Load the popularity-based recommender
218
  recommender = PopularityBasedFiltering(anime_data)
219
 
 
21
 
22
  # Load models only once
23
  if "models_loaded" not in st.session_state:
24
+ st.session_state.models_loaded = {}
 
 
 
 
25
  # Load models
26
  st.session_state.models_loaded["cosine_similarity_model"] = hf_hub_download(MODELS_FILEPATH, MODEL_TRAINER_COSINESIMILARITY_MODEL_NAME)
27
  st.session_state.models_loaded["item_based_knn_model_path"] = hf_hub_download(MODELS_FILEPATH, MODEL_TRAINER_ITEM_KNN_TRAINED_MODEL_NAME)
 
44
  anime_data = st.session_state.anime_data
45
  anime_user_ratings = st.session_state.anime_user_ratings
46
 
47
+ # # Display dataset info
48
+ # st.write("Anime Data:")
49
+ # st.dataframe(anime_data.head())
50
 
51
+ # st.write("Anime User Ratings Data:")
52
+ # st.dataframe(anime_user_ratings.head())
53
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  # Access the models from session state
55
  cosine_similarity_model_path = hf_hub_download(MODELS_FILEPATH, MODEL_TRAINER_COSINESIMILARITY_MODEL_NAME)
56
  item_based_knn_model = st.session_state.models_loaded["item_based_knn_model"]
 
64
  )
65
 
66
  if app_selector == "Content-Based Recommender":
67
+ st.title("Content-Based Recommendation System")
68
  try:
69
 
70
  anime_list = anime_data["name"].tolist()
71
+ anime_name = st.selectbox("Pick an anime..unlock similar anime recommendations..", anime_list)
72
 
73
  # Set number of recommendations
74
  max_recommendations = min(len(anime_data), 100)
 
123
  # Sidebar for choosing the collaborative filtering method
124
  collaborative_method = st.sidebar.selectbox(
125
  "Choose a collaborative filtering method:",
126
+ ["Surprise Collaborative Filtering", "User-Based Collaborative Filtering", "Anime-Based KNN Collaborative Filtering"]
127
  )
128
 
129
  # User input
130
  if collaborative_method == "SVD Collaborative Filtering" or collaborative_method == "User-Based Collaborative Filtering":
131
+ user_ids = anime_user_ratings['user_id'].unique()
132
+ user_id = st.selectbox("Choose a user, and we'll show you animes they'd recommend!", user_ids)
133
  n_recommendations = st.slider("Number of Recommendations:", min_value=1, max_value=50, value=10)
134
  elif collaborative_method == "Anime-Based KNN Collaborative Filtering":
135
+ anime_list = anime_user_ratings["name"].dropna().unique().tolist()
136
+ anime_name = st.selectbox("Pick an anime, and we'll suggest more titles you'll love", anime_list)
137
  n_recommendations = st.slider("Number of Recommendations:", min_value=1, max_value=50, value=10)
138
 
139
  # Get recommendations
 
141
  # Load the recommender
142
  recommender = CollaborativeAnimeRecommender(anime_user_ratings)
143
  if collaborative_method == "SVD Collaborative Filtering":
144
+ recommendations = recommender.get_svd_recommendations(user_id, n=n_recommendations, svd_model=svd_model)
 
145
  elif collaborative_method == "User-Based Collaborative Filtering":
146
  recommendations = recommender.get_user_based_recommendations(user_id, n_recommendations=n_recommendations, knn_user_model=user_based_knn_model)
147
  elif collaborative_method == "Anime-Based KNN Collaborative Filtering":
 
152
 
153
  if isinstance(recommendations, pd.DataFrame) and not recommendations.empty:
154
  if len(recommendations) < n_recommendations:
155
+ st.warning(f"Oops...Only {len(recommendations)} recommendations available, fewer than the requested {n_recommendations}.")
156
  st.write(f"Here are the Collaborative Recommendations:")
157
  cols = st.columns(5)
158
  for i, row in enumerate(recommendations.iterrows()):
 
189
 
190
  n_recommendations = st.slider("Number of Recommendations:", min_value=1, max_value=50, value=10)
191
 
192
+ if st.button("Get Recommendations"):
193
  # Load the popularity-based recommender
194
  recommender = PopularityBasedFiltering(anime_data)
195