Conclusioni
In questo lavoro di tesi abbiamo analizzato i requisiti fondamentali per lo sviluppo di una metafora grafica per il sistema KDDML. Abbiamo fornito inoltre una serie di spunti su cui riflettere per la realizzazione della Gui prestando particolare attenzione sia all’usabilità che all’efficacia del processo di composizione della query.
L’implementazione fornita per tale interfaccia realizza le funzionalità descritte nei capitoli 4-5 ma in ogni caso restano una serie di problematiche aperte che potranno eventualmente essere affrontate in futuro con una espansione del sistema grafico.
In definitiva possiamo affermare che attraverso l’introduzione della GUI e più in generale di una metafora grafica per la rappresentazione di query KDD, l’interazione con il sistema KDDML è sicuramente migliorata. Infatti tramite un’interfaccia “abbastanza” user-friendly, ora è possibile formulare query sfruttando le potenzialità espressive di una “visualizzazione a grafo”, caricare e/o salvare query e sotto-query senza perdita di informazioni, validare uno schema e ridurre sensibilmente la possibilità di introdurre degli errori nel processo di costruzione delle query. Precisiamo che tutte le funzionalità offerte sono “impermeabili” rispetto al numero ed al tipo di operatori presenti nel sistema KDDML. Vale a dire che nel caso in cui il sistema KDDML fosse ampliato, l’interfaccia grafica non risentirebbe di tale cambiamento poichè tutte le informzioni relative al tipo ad al numero di operatori, parametri ed algoritmi, vengono recuperati dinamicamente dai livelli Interpreter, Operators e Repository di KDDML (per le modalità di espansione del sistema vedi [TESI_1]).
Come dicevamo prima però, nonostante crediamo che sia stato fatto un grande
che prima di avere una GUI era necessario scrivere le query in forma testuale senza alcun aiuto dal sistema), crediamo che il sistema grafico possa essere ancora migliorato di molto in alcuni punti e pensiamo che sarebbero necessarie ulteriori modifiche per renderlo maggiormente efficiente.
Consideriamo ad esempio la possibilità di marcare con breakpoint i nodi del grafo. Un simile funzionalità rappresenta sicuramente un ulteriore aiuto per chi interagisce con il sistema. Ad oggi l’implementazione attuale fornisce soltanto la possibilità di marcare un solo nodo del grafo (query) con un breakpoint. Ciò significa che è possibile effettuare l’esecuzione parziale solamente di una sotto query per volta. Sarebbe interessante fornire all’utente la possibilità di interagire con la GUI sfruttando la possibilità di marcare la query con breakpoint successivi in maniera tale da visualizzare i risutati ottenuti ad ogni passo. Naturalmente, come evidenziato nei capitoli precedenti, questo tipo di soluzione ha senso solo se stiamo parlando di dataset abbastanza piccoli. In caso contrario infatti l’esecuzione parziale di una query prenderebbe così tanto tempo che la possibilità di visualizzazione di risultati parziali non sarebbe in anlcun modo rilevante.
Un ulteriore miglioramento si può ottenere cercando di guidare l’utente anche nella correzione degli errori. Infatti, ad oggi, il sistema grafico non fa altro che segnalare all’utente la tipologia e la posizione degli errori all’interno dello schema. Sarebbe molto utile fornire a chi interagisce con la GUI un modo per riportare automaticamente il focus all’operatore che ha generato l’errore al passo di validazione. Crediamo che questa modifica possa essere effettuata senza compromettere l’attuale strutturazione del sistema grafico. In maniera molto sintetica, e facendo riferimento ai package descritti nel capitolo precedente, basterebbe aggiungere un dialog box nel package DialogBox che contiene una lista degli errori ed i riferimenti all’operatore che li ha generati.
Quindi non è necessario toccare in alcun modo la parte del sistema che effettua
la funzionalità di validazione ma soltanto inserire un meccanismo guida nella
correzione degli erorri.
Ultima osservazione per ciò che riguarda un possibile sviluppo futuro riguarda
la possibilità di inserire in parallelo alla formulazione della query visuale, una
query testuale. Sarebbe uno strumento abbastanza potente per gli utenti più
esperti che vogliono formulare una parte di una query complessa scrivendo “a
mano” il comportamento dello schema. Questo però non è così immediato come
sembrerebbe. Infatti sarebbe necessario riflettere tutte le modifiche effettuate
sulla query dall’editor testuale in forma grafica e viceversa. Consideriamo
questo passaggio abbastanza delicato e, se ci saranno ulteriori sviluppi, chi si
occuperà di tale espansione dovrà fare attenzione all’integrazione di un tale
strumento di input di testo.
Ringraziamenti
Il mio primo pensiero va ai miei genitori che mi hanno accudito, confortato e sostenuto durante tutta la carriera universitaria. Grazie mamma e papà per tutto quello che non mi viene in mente perchè troppo scontato.
Grazie a Marry che con i suoi sorrisi e con i suoi abbracci mi ha dato e mi da nuove energie per superare i momenti difficili.
Grazie a Maria Teresa ed Ilario per la calma che mi trasmettono ogni volta che torno a casa.
Ringrazio i miei nonni Teresa e Romeo che mi sono vicini con la preghiera dal Cielo. Grazie ai miei nonni Alfonso e “Angelina” che mi accompagnano costantemente in tutto ciò che faccio con tanta preoccupazione quanto amore.
Un ultimo pensiero va agli amici che hanno accompagnato con allegria e
simpatia le “nottate pisane” durante questi anni.
Appendice
In questa appendice viene mostrato un breve tutorial utile per l’utilizzo dell’interfaccia grafica e del sistema KDDML.
KDDML User Interface
Introduzione
L’interfaccia grafica realizzata per KDDML si pone come un vero e proprio front-end tra il sistema che permette una programmazione del processo di scoperta dei dati e l’utente.
Naturalmente lo scopo dell’interfaccia grafica è quello di agevolare l’interazione tra sistema e utilizzatore del sistema. Per questo motivo, è stata realizzata un’infrastruttura che cerca di guidare, sia da un punto di vista grafico che logico, la stesura di uno schema che rappresenti l’estrazione di conoscenza da dati grezzi.
L’interfaccia quindi, sotto questo punto di vista, allarga il raggio d’azione del sistema KDDML ad un maggior numero di utenti, mettendo da parte quella conoscenza specifica del linguaggio di markup KDDML che prima dello sviluppo della GUI era necessario per la sottomissione di query all’interprete del sistema.
Nelle sezioni successive si cercherà di fornire una breve ma esaustiva guida per
l’utilizzo del front-end grafico per chiarire in che modo avviene l’interazione
con la GUI di KDDML.
Struttura della GUI
Quando si avvia l’interfaccia del sistema si apre una finestra come quella mostrata in figura 1. Come si nota dalla figura, il frame principale è suddiviso in più parti ognuna con una propria funzionalità. Chiaramente al primo avvio si parte da un progetto vuoto e quindi è necessario iniziare a comporre una query KDD legando insieme i vari elementi grafici messi a disposizione del sistema.
Con riferimento alla figura 1, cerchiamo di capire meglio la struttura dell’interfaccia:
(1) il pannello indicato con il numero “1” contiene una lista di operatori che sono rappresentati da un’icona, che in qualche modo sintetizza le funzionalità dell’operatore, ed un testo che è il nome dell’operatore nel linguaggio KDDML.
Questo pannello in seguito verrà chiamato OperatorsPanel.
\
(2) Status bar. Come ogni status bar, quella indicata con il numero “2”
riflette ogni azione che il sistema grafico sta intraprendendo. Quando viene avviata l’applicazione, come nel caso di figura 1, la status bar invita l’utente ad iniziare la composizione della query grafica.
Naturalmente a seconda dell’azione intrapresa dall’utente il messaggio di stato cambierà.
(3) Quello indicato dal numero ”3” è il canvas (o pannello) principale in
cui viene rappresentata la query grafica. È a partire dalle
manipolazioni sugli elementi presenti in questo pannello che si
fornisce uno schema per le query KDD.
figura 1: aspetto della GUI quando viene avviata
(4) Il pannello “4” è una toolbar. Sulla toolbar dell’interfaccia di
KDDML sono presenti le principali funzionalità fornite dal sistema
grafico. Se prendiamo come riferimento la figura 1 notiamo che tutti
i pulsanti della toolbar sono disabilitati poiché non è presente alcun
elemento grafico. Quando l’utente inserisce il primo operatore
vengono abilitati i pulsanti compatibili con le operazioni da
effettuare. Si noti che l’unica possibilità offerta all’utente a partire da
un progetto vuoto, è quella di caricare una query precedentemente
salvata.
(5) Nel pannello contrassegnato con il numero “5” sono rappresentate tutte le fasi del processo di KDD. Man mano che si procede con la composizione della query vengono mostrate solamente le fasi accessibili a partire da quella corrente, infatti come si può notare, a partire dalla configurazione iniziale con nessun operatore inserito nello schema, è possibile accedere solamente agli operatori chiamati di Data-Source. Chiariremo in seguito il meccanismo di selezione della fase di un operatore. Per maggiore chiarezza chiameremo questa parte dell’interfaccai grafica PhasePanel.
Inserimento di un operatore
L’inserimento di un operatore per comporre una query è sicuramente la funzionalità principale dell’interfaccia grafica.
Diciamo subito che esistono due modalità differenti di inserimento di un operatore KDDML. Se si vuole inserire un operatore che provvede al caricamento di un dataset, basta semplicemente selezionare con il mouse l’operatore nel pannello OperatorsPanel e con un doppio click del mouse automaticamente l’elemento grafico viene aggiunto nel grafo della query.
Precisiamo che quando si inserisce un operatore di data source questo è un nodo completamente scollegato nel grafo della query. Solo al passo successivo è possibile collegarlo ad un nodo con esso compatibile 1 .
Quando si desidera inserire un operatore che appartiene ad una fase del processo KDD differente da quella di “Data-Source” è necessario effettuare un procedimento differente.
In questo caso infatti l’utente deve:
1) selezionare l’elemento grafico a cui desidera collegare l’operatore;
1