Ankan Ghosh
Upload 11 files
cd5a7c4 verified
import streamlit as st
import pandas as pd
from main import init_qdrant, load_data, input_ratings, recommend_movies
# Initialize Qdrant and load data
qdrant = init_qdrant()
load_data(qdrant)
# Load movies
movies = pd.read_csv("./data/ml-latest-small/movies.csv")
ratings = pd.read_csv("./data/ml-latest-small/ratings.csv")
# Initialize session state to store user ratings
if "user_ratings" not in st.session_state:
st.session_state["user_ratings"] = {}
# Streamlit app interface
st.title("Movie Recommendation System")
# Movie selection and rating
movie_titles = movies["title"].tolist()
# Movie search and selection using multiselect
selected_movies = st.multiselect("Search and select movies to rate", movie_titles)
if selected_movies:
for movie in selected_movies:
rating = st.slider(f"Rate {movie}", 0.0, 5.0, 0.0, 0.5)
if st.button(f"Add {movie}"):
movie_id = movies[movies.title == movie].movieId.iloc[0]
st.session_state["user_ratings"][movie] = (movie_id, rating)
st.write(f"Added: {movie} with a rating of {rating}")
else:
st.write("Select movies to rate from the dropdown.")
# Clear button to reset all inputs
if st.button("Clear Selections"):
st.session_state["user_ratings"] = {}
st._set_query_params() # Reset the app state
# Display current ratings
if st.session_state["user_ratings"]:
st.write("Current Movie Ratings:")
for movie, (movie_id, rating) in st.session_state["user_ratings"].items():
st.write(f"{movie}: {rating}")
# Get recommendations
if st.button("Get Recommendations"):
if st.session_state["user_ratings"]:
final_ratings = input_ratings(st.session_state["user_ratings"], ratings)
recommendations = recommend_movies(qdrant, movies, final_ratings)
if recommendations:
st.header("Recommended Movies for You")
for movie in recommendations:
st.write(movie)
else:
st.info("No recommendations found based on your ratings.")
else:
st.warning("Please rate at least one movie to get recommendations.")