DavidHosp commited on
Commit
b206a0e
·
1 Parent(s): 52cf6b3

update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -11
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 `apply` de pandas
18
- predicted_ratings = df_filtered['id'].apply(lambda movie_id: svd_model.predict(int(user_id), movie_id).est)
 
 
 
19
 
20
  # Ordenar las películas según su predicción de rating
21
- movie_rating = list(zip(df_filtered['id'], predicted_ratings))
22
- movie_rating.sort(key=lambda x: x[1], reverse=True)
23
 
24
  # Obtener los títulos de las películas recomendadas
25
- recommended_movies = movie_rating[:top]
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