DavidHosp commited on
Commit
dd8a73e
·
1 Parent(s): 86a3d2d

update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -14
app.py CHANGED
@@ -1,8 +1,7 @@
1
 
2
- import pickle
3
- import pandas as pd
4
- import gradio as gr
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
- # Devolver la lista de títulos como una cadena
26
- return ', '.join(recommended_titles)
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- # Leer los datos
29
- dfmerge = pd.read_csv('merged_data6.csv')
 
 
30
 
31
- # Cargar el modelo
32
- with open('fc_model_svd_v1.pkl', 'rb') as file:
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
- # Definir la interfaz de Gradio
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="text",
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>