-
Notifications
You must be signed in to change notification settings - Fork 0
/
show-movies.py
77 lines (55 loc) · 2.24 KB
/
show-movies.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
from flask import Flask
from flask import render_template
import random
import numpy as np
import pandas as pd
import config
def get_movies(id=-1) -> (str, list):
"""
Get a list of movies
Parameters:
- id (int): The movie id for which to retrieve recommendations. Default is 0 for a random selection
Returns:
Tuple:
- If id == -1:
- list: A list of lists representing a random selection of movies
- str: An empty string (no specific movie name)
- Else:
- list: A list of lists representing recommended movies
- str: The name of the movie with the specified id
"""
# Load movies into new dataframe
df = pd.read_csv(config.MOVIES_PATH)
# Add integer index column with asecending values from zero
df = df.reset_index(drop=False)
if id == -1:
# Return list of random selection of movies
return (random.sample(df.values.tolist(), 30), "no movie selected")
else:
# Load similarities into a new dataframe
similarities = pd.read_csv(config.SIMILARITIES_PATH)
# Extract a string of similarity values for row id
similarities_for_id = similarities.loc[id, "similarities"]
# Split the string into list of strings
similarity_values_as_strings = similarities_for_id.split()
# Convert into list of integers
similarity_values_as_integers = list(map(int, similarity_values_as_strings))
# Get movies from rows that match list of integers
selected_rows_from_df = df.loc[similarity_values_as_integers]
# Convert df to list
result_list_of_lists = selected_rows_from_df.values.tolist()
# Return list of similar movies
return (result_list_of_lists, df.loc[id][1])
app = Flask(__name__)
@app.route("/")
def home():
# Show random selection of movies
movies, _ = get_movies()
return render_template("movies.html", movies=movies, h2="Choose a movie to get recommendations")
@app.route('/movie/<int:id>')
def get_movie_recommendations(id):
# Show similar movies
movies, movie_name = get_movies(id)
return render_template("movies.html", movies=movies, h2=f"If you liked '{movie_name}', you might like these")
if __name__ == "__main__":
app.run()