-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
57 lines (43 loc) · 2.19 KB
/
main.py
File metadata and controls
57 lines (43 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import pickle
import pandas as pd
import numpy as np
from surprise import SVD
from surprise import Dataset, Reader
import sys
import os
sys.path.append(os.path.abspath(os.path.dirname(__file__)))
from model.recommendation import get_recommendations
ratings = pd.read_csv("/Users/ivyadiele/Desktop/PythonProject/MovieRecommendationSystem/data/ratings.dat", sep="::", engine="python", names=["userId", "movieId", "rating", "timestamp"])
movies = pd.read_csv("/Users/ivyadiele/Desktop/PythonProject/MovieRecommendationSystem/data/movies.dat", sep="::", engine='python', names=["MovieID", "Title", "Genres"], encoding="ISO-8859-1")
ratings.columns = ratings.columns.str.strip()
movies.columns = movies.columns.str.strip()
with open("/Users/ivyadiele/Desktop/PythonProject/MovieRecommendationSystem/model/model.pkl", "rb") as f:
model_svd = pickle.load(f)
reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(ratings[["userId", "movieId", "rating"]], reader)
trainset = data.build_full_trainset()
# Function to recommend movies for a given user
def recommend_movies(user_id, num_recommendations=5):
if user_id not in ratings["userId"].unique():
print(f"User ID {user_id} not found in the dataset.")
return []
# Get all unseen movies
seen_movies = ratings[ratings["userId"] == user_id]["movieId"].unique()
all_movies = movies["MovieID"].unique()
unseen_movies = [movie for movie in all_movies if movie not in seen_movies]
# Predict ratings for unseen movies
predictions = []
for movie_id in unseen_movies:
predicted_rating = model_svd.predict(user_id, movie_id).est
predictions.append((movie_id, predicted_rating))
# Sort by highest predicted ratings
predictions.sort(key=lambda x: x[1], reverse=True)
recommended_movies = [movies[movies["MovieID"] == movie[0]]["Title"].values[0] for movie in predictions[:num_recommendations]]
return recommended_movies
# Example usage
if __name__ == "__main__":
user_id = 1 # Change to test different users
print(f"\nRecommended movies for User {user_id}:")
recommendations = recommend_movies(user_id)
for i, movie in enumerate(recommendations, 1):
print(f"{i}. {movie}")