File size: 2,593 Bytes
28ef461
b3d8755
 
 
 
 
 
3d2732d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b3d8755
3d2732d
 
 
 
 
b3d8755
3d2732d
 
 
 
b3d8755
3d2732d
 
 
 
 
 
 
 
 
 
 
f83c6b6
48400b1
 
 
3d2732d
 
 
 
 
 
 
 
b3d8755
 
 
9b4ec2e
28ef461
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import gradio as gr
import pandas as pd
from transformers import pipeline

# Inicializa la pipeline de análisis de sentimientos
sentiment_pipeline = pipeline("sentiment-analysis")

# Función que toma un Dataframe y crea un gráfico visual con matplotlib
def plot_sentiment_distribution(df_category):
    sentiment_counts = df_category['sentiment'].value_counts()
    fig, ax = plt.subplots()
    sentiment_counts.plot(kind='bar', ax=ax)
    ax.set_title("Distribución de Sentimientos")
    ax.set_xlabel("Sentimiento")
    ax.set_ylabel("Número de reseñas")
    return fig

# Mapeo de categorías a nombres de archivos
category_to_file_path = {
    'Fashion': 'AMAZON_FASHION_5.json.gz',
    'Appliances': 'Appliances_5.json.gz',
    'Gift Cards': 'Gift_Cards_5.json.gz',
    'Magazine subscriptions': 'Magazine_Subscriptions_5.json.gz',
    'All beauty': 'All_Beauty_5.json.gz'
}

# Función para cargar los datos por categoría
def load_reviews(category):
    # Asegúrate de que la categoría proporcionada es válida
    if category not in category_to_file_path:
        raise ValueError("Categoría no encontrada. Asegúrate de que la categoría sea correcta.")

    file_name = category_to_file_path[category]
    file_path = f"{file_name}"  # Asegúrate de que este sea el path correcto a tus archivos
    df = pd.read_json(file_path, lines=True, compression='gzip')
    return df

# Función que realiza el análisis de sentimientos para una categoría específica
def sentiment_counts_by_category(category):
    df_category = load_reviews(category)
    df_category['sentiment'] = df_category['reviewText'].apply(lambda x: sentiment_pipeline(x[:512])[0]['label'])
    # Ahora llama a la función de trazado y devuelve el gráfico
    fig = plot_sentiment_distribution(df_category)
    return fig

def show_first_five(category):
    df_category = load_reviews(category)
    return df_category.head(5)  # Muestra las primeras 5 filas del DataFrame de la categoría

# Crear la interfaz usando gr.Blocks
with gr.Blocks() as demo:
    with gr.Row():
        category = gr.Dropdown(choices=list(category_to_file_path.keys()), label="Seleccione una categoría")
        show_button = gr.Button("Mostrar Datos")
        plot_button = gr.Button("Graficar Distribución de Sentimientos")
        output_df = gr.Dataframe()
        output_plot = gr.Plot()

    show_button.click(show_first_five, inputs=category, outputs=output_df)
    plot_button.click(sentiment_counts_by_category, inputs=category, outputs=output_plot)

# Lanza la interfaz
if __name__ == "__main__":
    demo.launch()