GenaroRocha commited on
Commit
3d2732d
1 Parent(s): 9b4ec2e

Making everything look fine (using valid files and valid app.py)

Browse files
All_Beauty_5.json.gz ADDED
Binary file (634 kB). View file
 
Appliances_5.json.gz ADDED
Binary file (73 kB). View file
 
Gift_Cards_5.json.gz ADDED
Binary file (177 kB). View file
 
Magazine_Subscriptions_5.json.gz ADDED
Binary file (402 kB). View file
 
app.py CHANGED
@@ -5,40 +5,59 @@ from transformers import pipeline
5
  # Inicializa la pipeline de análisis de sentimientos
6
  sentiment_pipeline = pipeline("sentiment-analysis")
7
 
8
- # Función para cargar los datos
9
- def load_reviews():
10
- # Asegúrate de usar la ruta correcta al archivo .json.gz en tu espacio de Hugging Face
11
- df = pd.read_json('AMAZON_FASHION_5.json.gz', lines=True, compression='gzip')
12
- return df
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
- # Función para analizar el sentimiento de una reseña
15
- def analyze_sentiment(review):
16
- # Usa la pipeline de transformers para analizar el sentimiento
17
- result = sentiment_pipeline(review)
18
- # Devuelve solo la etiqueta ('LABEL_0' o 'LABEL_1') y el puntaje
19
- return result[0]['label'], round(result[0]['score'], 4)
20
 
21
- # Carga los datos (esto puede tardar un poco dependiendo del tamaño del archivo)
22
- df_reviews = load_reviews()
 
 
23
 
24
- # Función para mostrar una muestra del DataFrame
25
- def show_sample():
26
- return df_reviews.sample(5) # Muestra 5 filas aleatorias del DataFrame
 
 
 
 
 
 
 
 
27
 
28
  # Crear la interfaz usando gr.Blocks
29
  with gr.Blocks() as demo:
30
  with gr.Row():
31
- with gr.Column():
32
- input_review = gr.Textbox(lines=2, placeholder="Ingrese una reseña de Amazon Fashion aquí...")
33
- analyze_button = gr.Button("Analizar")
34
- output_label = gr.Label()
35
- output_score = gr.Textbox()
36
- with gr.Column():
37
- show_button = gr.Button("Mostrar Ejemplos")
38
- output_df = gr.Dataframe()
39
-
40
- analyze_button.click(analyze_sentiment, inputs=input_review, outputs=[output_label, output_score])
41
- show_button.click(show_sample, inputs=None, outputs=output_df)
42
 
43
  # Lanza la interfaz
44
  if __name__ == "__main__":
 
5
  # Inicializa la pipeline de análisis de sentimientos
6
  sentiment_pipeline = pipeline("sentiment-analysis")
7
 
8
+ # Función que toma un Dataframe y crea un gráfico visual con matplotlib
9
+ def plot_sentiment_distribution(df_category):
10
+ sentiment_counts = df_category['sentiment'].value_counts()
11
+ fig, ax = plt.subplots()
12
+ sentiment_counts.plot(kind='bar', ax=ax)
13
+ ax.set_title("Distribución de Sentimientos")
14
+ ax.set_xlabel("Sentimiento")
15
+ ax.set_ylabel("Número de reseñas")
16
+ return fig
17
+
18
+ # Mapeo de categorías a nombres de archivos
19
+ category_to_file_path = {
20
+ 'Fashion': 'AMAZON_FASHION_5.json.gz',
21
+ 'Appliances': 'Appliances_5.json.gz',
22
+ 'Gift Cards': 'Gift_Cards_5.json.gz',
23
+ 'Magazine subscriptions': 'Magazine_Subscriptions_5.json.gz',
24
+ 'All beauty': 'All_Beauty_5.json.gz'
25
+ }
26
 
27
+ # Función para cargar los datos por categoría
28
+ def load_reviews(category):
29
+ # Asegúrate de que la categoría proporcionada es válida
30
+ if category not in category_to_file_path:
31
+ raise ValueError("Categoría no encontrada. Asegúrate de que la categoría sea correcta.")
 
32
 
33
+ file_name = category_to_file_path[category]
34
+ file_path = f"{file_name}" # Asegúrate de que este sea el path correcto a tus archivos
35
+ df = pd.read_json(file_path, lines=True, compression='gzip')
36
+ return df
37
 
38
+ # Función que realiza el análisis de sentimientos para una categoría específica
39
+ def sentiment_counts_by_category(category):
40
+ df_category = load_reviews(category)
41
+ df_category['sentiment'] = df_category['reviewText'].apply(lambda x: sentiment_pipeline(x[:512])[0]['label'])
42
+ # Ahora llama a la función de trazado y devuelve el gráfico
43
+ fig = plot_sentiment_distribution(df_category)
44
+ return fig
45
+
46
+ def show_first_five(category):
47
+ df_category = load_reviews(category)
48
+ return df_category.head(5) # Muestra las primeras 5 filas del DataFrame de la categoría
49
 
50
  # Crear la interfaz usando gr.Blocks
51
  with gr.Blocks() as demo:
52
  with gr.Row():
53
+ category = gr.Dropdown(choices=list(category_to_file_path.keys()), label="Seleccione una categoría")
54
+ show_button = gr.Button("Mostrar Datos")
55
+ plot_button = gr.Button("Graficar Distribución de Sentimientos")
56
+ output_df = gr.Dataframe()
57
+ output_plot = gr.Plot()
58
+
59
+ show_button.click(show_first_five, inputs=category, outputs=output_df)
60
+ plot_button.click(sentiment_counts_by_category, inputs=category, outputs=output_plot)
 
 
 
61
 
62
  # Lanza la interfaz
63
  if __name__ == "__main__":
requirements.txt CHANGED
@@ -2,3 +2,4 @@ torch
2
  gradio
3
  pandas
4
  transformers
 
 
2
  gradio
3
  pandas
4
  transformers
5
+ matplotlib