Spaces:
Sleeping
Sleeping
import pandas as pd | |
import plotly.express as px | |
import gradio as gr | |
# Funzione per l'analisi della parola chiave | |
def keyword_analysis(df, keyword): | |
# Filtra il dataset per la parola chiave indicata | |
df_filtered = df[df['keyword'].str.contains(keyword, case=False, na=False)] | |
if df_filtered.empty: | |
return ( | |
"Nessun articolo trovato con la parola chiave indicata.", | |
None, | |
None, | |
None, | |
pd.DataFrame() | |
) | |
# Distribuzione temporale (grafico interattivo degli anni) | |
df_year = df_filtered['anno_pubblicazione'].value_counts().sort_index() | |
fig_year = px.line( | |
x=df_year.index, | |
y=df_year.values, | |
labels={'x': 'Anno', 'y': 'Frequenza'}, | |
title=f'Ricorrenza della parola chiave "{keyword}" per anno' | |
) | |
# Frequenza degli autori (grafico interattivo degli autori) | |
df_authors = df_filtered['primo_autore'].value_counts() | |
fig_authors = px.bar( | |
x=df_authors.index, | |
y=df_authors.values, | |
labels={'x': 'Autori', 'y': 'Numero di articoli'}, | |
title=f'Autori che citano la parola chiave "{keyword}"', | |
) | |
fig_authors.update_layout(xaxis_tickangle=-45) | |
# Frequenza dei luoghi (grafico interattivo dei luoghi) | |
df_places = df_filtered['luoghi_citati'].dropna().str.split(',').explode().str.strip().value_counts() | |
fig_places = px.bar( | |
x=df_places.index[:10], # Mostra solo i primi 10 luoghi | |
y=df_places.values[:10], | |
labels={'x': 'Luoghi', 'y': 'Frequenza'}, | |
title=f'Luoghi citati in relazione alla parola chiave "{keyword}"' | |
) | |
fig_places.update_layout(xaxis_tickangle=-45) | |
# Tabella degli articoli associati alla parola chiave | |
table_columns = ['titolo_articolo', 'primo_autore', 'anno_pubblicazione', 'luoghi_citati'] | |
df_table = df_filtered[table_columns].reset_index(drop=True) | |
return fig_year, fig_authors, fig_places, df_table | |
# Funzione per creare l'interfaccia Gradio | |
def gradio_interface(): | |
dataset_path = "sa_dataset.csv" # Percorso del dataset hardcoded | |
df = pd.read_csv(dataset_path) # Carica il dataset | |
# Impostiamo l'interfaccia con layout verticale e grafici interattivi che occupano il 100% della larghezza | |
with gr.Blocks() as iface: | |
# Testata con input | |
with gr.Row(): | |
gr.Markdown("# Analisi della Parola Chiave") | |
keyword_input = gr.Textbox(label="Inserisci una parola chiave", placeholder="Inserisci una parola chiave per visualizzare i risultati") | |
# Grafici disposti verticalmente, ognuno al 100% della larghezza disponibile | |
with gr.Column(scale=100): | |
keyword_year_plot = gr.Plot() | |
keyword_authors_plot = gr.Plot() | |
keyword_places_plot = gr.Plot() | |
# Tabella articoli correlati | |
keyword_table = gr.Dataframe() | |
# Funzione collegata al campo di input | |
def update_output(keyword): | |
return keyword_analysis(df, keyword) | |
# Associa l'input con i grafici e la tabella | |
keyword_input.submit(update_output, inputs=keyword_input, outputs=[keyword_year_plot, keyword_authors_plot, keyword_places_plot, keyword_table]) | |
iface.launch(share=True) | |
gradio_interface() | |