paolodegasperis commited on
Commit
f557ed7
·
1 Parent(s): e53b20e

Add application file

Browse files
Files changed (1) hide show
  1. app.py +84 -0
app.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import plotly.express as px
3
+ import gradio as gr
4
+
5
+ # Funzione per l'analisi della parola chiave
6
+ def keyword_analysis(df, keyword):
7
+ # Filtra il dataset per la parola chiave indicata
8
+ df_filtered = df[df['keyword'].str.contains(keyword, case=False, na=False)]
9
+
10
+ if df_filtered.empty:
11
+ return (
12
+ "Nessun articolo trovato con la parola chiave indicata.",
13
+ None,
14
+ None,
15
+ None,
16
+ pd.DataFrame()
17
+ )
18
+
19
+ # Distribuzione temporale (grafico interattivo degli anni)
20
+ df_year = df_filtered['anno_pubblicazione'].value_counts().sort_index()
21
+ fig_year = px.line(
22
+ x=df_year.index,
23
+ y=df_year.values,
24
+ labels={'x': 'Anno', 'y': 'Frequenza'},
25
+ title=f'Ricorrenza della parola chiave "{keyword}" per anno'
26
+ )
27
+
28
+ # Frequenza degli autori (grafico interattivo degli autori)
29
+ df_authors = df_filtered['primo_autore'].value_counts()
30
+ fig_authors = px.bar(
31
+ x=df_authors.index,
32
+ y=df_authors.values,
33
+ labels={'x': 'Autori', 'y': 'Numero di articoli'},
34
+ title=f'Autori che citano la parola chiave "{keyword}"',
35
+ )
36
+ fig_authors.update_layout(xaxis_tickangle=-45)
37
+
38
+ # Frequenza dei luoghi (grafico interattivo dei luoghi)
39
+ df_places = df_filtered['luoghi_citati'].dropna().str.split(',').explode().str.strip().value_counts()
40
+ fig_places = px.bar(
41
+ x=df_places.index[:10], # Mostra solo i primi 10 luoghi
42
+ y=df_places.values[:10],
43
+ labels={'x': 'Luoghi', 'y': 'Frequenza'},
44
+ title=f'Luoghi citati in relazione alla parola chiave "{keyword}"'
45
+ )
46
+ fig_places.update_layout(xaxis_tickangle=-45)
47
+
48
+ # Tabella degli articoli associati alla parola chiave
49
+ table_columns = ['titolo_articolo', 'primo_autore', 'anno_pubblicazione', 'luoghi_citati']
50
+ df_table = df_filtered[table_columns].reset_index(drop=True)
51
+
52
+ return fig_year, fig_authors, fig_places, df_table
53
+
54
+ # Funzione per creare l'interfaccia Gradio
55
+ def gradio_interface():
56
+ dataset_path = "sa_dataset.csv" # Percorso del dataset hardcoded
57
+ df = pd.read_csv(dataset_path) # Carica il dataset
58
+
59
+ # Impostiamo l'interfaccia con layout verticale e grafici interattivi che occupano il 100% della larghezza
60
+ with gr.Blocks() as iface:
61
+ # Testata con input
62
+ with gr.Row():
63
+ gr.Markdown("# Analisi della Parola Chiave")
64
+ keyword_input = gr.Textbox(label="Inserisci una parola chiave", placeholder="Inserisci una parola chiave per visualizzare i risultati")
65
+
66
+ # Grafici disposti verticalmente, ognuno al 100% della larghezza disponibile
67
+ with gr.Column(scale=100):
68
+ keyword_year_plot = gr.Plot()
69
+ keyword_authors_plot = gr.Plot()
70
+ keyword_places_plot = gr.Plot()
71
+
72
+ # Tabella articoli correlati
73
+ keyword_table = gr.Dataframe()
74
+
75
+ # Funzione collegata al campo di input
76
+ def update_output(keyword):
77
+ return keyword_analysis(df, keyword)
78
+
79
+ # Associa l'input con i grafici e la tabella
80
+ keyword_input.submit(update_output, inputs=keyword_input, outputs=[keyword_year_plot, keyword_authors_plot, keyword_places_plot, keyword_table])
81
+
82
+ iface.launch(share=True)
83
+
84
+ gradio_interface()