Gopala Krishna
commited on
Commit
·
69ef591
1
Parent(s):
fc474a4
Initial commit
Browse files- .vs/MovieRecommendations/FileContentIndex/576c91c6-73ef-4c5e-91b1-22ff2265c1e6.vsidx +0 -0
- .vs/MovieRecommendations/FileContentIndex/825ee891-a3ef-4246-879c-c25127e19d9b.vsidx +0 -0
- .vs/MovieRecommendations/FileContentIndex/a667826a-060e-41cb-b81b-726b0e815263.vsidx +0 -0
- .vs/MovieRecommendations/FileContentIndex/read.lock +0 -0
- .vs/MovieRecommendations/v17/.wsuo +0 -0
- .vs/VSWorkspaceState.json +7 -0
- .vs/slnx.sqlite +0 -0
- app.py +70 -0
- requirements.txt +4 -0
.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
|