sarahai commited on
Commit
c30d8ca
1 Parent(s): 0cb44a0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -12
app.py CHANGED
@@ -15,7 +15,7 @@ def load_data():
15
  movies = pd.read_csv(zip_file.open('ml-latest-small/movies.csv'))
16
 
17
  data = pd.merge(ratings, movies, on='movieId')
18
- return data
19
 
20
  # Function to build user-item matrix and similarity matrix
21
  def build_matrices(data):
@@ -25,29 +25,42 @@ def build_matrices(data):
25
  return user_item_matrix, user_similarity_df
26
 
27
  # Function to get recommendations
28
- def get_recommendations(user_id, user_item_matrix, user_similarity_df, num_recommendations=5):
29
- user_sim_scores = user_similarity_df[user_id]
30
- similar_users = user_sim_scores.sort_values(ascending=False)
31
- similar_users_ratings = user_item_matrix.loc[similar_users.index]
32
- weighted_ratings = similar_users_ratings.T.dot(similar_users)
33
- weighted_ratings = weighted_ratings / similar_users.sum()
 
 
 
 
 
 
 
 
 
 
 
34
  recommendations = weighted_ratings.sort_values(ascending=False).head(num_recommendations)
 
35
  return recommendations
36
 
37
  # Load data and build matrices
38
- data = load_data()
39
  user_item_matrix, user_similarity_df = build_matrices(data)
40
 
41
  # Streamlit app
42
  st.title("Collaborative Filtering Recommendation System")
43
 
44
- user_id = st.number_input("Enter User ID", min_value=1, max_value=user_similarity_df.index.max(), step=1)
 
45
 
46
  if st.button("Get Recommendations"):
47
- if user_id in user_similarity_df.index:
48
- recommendations = get_recommendations(user_id, user_item_matrix, user_similarity_df)
49
  st.write("Top Recommendations:")
50
  for movie, score in recommendations.items():
51
  st.write(f"{movie}: {score:.2f}")
52
  else:
53
- st.write("User ID not found.")
 
15
  movies = pd.read_csv(zip_file.open('ml-latest-small/movies.csv'))
16
 
17
  data = pd.merge(ratings, movies, on='movieId')
18
+ return data, movies
19
 
20
  # Function to build user-item matrix and similarity matrix
21
  def build_matrices(data):
 
25
  return user_item_matrix, user_similarity_df
26
 
27
  # Function to get recommendations
28
+ def get_recommendations(selected_movies, user_item_matrix, num_recommendations=5):
29
+ # Calculate the mean ratings for the selected movies
30
+ movie_ratings = user_item_matrix[selected_movies].mean(axis=1)
31
+
32
+ # Find the most similar users based on the selected movies
33
+ similar_users = movie_ratings.sort_values(ascending=False).index
34
+
35
+ # Get the movies rated by similar users
36
+ similar_users_ratings = user_item_matrix.loc[similar_users]
37
+
38
+ # Calculate the weighted sum of ratings
39
+ weighted_ratings = similar_users_ratings.T.dot(movie_ratings)
40
+
41
+ # Normalize the ratings
42
+ weighted_ratings = weighted_ratings / movie_ratings.sum()
43
+
44
+ # Get the top N recommendations
45
  recommendations = weighted_ratings.sort_values(ascending=False).head(num_recommendations)
46
+
47
  return recommendations
48
 
49
  # Load data and build matrices
50
+ data, movies = load_data()
51
  user_item_matrix, user_similarity_df = build_matrices(data)
52
 
53
  # Streamlit app
54
  st.title("Collaborative Filtering Recommendation System")
55
 
56
+ # Let user select favorite movies
57
+ selected_movies = st.multiselect("Select your favorite movies", movies['title'].unique())
58
 
59
  if st.button("Get Recommendations"):
60
+ if selected_movies:
61
+ recommendations = get_recommendations(selected_movies, user_item_matrix)
62
  st.write("Top Recommendations:")
63
  for movie, score in recommendations.items():
64
  st.write(f"{movie}: {score:.2f}")
65
  else:
66
+ st.write("Please select at least one movie.")