Spaces:
Build error
Build error
update app.py
Browse files
app.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
| 1 |
|
| 2 |
-
import
|
| 3 |
-
import
|
| 4 |
-
|
| 5 |
-
|
| 6 |
|
| 7 |
def generar_recomendacion(svd_model, user_id, df, genres, top=5):
|
| 8 |
# Filtrar las películas que correspondan a los géneros de interés
|
|
@@ -22,16 +21,29 @@ def generar_recomendacion(svd_model, user_id, df, genres, top=5):
|
|
| 22 |
recommended_movies = movie_rating[:top]
|
| 23 |
recommended_titles = [id_to_title[movie_id] for movie_id, _ in recommended_movies]
|
| 24 |
|
| 25 |
-
#
|
| 26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27 |
|
| 28 |
-
#
|
| 29 |
-
|
|
|
|
|
|
|
| 30 |
|
| 31 |
-
#
|
| 32 |
-
|
| 33 |
-
svd_model = pickle.load(file)
|
| 34 |
|
|
|
|
| 35 |
def wrap_generar_recomendacion(user_id, drama, comedy, horror, romance, top=5):
|
| 36 |
# Crear la lista de géneros de interés a partir de las casillas de verificación
|
| 37 |
genres = []
|
|
@@ -40,14 +52,14 @@ def wrap_generar_recomendacion(user_id, drama, comedy, horror, romance, top=5):
|
|
| 40 |
if horror: genres.append('Horror')
|
| 41 |
if romance: genres.append('Romance')
|
| 42 |
|
| 43 |
-
# Llamar a la función de recomendación y devolver los resultados como una cadena
|
| 44 |
return generar_recomendacion(svd_model, user_id, dfmerge, genres, int(top))
|
| 45 |
|
| 46 |
-
#
|
| 47 |
demo = gr.Interface(
|
| 48 |
fn=wrap_generar_recomendacion,
|
| 49 |
inputs=[gr.inputs.Number(label="User ID"), gr.inputs.Checkbox(label="Drama"), gr.inputs.Checkbox(label="Comedy"), gr.inputs.Checkbox(label="Horror"), gr.inputs.Checkbox(label="Romance"), gr.inputs.Number(label="Top")],
|
| 50 |
-
outputs=
|
| 51 |
title = '<h1 style="text-align: center;">STREAMREC</h1>',
|
| 52 |
description = """
|
| 53 |
<p>
|
|
|
|
| 1 |
|
| 2 |
+
import matplotlib.pyplot as plt
|
| 3 |
+
import io
|
| 4 |
+
from PIL import Image
|
|
|
|
| 5 |
|
| 6 |
def generar_recomendacion(svd_model, user_id, df, genres, top=5):
|
| 7 |
# Filtrar las películas que correspondan a los géneros de interés
|
|
|
|
| 21 |
recommended_movies = movie_rating[:top]
|
| 22 |
recommended_titles = [id_to_title[movie_id] for movie_id, _ in recommended_movies]
|
| 23 |
|
| 24 |
+
# Contar cuántas películas de cada género hay en las recomendaciones
|
| 25 |
+
genre_counts = df_filtered[df_filtered['id'].isin([movie_id for movie_id, _ in recommended_movies])][genres].sum()
|
| 26 |
+
|
| 27 |
+
# Crear el gráfico de barras
|
| 28 |
+
plt.bar(genres, genre_counts)
|
| 29 |
+
plt.xlabel('Género')
|
| 30 |
+
plt.ylabel('Cantidad')
|
| 31 |
+
plt.title('Cantidad de Películas por Género en las Recomendaciones')
|
| 32 |
+
|
| 33 |
+
# Guardar el gráfico como una imagen PNG en una cadena de bytes
|
| 34 |
+
buf = io.BytesIO()
|
| 35 |
+
plt.savefig(buf, format='png')
|
| 36 |
+
buf.seek(0)
|
| 37 |
|
| 38 |
+
# Convertir la cadena de bytes en una imagen que se puede mostrar en Gradio
|
| 39 |
+
im = Image.open(buf)
|
| 40 |
+
im = im.convert('RGB')
|
| 41 |
+
buf.close()
|
| 42 |
|
| 43 |
+
# Devolver la lista de títulos y el gráfico como una imagen
|
| 44 |
+
return ', '.join(recommended_titles), im
|
|
|
|
| 45 |
|
| 46 |
+
# Modificar la función wrap_generar_recomendacion para devolver una imagen también
|
| 47 |
def wrap_generar_recomendacion(user_id, drama, comedy, horror, romance, top=5):
|
| 48 |
# Crear la lista de géneros de interés a partir de las casillas de verificación
|
| 49 |
genres = []
|
|
|
|
| 52 |
if horror: genres.append('Horror')
|
| 53 |
if romance: genres.append('Romance')
|
| 54 |
|
| 55 |
+
# Llamar a la función de recomendación y devolver los resultados como una cadena y una imagen
|
| 56 |
return generar_recomendacion(svd_model, user_id, dfmerge, genres, int(top))
|
| 57 |
|
| 58 |
+
# Modificar la interfaz de Gradio para mostrar una imagen también
|
| 59 |
demo = gr.Interface(
|
| 60 |
fn=wrap_generar_recomendacion,
|
| 61 |
inputs=[gr.inputs.Number(label="User ID"), gr.inputs.Checkbox(label="Drama"), gr.inputs.Checkbox(label="Comedy"), gr.inputs.Checkbox(label="Horror"), gr.inputs.Checkbox(label="Romance"), gr.inputs.Number(label="Top")],
|
| 62 |
+
outputs=[gr.outputs.Textbox(), gr.outputs.Image(type='pil')],
|
| 63 |
title = '<h1 style="text-align: center;">STREAMREC</h1>',
|
| 64 |
description = """
|
| 65 |
<p>
|