Javier Real
Project Improvement
c3e37b9
import streamlit as st
from course_project import constants
from course_project.application_tools import get_data, get_recommendations, get_connections, get_explanation_for_reco
# brew install ollama
# ollama run gemma:7b
# Load app with: streamlit run course_project/app.py
# Cargar los datos de películas para mostrar en la interfaz
movies_data = get_data()
movies_titles = movies_data['title'].tolist()
movies_ids = movies_data.index.tolist()
movies_dict = dict(zip(movies_titles, movies_ids))
st.title('Movie Recommendation System')
# Sección para Javier
st.header('User 1\'s Movie Suggestions')
user_1_selections = st.multiselect('Select movies for User 1', movies_titles)
# Sección para Amelia
st.header('User 2\'s Movie Suggestions')
user_2_selections = st.multiselect('Select movies for User 2', movies_titles)
# Convertir las selecciones de títulos a IDs
user_1_ids = [movies_dict[title] for title in user_1_selections]
user_2_ids = [movies_dict[title] for title in user_2_selections]
# Crear el diccionario de suggestions
suggestions = {
"User1": user_1_ids,
"User2": user_2_ids
}
# Widget para seleccionar el número de resultados
n_results = st.number_input('Number of recommendations', min_value=1, max_value=100, value=10)
# Widget para seleccionar el método de similitud
similarity_method = st.radio("Select Similarity Method", ["Euclidean Similarity", "Cosine Similarity"])
# Asignar el valor de la constante apropiada basado en la selección del usuario
if similarity_method == "Cosine Similarity":
similarity = constants.COSINE_SIMILARITY
else:
similarity = constants.EUCLIDEAN_SIMILARITY
if st.button('Get Recommendations'):
recommendations_df = get_recommendations(suggestions, n_results=n_results, similarity=similarity)
st.session_state.recommendations_df = recommendations_df
if 'recommendations_df' in st.session_state:
recommendations_df = st.session_state.recommendations_df
for index, row in recommendations_df.iterrows():
st.markdown(f'## {row["title"]}')
st.image(row["poster_path"])
st.markdown(row["overview"])
st.markdown(f'Recommended because of the following related requests:')
connections = get_connections(row)
for person, request in connections.items():
st.markdown(f'**{person}**: {request}')
# if st.button(f'Get Explanation for Recommendation {row["title"]}', key=f'btn-{index}'):
# suggestion_ids = [id for id in row["based_on_index"].values()]
# reason = get_explanation_for_reco(suggestion_ids[0], suggestion_ids[1], index)
# st.markdown(f'**Reason for recommendation**: {reason}')