Spaces:
Running
Running
paolodegasperis
commited on
Commit
·
f557ed7
1
Parent(s):
e53b20e
Add application file
Browse files
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()
|