Gopala Krishna commited on
Commit
69ef591
1 Parent(s): fc474a4

Initial commit

Browse files
.vs/MovieRecommendations/FileContentIndex/576c91c6-73ef-4c5e-91b1-22ff2265c1e6.vsidx ADDED
Binary file (127 Bytes). View file
 
.vs/MovieRecommendations/FileContentIndex/825ee891-a3ef-4246-879c-c25127e19d9b.vsidx ADDED
Binary file (10.4 kB). View file
 
.vs/MovieRecommendations/FileContentIndex/a667826a-060e-41cb-b81b-726b0e815263.vsidx ADDED
Binary file (4.83 kB). View file
 
.vs/MovieRecommendations/FileContentIndex/read.lock ADDED
File without changes
.vs/MovieRecommendations/v17/.wsuo ADDED
Binary file (24.1 kB). View file
 
.vs/VSWorkspaceState.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "ExpandedNodes": [
3
+ ""
4
+ ],
5
+ "SelectedNode": "\\C:\\Python\\Programs\\Gradio\\HuggingSpace\\MovieRecommendations",
6
+ "PreviewInSolutionExplorer": false
7
+ }
.vs/slnx.sqlite ADDED
Binary file (90.1 kB). View file
 
app.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import numpy as np
3
+ import pandas as pd
4
+ from scipy.sparse import csr_matrix
5
+ from sklearn.neighbors import NearestNeighbors
6
+
7
+ def create_matrix(df):
8
+ N = len(df['userId'].unique())
9
+ M = len(df['movieId'].unique())
10
+ # Map Ids to indices
11
+ user_mapper = dict(zip(np.unique(df["userId"]), list(range(N))))
12
+ movie_mapper = dict(zip(np.unique(df["movieId"]), list(range(M))))
13
+ # Map indices to IDs
14
+ user_inv_mapper = dict(zip(list(range(N)), np.unique(df["userId"])))
15
+ movie_inv_mapper = dict(zip(list(range(M)), np.unique(df["movieId"])))
16
+ user_index = [user_mapper[i] for i in df['userId']]
17
+ movie_index = [movie_mapper[i] for i in df['movieId']]
18
+ X = csr_matrix((df["rating"], (movie_index, user_index)), shape=(M, N))
19
+ return X, user_mapper, movie_mapper, user_inv_mapper, movie_inv_mapper
20
+
21
+ def find_similar_movies(movie_id, X, k, metric='cosine', show_distance=False):
22
+ neighbour_ids = []
23
+ movie_ind = movie_mapper[movie_id]
24
+ movie_vec = X[movie_ind]
25
+ k += 1
26
+ kNN = NearestNeighbors(n_neighbors=k, algorithm="brute", metric=metric)
27
+ kNN.fit(X)
28
+ movie_vec = movie_vec.reshape(1,-1)
29
+ neighbour = kNN.kneighbors(movie_vec, return_distance=show_distance)
30
+ for i in range(0,k):
31
+ n = neighbour.item(i)
32
+ neighbour_ids.append(movie_inv_mapper[n])
33
+ neighbour_ids.pop(0)
34
+ return neighbour_ids
35
+
36
+ def recommend_movies(movie_id):
37
+ similar_ids = find_similar_movies(movie_id, X, k=10)
38
+ movie_title = movie_titles[movie_id]
39
+ recommendations = []
40
+ for i in similar_ids:
41
+ recommendations.append(movie_titles[i])
42
+ return recommendations
43
+
44
+ # Load data
45
+ ratings = pd.read_csv("https://s3-us-west-2.amazonaws.com/recommender-tutorial/ratings.csv")
46
+ movies = pd.read_csv("https://s3-us-west-2.amazonaws.com/recommender-tutorial/movies.csv")
47
+ n_ratings = len(ratings)
48
+ n_movies = len(ratings['movieId'].unique())
49
+ n_users = len(ratings['userId'].unique())
50
+ user_freq = ratings[['userId', 'movieId']].groupby('userId').count().reset_index()
51
+ user_freq.columns = ['userId', 'n_ratings']
52
+ mean_rating = ratings.groupby('movieId')[['rating']].mean()
53
+ lowest_rated = mean_rating['rating'].idxmin()
54
+ highest_rated = mean_rating['rating'].idxmax()
55
+ movie_stats = ratings.groupby('movieId')[['rating']].agg(['count', 'mean'])
56
+ movie_stats.columns = movie_stats.columns.droplevel()
57
+ X, user_mapper, movie_mapper, user_inv_mapper, movie_inv_mapper = create_matrix(ratings)
58
+ movie_titles = dict(zip(movies['movieId'], movies['title']))
59
+
60
+ # Set up Gradio interface
61
+ movie_id = gr.inputs.Number(default=3, label="Movie ID")
62
+ iface = gr.Interface(
63
+ fn=recommend_movies,
64
+ inputs=movie_id,
65
+ outputs="text",
66
+ title="Movie Recommender System",
67
+ description="Enter a movie ID and get recommendations for similar movies."
68
+ )
69
+ iface.launch()
70
+
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ numpy
2
+ pandas
3
+ spicy
4
+ sklearn