Spaces:
Build error
Build error
update app.py
Browse files
app.py
CHANGED
|
@@ -6,28 +6,28 @@ import pickle
|
|
| 6 |
import pandas as pd
|
| 7 |
import gradio as gr
|
| 8 |
|
| 9 |
-
|
| 10 |
def generar_recomendacion(svd_model, user_id, df, genres, top=5):
|
| 11 |
-
# Filtrar las películas que correspondan a los géneros de interés
|
| 12 |
-
df_filtered = df[df[genres].any(axis=1)]
|
| 13 |
|
| 14 |
# Crear un mapeo de id de película a título de película para una búsqueda más eficiente
|
| 15 |
id_to_title = df_filtered.set_index('id')['title'].to_dict()
|
| 16 |
|
| 17 |
-
# Obtener las recomendaciones utilizando la función `
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
| 19 |
|
| 20 |
# Ordenar las películas según su predicción de rating
|
| 21 |
-
|
| 22 |
-
movie_rating.sort(key=lambda x: x[1], reverse=True)
|
| 23 |
|
| 24 |
# Obtener los títulos de las películas recomendadas
|
| 25 |
-
|
| 26 |
-
recommended_titles = [id_to_title[movie_id] for movie_id, _ in recommended_movies]
|
| 27 |
|
| 28 |
# Contar cuántas películas de cada género hay en las recomendaciones
|
| 29 |
genre_counts = df_filtered[df_filtered['id'].isin([movie_id for movie_id, _ in recommended_movies])][genres].sum()
|
| 30 |
-
|
| 31 |
# Limpiar la figura
|
| 32 |
plt.clf()
|
| 33 |
|
|
@@ -37,7 +37,6 @@ def generar_recomendacion(svd_model, user_id, df, genres, top=5):
|
|
| 37 |
plt.ylabel('Cantidad')
|
| 38 |
plt.title('Cantidad de Películas por Género en las Recomendaciones')
|
| 39 |
|
| 40 |
-
|
| 41 |
# Guardar el gráfico como una imagen PNG en una cadena de bytes
|
| 42 |
buf = io.BytesIO()
|
| 43 |
plt.savefig(buf, format='png')
|
|
@@ -51,6 +50,8 @@ def generar_recomendacion(svd_model, user_id, df, genres, top=5):
|
|
| 51 |
# Devolver la lista de títulos y el gráfico como una imagen
|
| 52 |
return ', '.join(recommended_titles), im
|
| 53 |
|
|
|
|
|
|
|
| 54 |
# Leer los datos
|
| 55 |
dfmerge = pd.read_csv('merged_data7.csv')
|
| 56 |
|
|
|
|
| 6 |
import pandas as pd
|
| 7 |
import gradio as gr
|
| 8 |
|
|
|
|
| 9 |
def generar_recomendacion(svd_model, user_id, df, genres, top=5):
|
| 10 |
+
# Filtrar las películas que correspondan al usuario y a los géneros de interés
|
| 11 |
+
df_filtered = df[(df['user_id'] == user_id) & df[genres].any(axis=1)]
|
| 12 |
|
| 13 |
# Crear un mapeo de id de película a título de película para una búsqueda más eficiente
|
| 14 |
id_to_title = df_filtered.set_index('id')['title'].to_dict()
|
| 15 |
|
| 16 |
+
# Obtener las recomendaciones utilizando la función `predict` del modelo SVD
|
| 17 |
+
recommended_movies = []
|
| 18 |
+
for movie_id in df_filtered['id'].unique():
|
| 19 |
+
predicted_rating = svd_model.predict(user_id, movie_id).est
|
| 20 |
+
recommended_movies.append((movie_id, predicted_rating))
|
| 21 |
|
| 22 |
# Ordenar las películas según su predicción de rating
|
| 23 |
+
recommended_movies.sort(key=lambda x: x[1], reverse=True)
|
|
|
|
| 24 |
|
| 25 |
# Obtener los títulos de las películas recomendadas
|
| 26 |
+
recommended_titles = [id_to_title[movie_id] for movie_id, _ in recommended_movies[:top]]
|
|
|
|
| 27 |
|
| 28 |
# Contar cuántas películas de cada género hay en las recomendaciones
|
| 29 |
genre_counts = df_filtered[df_filtered['id'].isin([movie_id for movie_id, _ in recommended_movies])][genres].sum()
|
| 30 |
+
|
| 31 |
# Limpiar la figura
|
| 32 |
plt.clf()
|
| 33 |
|
|
|
|
| 37 |
plt.ylabel('Cantidad')
|
| 38 |
plt.title('Cantidad de Películas por Género en las Recomendaciones')
|
| 39 |
|
|
|
|
| 40 |
# Guardar el gráfico como una imagen PNG en una cadena de bytes
|
| 41 |
buf = io.BytesIO()
|
| 42 |
plt.savefig(buf, format='png')
|
|
|
|
| 50 |
# Devolver la lista de títulos y el gráfico como una imagen
|
| 51 |
return ', '.join(recommended_titles), im
|
| 52 |
|
| 53 |
+
|
| 54 |
+
|
| 55 |
# Leer los datos
|
| 56 |
dfmerge = pd.read_csv('merged_data7.csv')
|
| 57 |
|