paolodegasperis
Add application file
f557ed7
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()