Elementi di statistica con R e i database
Elementi di statistica con R e i database Rocco De Marco rocco. demarco(a)an. ismar. cnr. it Ancona, 19 Aprile 2012 Lezione 4
Il flusso dei dati Produzione dati (misurazione, campionamento, etc. ) Archiviazione dati grezzi Validazione dei dati Elaborazione Archiviazione dati elaborati Reportistica
Perché usare i database • Archivio centralizzato = Minore rischio di perdita dei dati Maggiore disponibilità Nuove possibilità di elaborazione Condivisione dei dati a livello di gruppo Possibilità di creare applicazioni ad hoc per il flusso dei dati • Interoperabilità • • •
Vantaggi di R • Utilizzo di strumenti e librerie di calcolo più evolute • Distinzione dei ruoli e delle fasi di elaborazione • Possibilità di utilizzare un determinato programma indefinite volte • Possibilità di sviluppo del programma in team
Vantaggi con R e Database • Automatizzazione dei processi • Possibilità di stabilire delle regole di accesso, di rappresentazione e di utilizzo dei dati • Riusabilità dei lavori pregressi • Interoperabilità in progetti in cui partecipano altri soggetti
Menù del giorno • Usare R per importare dati in formato CSV su Database, condito con esempi • Un esempio di validazione dei dati • Selezionare i dati da importare • Generazione automatica di una relazione partendo da dati archiviati su database Nota: gli esempi sono disponibili sul sito www. ismar. cnr. it → Organizzazione → Sedi UOS → Ancona → Formazione
Importare i dati su db • Esempio della scuola – Registro scolastico che abbraccia più studenti, con voti su distinte materie nell'arco di più anni – I dati sono in origine presenti su un foglio excel, poi salvato in formato csv (voti_scuola. csv) – I dati saranno importati su db, in seguito faremo ulteriori elaborazioni
Fasi Operative Predisporre una connessione ODBC → Lezione 2 Installare il pacchetto RODBC install. packages() → cerco Rodbc Caricare la libreria RODBC in R library(RODBC) A questo punto siamo pronti per iniziare
csv 2 db (da csv a db) 1) 2) 3) 4) 5) Leggo il csv e lo carico su un data. frame Avvio la libreria RODBC Apro la connessione con il db Salvo il data. frame su DB Chiudo la connessione con il db (importante) t<-read. table("voti_scuola. csv", header=T, sep="; ", dec=". ") library(RODBC) db<-odbc. Connect("source 1", case="postgresql") sql. Save(db, t, tablename="registro_scuola") close(db)
Un esempio di validazione • Il modello di riferimento prevede che: • I dati sono già disponibili in una tabella del db • I dati vengono elaborati con R • I dati validati vengono memorizzati su una nuova tabella del db • Nel nostro esempio: • Abbiamo una tabella con due colonne: x e deviazione standard di x • Fissata una soglia per la deviazione standard, andremo a filtrare i dati e a memorizzare i risultati su una nuova tabella
L'esempio • L'esempio viene generato usando direttamente R, usando la funzione rnorm() → vedi help(rnorm) library(RODBC) x<-rnorm(500, 5, 4) dati<-data. frame(x=x) dati$dist. Mean=abs(x)-mean(x)) db<-odbc. Connect(“source 1”, case=”postgresql”) sql. Save(db, dati, tablename=”da_validare”) close(db)
• Con phppgadmin verifichiamo l'avvenuto caricamento dei dati (http: //dev. an. ismar. cnr. it/phppgadmin/) • Per leggere i dati dal database e memorizzarli su un data. frame: db<-odbc. Connect(“source 1”, case=”postgresql”) dati_letti<-sql. Fetch(db, ”da_validare”) close(db)
• I passi per il filtraggio: • I nostri dati sono caricati sul dataframe dati_letti • Al momento, con i dati a disposizione, la deviazione standard è circa 4. • La colonna “dist. Mean” contiene la distanza assoluta dell'elemento xi dalla media • Fissiamo un valore massimo di questa distanza soglia • Creiamo un nuovo data. frame con i dati che superano il filtro • Salviamo il data. frame su una nuova tabella nel database (dati_Validati)
Il listato completo library(ODBC) db<-odbc. Connect(“source 1”, case=”postgresql”) # leggo i dati: dati_letti<-sql. Fetch(db, ”da_validare”) # filtraggio: distanza_max<-3 soglia<-mean(dati_letti$x)+distanza_max validati<-subset(dati_letti, dati_letti$dist. Mean<soglia) # salvo i dati su db: sql. Save(db, validati, tablename=”validati”) close(db)
Selezionare dati con sql • La funzione sql. Fetch non va utilizzata con tabelle eccessivamente grandi • Quello che finora è stato fatto con la funzione subset di R può essere fatto con l'istruzione SELECT del linguaggio SQL • Con la SELECT è possibile mettere in correlazione più tabelle, con sql. Fetch NO
SELECT con R • Comando equivalente di sql. Fetch: v<-sql. Query(db, ”select * from registro_scuola”) • Selezionare specifiche colonne: v<-sql. Query(db, ”select cognome, italiano from registro_scuola”) • Selezionare righe condizioni: v<-sql. Query(db, ”select * from registro_scuola where anno=2008”) • Possibilità di ordinamento: v<-sql. Query(db, ”select * from registro_scuola order by cognome, nome”)
Relazione con db • Riutilizziamo l'esempio finale della lezione 3: • Importiamo, con una sql. Save, il foglio cdv chiamato “dati 2. csv” • Memorizziamo i dati sul database, in una tabella chiamata dati_relazione • Modifichiamo il programma distribuzione. r in modo da prelevare i dati da db
La modifica • La modifica necessaria per far funzionare il programma è minima. Al posto della read. table vanno inserite le seguenti righe: library (RODBC) db<-odbc. Connect(“source 1”, case=”postgresql”) tabella<-sql. Fetch(db, ”dati_relazione”) close(db). . .
Nota sui documenti word • I documenti word generati da file html NON includono le immagini nel file • Ricordarsi di copiare nella stessa cartella del documento word tutte le immagini necessarie, generate dal programma R
Spunti per il futuro • Realizzazione struttura database di istituto, con ridondanza • Definizione di un percorso formativo/informativo a livello di sede • Utilizzo di strumenti informatici di supporto: – Piattaforma redmine – Subversion – Wiki, etc.
- Slides: 22