-
Notifications
You must be signed in to change notification settings - Fork 1
/
Movie_test.py
217 lines (177 loc) · 9.21 KB
/
Movie_test.py
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
"""
Streamlit webserver-based Recommender Engine.
Author: Explore Data Science Academy.
Note:
---------------------------------------------------------------------
Please follow the instructions provided within the README.md file
located within the root of this repository for guidance on how to use
this script correctly.
NB: !! Do not remove/modify the code delimited by dashes !!
This application is intended to be partly marked in an automated manner.
Altering delimited code may result in a mark of 0.
---------------------------------------------------------------------
Description: This file is used to launch a minimal streamlit web
application. You are expected to extend certain aspects of this script
and its dependencies as part of your predict project.
For further help with the Streamlit framework, see:
https://docs.streamlit.io/en/latest/
"""
# Streamlit dependencies
import streamlit as st
# Data handling dependencies
import pandas as pd
import numpy as np
# Custom Libraries
from utils.data_loader import load_movie_titles
from recommenders.collaborative_based import collab_model
from recommenders.content_based import content_model
from sklearn.feature_extraction.text import TfidfVectorizer #for vectorizing text data'
from sklearn.preprocessing import StandardScaler #for numeri values
from sklearn.decomposition import TruncatedSVD # for collaborative model
from surprise import Reader, Dataset
from surprise import SVD
import pickle
# Data Loading
title_list = load_movie_titles('resources/data/movies.csv')
movies = pd.read_csv('resources/data/movies.csv')
merged_df = pd.read_csv(r'C:\Users\MALULEKE LOUIS\Downloads\merged_data.csv')
# Loading the vectorizer using pickle
with open('resources/models/tfidf_vectorizer.pkl', 'rb') as vectorizer_file:
vectorizer = pickle.load(vectorizer_file)
#LOADING THE SCALER
with open('resources/models/scaler.pkl', 'rb') as scaling:
scaler = pickle.load(scaling)
# loading model
with open('resources/models/svd_model.pkl', 'rb') as model:
SVD = pickle.load(model)
# App declaration
def main():
# DO NOT REMOVE the 'Recommender System' option below, however,
# you are welcome to add more options to enrich your app.
page_options = ["Recommender System", "Solution Overview", "Movie Search", "Meet the Team", "Contact Details"]
# -------------------------------------------------------------------
# ----------- !! THIS CODE MUST NOT BE ALTERED !! -------------------
# -------------------------------------------------------------------
page_selection = st.sidebar.selectbox("Choose Option", page_options)
if page_selection == "Recommender System":
# Header contents
st.write('# Movie Recommender Engine')
st.write('### EXPLORE Data Science Academy Unsupervised Predict')
st.image('resources/imgs/Image_header.png',use_column_width=True)
# Recommender System algorithm selection
sys = st.radio("Select an algorithm",
('Content Based Filtering',
'Collaborative Based Filtering'))
# User-based preferences
st.write('### Enter Your Three Favorite Movies')
movie_1 = st.selectbox('Fisrt Option',title_list[14930:15200])
movie_2 = st.selectbox('Second Option',title_list[25055:25255])
movie_3 = st.selectbox('Third Option',title_list[21100:21200])
fav_movies = [movie_1,movie_2,movie_3]
# Perform top-10 movie recommendation generation
if sys == 'Content Based Filtering':
if st.button("Recommend"):
try:
with st.spinner('Crunching the numbers...'):
top_recommendations = content_model(movie_list=fav_movies,
top_n=10)
st.title("We think you'll like:")
for i,j in enumerate(top_recommendations):
st.subheader(str(i+1)+'. '+j)
except:
st.error("Oops! Looks like this algorithm does't work.\
We'll need to fix it!")
if sys == 'Collaborative Based Filtering':
if st.button("Recommend"):
try:
with st.spinner('Crunching the numbers...'):
top_recommendations = collab_model(movie_list=fav_movies,
top_n=10)
st.title("We think you'll like:")
for i,j in enumerate(top_recommendations):
st.subheader(str(i+1)+'. '+j)
except:
st.error("Oops! Looks like this algorithm does't work.\
We'll need to fix it!")
# -------------------------------------------------------------------
# ------------- SAFE FOR ALTERING/EXTENSION -------------------
# Sidebar - Page Selection
page_selection = st.sidebar.selectbox("Select Page", ["Solution Overview", "Movie Search", "Meet the Team"])
if page_selection == "Solution Overview":
st.title("Solution Overview")
st.write("""
Welcome to Cinemate - your personalized movie recommendation engine!
Cinemate uses advanced algorithms to provide you with movie recommendations based on your preferences.
Whether you're a fan of content-based filtering or collaborative-based filtering, Cinemate has you covered.
Simply select your favorite movies, choose an algorithm, and let Cinemate crunch the numbers to suggest
movies tailored just for you. Enjoy the movie-watching experience with Cinemate Recommender!
""")
elif page_selection == "Movie Search":
st.write('# Movie Recommender Engine')
st.write('### Cinemate Recommender')
st.image('resources/imgs/Image_header.png', use_column_width=True)
# Recommender System algorithm selection
sys = st.radio("Select an algorithm",
('Content Based Filtering',
'Collaborative Based Filtering'))
# User-based preferences
st.write('### Enter Your Three Favorite Movies')
movie_1 = st.selectbox('First Option', title_list[14930:15200])
movie_2 = st.selectbox('Second Option', title_list[25055:25255])
movie_3 = st.selectbox('Third Option', title_list[21100:21200])
fav_movies = [movie_1, movie_2, movie_3]
# Perform top-10 movie recommendation generation
if sys == 'Content Based Filtering':
if st.button("Recommend"):
try:
with st.spinner('Crunching the numbers...'):
top_recommendations = content_model(movie_list=fav_movies,
top_n=10)
st.title("We think you'll like:")
for i, j in enumerate(top_recommendations):
st.subheader(str(i + 1) + '. ' + j)
except:
st.error("Oops! Looks like this algorithm doesn't work. We'll need to fix it!")
if sys == 'Collaborative Based Filtering':
if st.button("Recommend"):
try:
with st.spinner('Crunching the numbers...'):
model = 'SVD'
merged_df['predict_score'] = merged_df.apply(
lambda row: model.predict_score(row['userId'], row['title']), axis=1)
top_recommendations = model(movie_list=fav_movies,
top_n=10)
st.title("We think you'll like:")
for i, j in enumerate(top_recommendations):
st.subheader(str(i + 1) + '. ' + j)
except:
st.error("Oops! Looks like this algorithm doesn't work. We'll need to fix it!")
elif page_selection == "Meet the Team":
# Team Lead
st.write("- Ayanda Moloi: Team Lead")
st.write(" - Background: Leadership and Project Management")
st.write(" - Experience: Led the overall project development and coordination of this project.")
# Project Manager
st.write("- Cathrine Mamosadi: Project Manager")
st.write(" - Background: Project Management and Coordination")
st.write(" - Experience: Managed project timelines, resources, and communication.")
# Data Engineer
st.write("- Sakhile Zungu: Data Engineer")
st.write(" - Background: Data Engineering and Database Management")
st.write(" - Experience: Responsible for Model training and engineering.")
# Data Scientist
st.write("- Pinky Ndleve: Data Scientist")
st.write(" - Background: Data Science and Machine Learning")
st.write(" - Experience: Developed machine learning models and conducted data analysis.")
# App Developer
st.write("- Lauretta Maluleke: App Developer")
st.write(" - Background: Web Development")
st.write(" - Experience: Developed the Streamlit web application for Recommender systems.")
# Data Analyst
st.write("- Asmaa Hassan: Data Analyst")
st.write(" - Background: Data visualization and Analysis")
st.write(" - Experience: Power Bi and Python analysis")
# You may want to add more sections here for aspects such as an EDA,
# or to provide your business pitch.
if __name__ == '__main__':
main() # Assuming you have a function named main()