20 maggio 2010

Grafici in PostgreSQL con R

Nel precedente post ho evidenziato le possibilità di integrazione di R in PostgreSQL, con un esempio sull'esecuzione di un test statistico per la normalità, direttamente nel db.
In questo breve post, faccio un altro esempio per la creazione di un grafico mediante un'opportuna funzione. Anche in questo caso, il motore di creazione dei grafici è R, eseguito in background mediante il linguaggio PL/R. Le potenzialità di questo metodo di lavoro sono evidenti: in Postgres è direttamente disponibile una vastissima gamma di grafici di alto livello.
Ovviamente ciò non significa che, in seguito alla chiamata della funzione, verrà visualizzato il grafico a video. L'esecuzione della procedura, invece, andrà a creare un grafico (nel mio caso, un file jpeg) in un'opportuna cartella.
Il codice per la creazione della funzione è il seguente e penso sia abbastanza immediato per gli utenti di R.

CREATE OR REPLACE FUNCTION createGraph(tb text)
RETURNS text AS
'
sql<-paste("select * from", tb)
rs<-pg.spi.exec(sql)
x<-rs[,1]
y<-rs[,2]
jpeg("graph.jpg")
plot(x,y)
dev.off()
print("done")
'
LANGUAGE 'plr';


L'utente dovrà successivamente scegliere un'opportuna tabella contenente dati da visualizzare in un grafico a due dimensioni. I dati saranno quelli contenuti in due specifici campi. Quindi, per esempio, la chiamata della funzione:

SELECT createGraph('tbOrdini');


andrà a creare un file jpg, contenente il grafico che in R visualizzo con il comando plot(x,y). Sottolineo che la directory di default in cui viene salvato il file è la cartella '...\PostgreSQL\8.X\data'. Ovviamente, è possibile cambiare il percorso in cui salvare il file .jpg, specificandolo nel comando jpeg (utilizzato in PL/R), ma questo potrebbe comportare qualche problema agli utenti Vista, nel caso dell'eventuale assenza di permessi in scrittura.
Ovviamente, l'esempio è volutamente semplice, ma può essere personalizzato ed esteso a situazioni più complesse.

Nessun commento: