Fonti di dati¶
pTabs può gestire dati in formato R, SPSS, PSPP, XPORT (SAS), CSV, Testo, Excel, Access, SQL Server e ODBC.
Metodi¶
Alcuni metodi (funzioni) sono comuni a più fonti di dati. Lo stesso metodo può accettare parametri differenti in relazione alla specifica fonte di dati.
Fonte dati Driver Estensione open save labels query R r rData X X X SPSS spss sav X X X X PSPP spss sav X X X X SAS xport xpt X X X ODBC odbc — X X X SQL Server sqlserver — X X X Excel 97-2003 excel xls X X X X Excel 2007-2010 excelx xlsx X X X X Access fino 2003 jet mdb X X X Access 2007-2010 ace accdb X X X Triple-S sss asc / sss X Testo fwf dat X X Nipo Odin odin dat / var X CSV csv csv X X X
Altri metodi specifici di alcuni formati sono specificati nella sezione relativa alla fonte di dati.
open¶
Carica una fonte di dati in un data frame e lo rende disponibile a pTabs.
Non è necessario specificare le estensioni dei file se si utilizzano quelle standard.
I dati vengono caricati in un data frame chiamato dfr.
Argomenti:
- filename: il nome del file da caricare
- :labels => name il nome del foglio/tabella contenente le etichette
E’ possibile controllare il modo in cui i nomi di variabili vengono caricati attraverso i parametri dot_to_underscore, underscore_to_dot e vars_to_lower_case.
.open!¶
Il metodo .open! seguito da un blocco permette di aprire il file, eseguire il blocco di istruzioni e salvare il file in formato R (nomefile._pt_.RData). Il file conterrà eventuali trasformazioni (variabili, etichette, ecc.) presenti nel blocco di istruzioni. Successive esecuzioni dello script caricheranno direttamente il file RData (se esiste) senza rieseguire il blocco di istruzioni.
Con il metodo .open? si puo forzare il caricamento del file originario, la riesecuzione del blocco e il salvataggio del file RData anche se già presente.
Con il metodo .open si ha invece un comportamento normale con caricamento del file originario ed esecuzione del blocco senza salvare il file RData.
1 2 3 4 5 6 | spss.open! 'dati' do
debug "------- inizio blocco eseguito solo se viene ricaricato il .SAV e non l'.RData"
excelx.labels 'labels2'
levels :sesso => ["M","F"]
debug "------- fine blocco"
end
|
save¶
Salva i dati del data frame attivo.
Argomenti:
- filename: il nome del file in cui salvare i dati
- :vars => [varlist]: l’elenco di variabili da salvare (:all esporta tutte le variabili)
- :id => :varname: ordina i record sulla variabile indicata
query¶
Interroga la fonte di dati e restituisce il risultato. Non carica la fonte di dati nel data frame attivo.
Argomenti:
- filename: il nome del file da interrogare
- :table => tablename: il nome della tabella o del foglio di cui restituire i dati
- :var => [varlist]: l’elenco di variabili da restituire
- :sql => string: la query SQL con cui interrogare i dati. E’ disponibile per tutte le fonti dati che supportano query, non solo per i database.
Specificando solo il nome del file e/o la tabella (per i database) viene restituito l’intero contenuto del file/tabella. :var permette di limitare il risultato a un sottoinsieme di variabili. Per query più complesse specificare una query SQL nel parametro :sql.
query restituisce un vettore se il risultato comprende una sola variabile oppure un vettore di vettori se sono state richieste più variabili.
1 2 3 4 5 6 7 | # fuori dal blocco del report
debug ptabs.new.excelx.query('aree')
#<Array> [["NO", "Nord Ovest", "1"], ["NE", "Nord Est", "2"], ["C", "Centro", "3"], ["SI", "Sud e Isole", "4"]]
# nel report
debug spss.query('labels', :sql => "select name from labels where code is null")
#<Array> ["Sesso", "area", "d1", "d5"]
|
Fonti di dati¶
R Data Frame¶
r gestisce dati in formato R.
Se il file contiene un data frame con un nome differente da dfr, è necessario specificarlo nel parametro :dframe.
1 2 3 4 5 | # apre un data frame R (.RData)
r.open "nome_file", :dframe => 'dati'
# salva il file aperto in formato R (.RData)
r.save "nome_file"
|
Metodi aggiuntivi:
- r.dump salva tutti i workspace.
- r.restore ripristina tutti i workspace.
SPSS System File¶
spss gestisce dati in formato SPSS.
Caricandi un file di dati SPSS, le variabili con almeno una value label vengono trasformate in factor. I livelli delle variabili factor vengono creati rispettando l’ordine dei codici della variabile SPSS, ma i codici originali vengono persi. Internamente, i livelli sono memorizzati con numeri interi progressivi che partono da 1.
Avvertimento
I codici delle variabili SPSS con value label devono essere numeri interi e non possono esserci etichette uguali.
Il codice 0 verrà convertito in 1 e i restanti codici verrano riscalati in avanti.
Sequenze di codici con salti verranno compressi in una sequenza di numeri interi progressivi e continui.
I valori mancanti definiti dal’utente (missing values) vengono trasformati in effettivi valori mancanti (system missing).
1 2 3 4 5 | # apre un file SPSS (.sav)
spss.open "nome_file"
# salva i dati in un file SPSS (.sav) ordinato per 'ser_no'
spss.save "nome_file", :id => :ser_no, :vars => [:sesso, :eta, :area, :ipf, :espcam, :espuni]
|
Suggerimento
ViewSav, a viewer for SPSS data files è un programma free particolarmente utile per visualizzare velocemente il contenuto dei file di dati SPSS.
Suggerimento
PSPP è un programma free che permette di creare e gestire file di dati SPSS.
GNU PSPP¶
PSPP (GNU PSPP) è un clone open-source di SPSS. Sebbene non supporti tutte le caratteristiche di SPSS, ha la stessa sintassi e scrive i dati nello stesso formato, pertanto valgono tutte le osservazioni e le istruzioni fornite per SPSS.
SAS Transport File¶
xport gestisce dati SAS esportati in formato Transport File (XPORT). Il file XPORT deve contenere un solo dataset.
I nomi delle variabili vengono convertiti in minuscolo.
E’ necessario aver installato la libreria R SASxport.
1 2 3 4 5 | # apre un file xport (.xpt)
xport.open "nome_file"
# salva i dati in un file XPORT (.xpt)
xport.save "nome_file", :vars => [:sesso, :eta, :area, :ipf, :espcam, :espuni]
|
Triple-S¶
sss gestisce dati in formato Triple-S.
Oltre al file di dati, è necessario specificare anche il file contenente i metadati Triple-S. Le estensioni predefinite sono .asc per i dati e .sss per i metadati.
E’ possibile specificare il carattere di separazione che viene utilizzato per generare le variabili delle domande a risposta multipla. Il carattere predefinito è _.
E’ necessario aver installato la libreria R sss.
Argomenti aggiuntivi:
- :sep => "_" carattere di separazione per nomi variabili multiple
1 2 3 4 5 | # legge i file survey.asc e survey.sss
sss.open "survey"
# specifica i file con le estensioni e il carattere di separazione per le multiple
sss.open "survey2.dat", "survey2.xml", sep="."
|
Testo¶
fwf gestiscve dati in file ASCII in formato fisso (Fixed Width Format). L’elenco delle variabili e delle posizioni viene passato al parametro :data come vettore di stringhe. [1] Le variabili alfanumeriche vengono convertite di default in factor. Per caricarle come caratteri (per esempio per i dati anagrafici) specificare il formato :a. Gli allineamenti non sono rilevanti.
Argomenti aggiuntivi:
- :nrows => # massimo numero di righe da leggere (default -1, tutte).
- :buffer => # massimo blocco di righe da leggere (default 2000). Un numero basso diminuisce l’uso di memoria, ma aumenta il tempo di lettura.
- :as_num determina se le variabili factor devono essere convertite in variabili numeriche (true, il default), oppure se devono essere salvate le etichette al posto dei codici (false).
- :vars => [varlist] specifica l’elenco delle variabili (:all esporta tutte le variabili).
- :id => :varname specifica una variabile su cui ordinare i dati.
E’ necessario aver installato la libreria R ffbase.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # apre un file di testo (.dat)
fwf.open "nome_file", :data => %w(
ser_no 1-4
area 5
sesso 6
eta 9-10
titolo 11
prof 12-13
d1 15
d2 16
d5 17
nome 50-59 :a
cognome 60-69 :a
indirizzo 70-99 :a
)
fwf.open "nome_file", :data => %w(ser_no 1-4 area 5 d1 15 d5 17 cognome 60-69 :a)
fwf.save "nome_file", :id => :ser_no, :vars => [:sesso, :eta, :area, :ipf, :espcam, :espuni], :as_num => false
|
File delimitati: CSV¶
csv .gestisce dati in formato delimitato.
La prima riga del file deve contenere i nomi delle variabili.
Con csv.save, oltre al file dei dati, viene salvato anche un secondo file (viene aggiunto il suffisso _labels) con le etichette delle variabili.
Argomenti aggiuntivi:
- :as_num determina se le variabili factor devono essere convertite in variabili numeriche (true, il default), oppure se devono essere salvate le etichette al posto dei codici (false).
- :vars => [varlist] specifica l’elenco delle variabili (:all esporta tutte le variabili).
- :id => :varname specifica una variabile su cui ordinare i dati.
- :sep => "c" o :s => "c" specifica il separatore di campo (default ,).
- :dec => "c" o :d => "c" specifica il separatore dei decimali (default .).
Le varianti csv1 e csv2, impostano automaticamente i separatori come :s=>',', :d=>'.' (csv1) e :s=>';', :d=>',' (csv2).
1 2 3 | csv.open "nome_file", :sep => ';', :dec => '.'
csv1.open "nome_file"
csv2.save "nome_file", :id => :ser_no, :vars => [:sesso, :eta, :area, :ipf, :espcam, :espuni]
|
Excel 97-2003¶
excel gestisce file Excel nel formato 97-2003 (.xls).
Il file deve contenere i nomi delle variabili nella prima riga del foglio di lavoro. Se non viene specificato il nome del foglio di lavoro, si assume che il nome sia uguale al nome del file.
Con excel.save, oltre al foglio dei dati, viene salvato anche un secondo foglio con le etichette delle variabili.
Argomenti aggiuntivi:
- :as_num determina se le variabili factor devono essere convertite in variabili numeriche (true, il default), oppure se devono essere salvate le etichette al posto dei codici (false).
- :codebook determina se esportare anche un foglio con le etichette delle variabili (true, il default).
- :names => :name|:label|:both determina l’intestazione delle colonne: :name il nome della variabile (il default); :label l’etichetta della variabile; :both entrambe.
- :vars => [varlist] specifica l’elenco delle variabili (:all esporta tutte le variabili).
- :id => :varname specifica una variabile su cui ordinare i dati.
1 2 3 4 5 | # apre un file Excel (.xls)
excel.open "nome_file", :sheet => "nome_foglio"
excel.save "nome_file", :id => :ser_no, :vars => [:sesso, :eta, :area, :ipf, :espcam, :espuni],
:sheet => "nome_foglio", :as_num => false
|
Excel 2007¶
excelx gestisce file Excel nel formato 2007-2010 (.xlsx).
Ha la stessa sintassi di excel.
1 2 | excelx.open "nome_file", :sheet => "nome_foglio"
excelx.save "nome_file", :id => :ser_no, :vars => :all
|
Access: jet¶
jet gestisce file Access nel formato 2003. [2]
E’ possibile specificare la tabella da aprire oppure la query SQL.
Argomenti aggiuntivi:
- :uid => login il nome dell’account per l’accesso al database
- :pwd => password la password per l’accesso al database
- :table => table_name il nome della tabella (se non usato sql)
- :sql => sql_string la stringa di istruzioni in linguaggio SQL (se non usato table)
1 2 3 4 | # apre un file Access formato 2003 (.mdb)
jet.open "nome_file", :table => "nome_tabella"
jet.open "nome_file", :table => "nome_tabella", :uid => "login", :pwd => "password"
jet.open "nome_file", :sql => "SELECT * FROM nome_tabella"
|
Access: ace¶
ace gestisce file Access nel formato 2007-2010. [3]
E’ possibile anche aprire file Access nel formato 2003 specificando l’estensione nel nome del file.
Ha la stessa sintassi di jet.
1 2 3 4 5 6 7 | # apre un file Access formato 2007-2010 (.accdb)
ace.open "nome_file", :table => "nome_tabella"
ace.open "nome_file", :table => "nome_tabella", :uid => "login", :pwd => "password"
ace.open "nome_file", :sql => "SELECT * FROM nome_tabella"
# apre un file Access formato 2003 (.mdb)
ace.open "nome_file.mdb", :table => "nome_tabella"
|
Origine dati ODBC¶
odbc gestisce origini dati ODBC.
E’ possibile specificare la tabella da aprire oppure la query SQL.
Argomenti aggiuntivi:
- dsnname il Database Source Name (DSN) registrato sul computer
- :uid => login il nome dell’account per l’accesso al database
- :pwd => password la password per l’accesso al database
- :table => table_name il nome della tabella (se non usato sql)
- :sql => sql_string la stringa di istruzioni in linguaggio SQL (se non usato table)
E’ possibile specificare la tabella da aprire oppure la query SQL.
1 2 3 | # apre un'origine dati ODBC
odbc.open "nome_DSN", :uid => "login", :pwd => "password", :table => "nome_tabella"
odbc.open "nome_DSN", :uid => "login", :pwd => "password", :sql => "SELECT * FROM nome_tabella"
|
SQL Server¶
sqlserver gestisce database Microsoft SQL Server.
E’ possibile accedere al database tramite un DSN registrato oppure direttamente fornendo il nome del server e il nome del database.
E’ possibile specificare la tabella da aprire oppure la query SQL.
Argomenti aggiuntivi:
- dsnname il Database Source Name (DSN) registrato sul computer
- :uid => login il nome dell’account per l’accesso al database
- :pwd => password la password per l’accesso al database
- :server => server_name il nome del server (se non usato dsnname)
- :db => database_name il nome del database (se non usato dsnname)
- :table => table_name il nome della tabella (se non usato sql)
- :sql => sql_string la stringa di istruzioni in linguaggio SQL (se non usato table)
Metodi aggiuntivi:
- sqlserver.config permette di configurare i parametri di accesso al database per non ripeterli successivamente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # apre una tabella di un database SQLServer
sqlserver.open "nome_DSN", :uid => "login", :pwd => "password", :table => "nome_tabella"
sqlserver.open "nome_DSN", :uid => "login", :pwd => "password", :sql => "SELECT * FROM nome_tabella"
# configura l'accesso a un database SQLServer
sqlserver.config(
:server => 'PCNAME\SQLSERVER',
:db => 'DATABASE',
:uid => 'login',
:pwd => 'password'
)
# esegue una query su una tabella di un database SQLServer
debug sqlserver.query(:sql => "select InterviewNumber ResponseCode Status DisplayField1 from SampleA0123 where status > 0")
|
Nipo ODIN¶
IN TEST
odin gestisce dati in file ASCII in formato fisso generato da un questionario NIPO ODIN.
Oltre al file di dati, deve essere presente anche il file contenente la descrizione delle fariabili in formato Diana. Le estensioni predefinite sono .dat per i dati e .var per i metadati.
Le variabili multiple (*MV) vengono definite come set di variabili multiple, complete di titolo, durante la lettura del file di dati, pertanto si sconsiglia l’utilizzo dell’istruzione sets.find.
Argomenti aggiuntivi:
- :nrows => # massimo numero di righe da leggere (default -1, tutte).
- :buffer => # massimo blocco di righe da leggere (default 2000). Un numero basso diminuisce l’uso di memoria, ma aumenta il tempo di lettura.
- :maxcols => # limita le variabili caricate alle prime N colonne specificate
- :nolabels => true non carica le etichette delle variabili (default false)
- :skiptek => true non legge le variabili alfanumeriche (default true)
- :var => 'filename' nome del file VAR. Se non specificato viene usato lo stesso nome del file di dati
E’ necessario aver installato la libreria R ffbase.
1 2 | odin.open "survey.dat"
odin.open "survey.dat", :var => "survey01" :buffer => 50
|
Etichette¶
Importando dati Excel, Access, ODBC, csv o di testo, le variabili sono prive di etichette, pertanto dopo l’importazione devono essere etichettate. Le variabili categoriali rappresentate da codici numeriche [4] devono essere convertite in factor.
1 2 3 4 5 6 7 8 9 10 | excel.open "nome_file_dati", :sheet => "nome_foglio_dati"
label :d6_1 => "Appuntamento irrinunciabile",
:d6_2 => "Evadere dalla routine quotidiana",
:d6_3 => "Imparare nuove cose"
factor :sesso => ["SESSO", {1 => "M", 2 => "F"}],
:area => ["AREA GEOGRAFICA", ["NO", "NE", "C", "S"]],
:d1 => ["Dom 1", ["A","B","C","D"]],
:d5 => ["Dom 5", ["A","B","C","D","E"]]
|
In alternativa è possibile utilizzare una tabella di etichette che può essere contenuta nello stesso file Excel o nello stesso database che contiene i dati oppure in un file o database differente.
La tabella delle etichette deve essere nel seguente formato:
name | code | label |
---|---|---|
d1 | Etichetta variabile d1 | |
d1 | 1 | Etichetta codice 1 variabile d1 |
d2 | 2 | Etichetta codice 2 variabile d1 |
d2 | 0 | Etichetta variabile d2 |
d2 | 1 | Etichetta dice 1 variabile d2 |
... | ... | ... |
In corrispondenza dell’etichetta della variabile, il campo code può essere lasciato vuoto o posto uguale a zero.
La tabella può contenere anche solo le etichette di un sottoinsieme di variabili o specificare le etichette della variabile e non quella dei suoi livelli o viceversa. I livelli di una singola variabile devono essere invece specificati in modo completo. Un eventuale livello mancante determina lo sfasamento delle etichette dei livelli successivi.
1 2 3 | excel.open "nome_file", :sheet => "nome_foglio_dati", :labels => "nome_foglio_etichette"
access.open "nome_file", :table => "nome_tabella_dati", :labels => "nome_tabella_etichette"
odbc.open "nome_DSN", :uid => "login", :pwd => "password", :sql => "SELECT * FROM nome_tabella", :labels => "nome_tabella_etichette"
|
Se le etichette sono in un file differente, utilizzare il metodo labels dell’oggetto sorgente di dati.
1 2 3 4 5 | excel.open "nome_file_dati", :sheet => "nome_foglio_dati"
excel.labels "nome_file", :sheet => "nome_foglio_etichette"
access.open "nome_file_dati", :table => "nome_tabella_dati"
access.labels "nome_file_dati", :table => "nome_tabella_etichette"
|
Usando file separati, le etichette possono risiedere anche in un file di formato diverso. [5] text e sss non hanno un metodo labels.
1 2 3 4 5 | fwf.open "nome_file", :data => %w(ser_no 1-4 area 5 d1 15 d5 17 cognome 60-69 :a)
csv.labels "nome_file"
excel.open "nome_file_dati", :sheet => "nome_foglio_dati"
spss.labels "nome_file"
|
Note
[1] | %w(...) crea un vettore di stringhe senza la necessità di usare le virgolette e separare gli elementi con la virgola. |
[2] | Solo con R a 32 bit, ma sia con la versione a 32 bit di Microsoft Office, sia con la versione a 64 bit. |
[3] | Solo se la versione di R e di Microsoft Office corrisponde, cioè se sono entrambi a 32 bit o entrambi a 64 bit. |
[4] | Non è opportuno utilizzare dati contenenti le etichette al posto dei codici, in quanto i livelli delle variabili factor create automaticamente dalla procedura di importazione verrebbero ordinati alfabeticamente. |
[5] | Una tabella di etichette può essere utilizzata anche per un file SPSS in sostituzione oppure a integrazione o correzione delle etichette del system file SPSS. |