GenaroRocha's picture
Making it look beautiful and reducing the batch
b84e21c
raw
history blame
3.24 kB
import gradio as gr
import pandas as pd
import matplotlib.pyplot as plt
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
def analyze_sentiment(text):
# Verifica si el texto es una cadena de texto (string)
if isinstance(text, str):
return sentiment_pipeline(text[:512])[0]['label']
else:
return "Unknown" # O algún valor por defecto para datos no procesables
def sentiment_counts_by_category(category):
df_category = load_reviews(category)
df_category = df_category.head(30)
# Aplica la función de análisis de sentimientos modificada
df_category['sentiment'] = df_category['reviewText'].apply(analyze_sentiment)
# 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:
gr.Markdown(
'''
<h1 style='text-align: center; color: navy;'>Análisis de Sentimientos Amazon</h1>
<p style='text-align: center;'>Seleccione una categoría y visualice los datos y la distribución de sentimientos.</p>
'''
)
with gr.Row():
category = gr.Dropdown(choices=list(category_to_file_path.keys()), label="Seleccione una categoría")
with gr.Column():
show_button = gr.Button("Mostrar Datos", style="width: 100%;")
plot_button = gr.Button("Graficar Distribución de Sentimientos", style="width: 100%;")
with gr.Column():
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()