Metadati¶
Alcune fonti si dati (xlsx, csv, test, ...) non supportano le etichette o altri metadati, pertanto dopo l’importazione le variabili devono essere etichettate.
In altri casi le etichette presenti nel file di dati non sono quelle desiderate e devono essere integrate o modificate.
label¶
L’istruzione label permette di definire le etichette delle variabili.
1 2 3 4 5 6 | excel.open "nome_file_dati", :sheet => "nome_foglio_dati"
label :sesso => "Sesso"
label :eta => "Eta'"
label :area => "Area geografica"
label :d5 => "Le piace...?"
|
Vedi Variabili: etichette e livelli per ulteriori funzioni per la gestione delle etichette delle variabili.
levels¶
L’istruzione levels permette di definire le etichette dei livelli delle variabili.
1 2 3 4 | levels :sesso => { 1=>"Maschio", 2=>"Femmina" }
levels :area => { 1=>"Nord Ovest", 2=>"Nord Est", 3=>"Centro", 4=>"Sud" }
levels :d1 => { 1=>"una volta alla settimana o più spesso", 2=>"una volta ogni due settimane", 3=>"una volta ogni tre settimane", 4=>"una volta al mese", 5=>"meno spesso" }
levels :d5 => { 0=>"Non risponde", 1=>"Per niente d'accordo", 2=>"Poco d'accordo", 3=>"Abbastanza d'accordo", 4=>"Molto d'accordo" }
|
Vedi Variabili: etichette e livelli per ulteriori funzioni per la gestione delle etichette dei livelli.
Tabella di metadati¶
Invece di modificare le etichette all’interno dello script, è possibile utilizzare una tabella di metadati che può essere contenuta nello stesso file XLSX o nello stesso database che contiene i dati oppure in un file o database differente. Tipicamente, per via della sua facilità di gestione, si tratta di un file XLSX separato che viene utilizzato qualsiasi sia il formato di input dei dati.
La tabella dei metadati contiene principalmente due tipi di riga:
- righe riferite alle variabili
- righe riferite ai livelli delle variabili
Campi di principale utilizzo:
- name: (obbligatorio) il nome della variabile (senza i sue punti iniziali) oppure un elenco di variali inserite come lista di nomi separato da spazio o da virgola oppure specificate utilizzando la funzione s()
- code: il codice del livello (da valorizzare solo sulla riga dei livelli)
- label: l’etichetta della variabile (nella riga della variabile) e l’etichetta del livello (nella riga del livello)
Sono inoltre disponibili le colonne seguenti.
- colonne valorizzabili solo per le variabili:
- order: indica l’ordine delle variabili con un numero progressivo. Le variabili senza un’indicazione di ordine verranno poste dopo quelle ordinate
- delete: cancella la variabile. Indicando un qualsiasi carattere sulla riga dell’etichetta verrà cancellata la variabile
- keep: include la variabile. Le variabili con un qualsiasi valore/stringa in questo campo verranno tenute nel dataset finale. Se nessuna variabile viene valorizzata, il campo sarà ignorato
- label_as: imposta l’etichetta della variabile come quella della variabile indicata
- levels_as: imposta i livelli come quelli della variabile indicata
- format_as: imposta i formati (type, size, ndec) come quelli della variabile indicata
- copy: crea una o più copie delle variabili con il nome o i nomi indicati
- before: sposta la variabile prima della variabile indicata. Se è stato specificato copy, solo le variabili copiate verranno spostate.
- after: sposta la variabile dopo la variabile indicata. Se è stato specificato copy, solo le variabili copiate verranno spostate.
- rename: rinomina la variabile. Inserire il nuovo nome da attribuire alla variabile. La variabile verrà rinominata alla fine, quindi nel resto del file di metadati fare riferimento al nome originario della variabile
- fav: inserisce la variabile nei favoriti: 1 stella gialla; 2 stella verde; 3 stella rossa
- check|stop|abort: esegue dei controlli sulla variabile.
In caso di errore check continua l’esecuzione e mostra i record con errori, stop termina l’esecuzione e mostra i record con errori, abort termina l’esecuzione e non mostra i record.
E’ possibile inserire controlli multipli separandoli da virgola:
- uniq: la variabile deve contenere solo valori unici
- notnull: la variabile non deve contenere valori mancanti
- null: la variabile non deve contenere valori
- seq: la variabile deve contenere valori non nulli e in sequenza
- dummy: la variabile deve contenere valori 0, 1
- levels: tutti i valori della variabile devono essere etichettati
- int: i dati della variabile devono essere numeri interi
- flt: i dati della variabile devono essere numeri decimali
- str: i dati della variabile devono essere stringhe
È possibile specificare ulteriori campi con l’intestazione uguale all’attributo della variabile che si vuole modificare, per esempio: size, ndec, type.
- colonne valorizzabili solo per i livelli:
- changelev: modifica uno o più codici della variabile; l’etichetta verrà riattribuita al nuovo codice. Se è stato specificato copy, solo i codici delle variabili copiate verranno modificati.
- recode: ricodifica i livelli della variabile; i nuovi codici posso essere ripetuti per aggregare i vecchi livelli. Se è stato specificato copy, solo le variabili copiate verranno ricodificate.
- recode_label: le nuove etichette dei livelli ricodificati. Nel caso di codici ripetuti, è sufficiente indicare una sola volta l’etichetta
- colonne valorizzabili sia per le variabili, sia per i livelli:
- skip: esclude delle specifiche righe. Se il campo è vuoto la riga viene inclusa, se invece contiene un qualsiasi valore/stringa, viene esclusa. Se si vuole eliminare completamente la definizione di una variabile, è necessario valorizzare il campo skip di tutte le righe relative a quella variabile,
- note: un colonna che può contenere delle note/commenti che verranno ignorati
- _something: qualsiasi colonna con l’intestazione che inizia per underscore verrà ignorata
Sulle righe dei codici è possibile omettere il nome della variabile (non se si usa odbc.labels dato che i record di un database non hanno un ordine predefinito).
La tabella può contenere anche solo i metadati relativi a un sottoinsieme di variabili o specificare i metadati della variabile e non quella dei suoi livelli o viceversa.
L’ordine dei campi non è rilevante.
Es. 1
name | code | label | order | type | size | ndec | delete | skip | note |
---|---|---|---|---|---|---|---|---|---|
id | ID intervista | 1 | integer | 4 | |||||
gender | Genere | 4 | |||||||
gender | 1 | Maschio | |||||||
gender | 2 | Femmina | |||||||
age | Età | 3 | |||||||
d1 | Utilizzatori | ||||||||
0 | Non disponibile | x | |||||||
1 | Sì | ||||||||
2 | No | single | 1 | 0 | |||||
d2 | Possessori | w2 | Solo per wave 2 | ||||||
0 | No | single | 1 | 0 | w2 | ||||
1 | Sì | w2 | |||||||
temp1 | integer | 1 | 0 | x | |||||
temp2 | integer | 1 | 0 | x | |||||
peso | Variabile ponderazione | 2 | float | 2 | 6 | ||||
... |
Es. 2
name | code | label | rename | copy | before | after | changelev | recode | recode_label |
---|---|---|---|---|---|---|---|---|---|
area | AREA | mcr | |||||||
area | 1 | Nord Ovest | |||||||
area | 2 | Nord Est | |||||||
area | 3 | Centro | |||||||
area | 4 | Sud | |||||||
sesso | SESSO | user | |||||||
sesso | 1 | Maschio | 2 | ||||||
sesso | 2 | Femmina | 1 | ||||||
titolo | STUDIO | studio | Titolo di studio | ||||||
titolo | 1 | Nessun titolo/Elementare | 1 | BASSO | |||||
titolo | 2 | Media inferiore | 1 | ||||||
titolo | 3 | Media superiore | 2 | ALTO | |||||
titolo | 4 | Laurea | 2 | ||||||
prof | LAVORO | lav2 lav3 | prof | ||||||
prof | 1 | Lavoratore a tempo pieno | 1 | ||||||
prof | 2 | Lavoratore part-time | 1 | Lavora | |||||
prof | 3 | Studente | 2 | Non lavora | |||||
prof | 4 | In cerca di occupazione | 2 | ||||||
prof | 5 | Casalinga | 2 | ||||||
prof | 6 | NA | 9 | Non risponde | |||||
s(:d10_,1..7) | s(:x10_,1..7) | ||||||||
s(:x10_,1..7) | 1 | Sì | |||||||
s(:x10_,1..7) | 2 | No |
multidicotomy¶
Le batterie di variabili multidicotomy possono essere etichettate separatamente, variabile per variabile. I tal caso è possibile collocare l’etichetta che identifica l’item come etichetta della variabile o come etichetta del livello:
name | code | label |
---|---|---|
v1_1 | Item 1 | |
0 | Non cita | |
1 | Cita | |
v1_2 | Item 2 | |
0 | Non Cita | |
1 | Cita | |
... |
name | code | label |
---|---|---|
v1_1 | Item 1 | |
v1_2 | Item 2 | |
v1_3 | Item 3 | |
... |
name | code | label |
---|---|---|
v1_1 | 1 | Item 1 |
v1_2 | 1 | Item 2 |
v1_3 | 1 | Item 3 |
... |
name | code | label |
---|---|---|
v1_1 | 1 | Etichetta batteria |
Item 1 | ||
v1_2 | Etichetta batteria | |
1 | Item 2 | |
... |
o collettivamente come una variabile singola utilizzando la radice del nome (il codice deve corrispondere al suffisso del nome della variabile):
name | code | label |
---|---|---|
v1_ | Etichetta batteria | |
1 | Item 2 | |
2 | Item 3 | |
... |
:run¶
E’ possibile eseguire specifiche istruzioni pTabs specificando nel campo code :run e nel campo label l’istruzione da eseguire:
name | code | label | type | size | ndec | skip |
---|---|---|---|---|---|---|
o71_1 | :run | copy_labels :o71_1 => s(:o71_,2..10) | ||||
o71_1 | :run | format s(:o71_,1..10) => {:type => :single, :size => 3} |
Internazionalizzazione¶
E’ anche possibile inserire le traduzioni delle etichette in altre lingue specificando ulteriori colonne dal nome label_siglalingua.
Per uteriori opzioni relative alla traduzione dei report vedi Internazionalizzazione.
name | code | label | label_en |
---|---|---|---|
id | ID intervista | ID interview | |
gender | Genere | Gender | |
gender | 1 | Maschio | Male |
gender | 2 | Femmina | Female |
age | Età | Age | |
d1 | Utilizzatori | Users | |
d1 | 0 | Non disponibile | N.a. |
d1 | 1 | Sì | Yes |
d1 | 2 | No | No |
d2 | Possessori | Owners | |
d2 | 0 | No | No |
d2 | 1 | Sì | Yes |
peso | Variabile ponderazione | Weight variable |
Le etichette caricate sono di defaulti quelle corrispondenti alla colonna label. Caricare le etichette di una lingua differente con il parametro language.
1 | xlsx.labels "nome_file_dati", :language => :en
|
Caricamento del file di metadati¶
Parametro :labels¶
Il file di metadati può essere caricato contestualmente all’apertura del file di dati specificando il parametro :labels del metodo .open.
Nel caso di xlsx.open, il parametro :labels deve specificare il nome di un foglio presente nello stesso file del file di dati.
Per le altre sorgenti di dati, il parametro :labels fa riferimento al nome di un altro file.
1 2 3 | xlsx.open "nome_file", :sheet => "nome_foglio_dati", :labels => "nome_foglio_etichette"
csv.open "nome_file", :keep => vars, :labels => "nome_file_etichette"
|
Metodo .labels¶
Il file di metadati può essere caricato successivamente all’apertura del file di dati utilizzando il metodo .labels del driver del formato del file dei metadati.
Argomenti del metodo xlsx.labels:
- :mode => :all|:add|:any|:none: (default :any)
- :all sostituisce tutte le etichette per le variabili presenti nel file di label; per esempio se per una variabile è stata specificata solo l’etichetta della variabile, eventuali etichette dei livelli già presenti verranno eliminate;
- :add integra le etichette esistenti con quelle presenti nel file di label; i livelli delle variabili verranno uniti a quelli esistenti;
- :any sostituisce solo le etichette specificate, cioè solo le label se presenti e/o solo i livelli;
- :dict non fa alcuna modifica nel file di dati, ma restituisce un oggetto contenente il dizionario delle variabili (anche xlsx.dictionary).
- :quiet => true|false: permette di non visualizzare i warning per le variabili mancanti (default false)
- :run => true|false: esegue le istruzioni specificate nelle righe run (default true)
- :formats => formatlist: permette di specificare quali, tra i formati presenti, devono essere caricati (per esempio :formats => [:size, :ndec]), altrimenti carica tutti i formati trovati. :formats => [] non carica nessun formato anche se presente.
- language => :lang: caricare le etichette di una lingua differente
- :keep => [varlist]: l’elenco di variabili da includere
- :drop => [varlist]: l’elenco di variabili da escludere
- :skip => true|false: true esclude le righe con un valore nella colonna skip (default) ; false non esclude le righe anche se hanno un valore nella colonna skip
1 2 | xlsx.open "nome_file_dati", :sheet => "nome_foglio_dati"
xlsx.labels "nome_file", :sheet => "nome_foglio_etichette", :quiet => true
|
I metadati possono risiedere anche in un file di formato diverso. [1]
1 2 | xlsx.open "nome_file_dati", :sheet => "nome_foglio_dati"
csv.labels "nome_file"
|
Nota
Il metodo labels di spss si comporta diversamente perché utilizza un normale file di dati .sav da cui copia le informazioni delle variabili nelle corrispondenti variabili del file attivo (APPLY DICTIONARY).
xlsx.dictionary¶
xlsx.dictionary non modifica il file di dati, ma restituisce i metadati delle variabili in un oggetto Dictionary.
1 2 3 4 | dictionary = xlsx.dictionary "nome_file_dati"
# equivale a:
dictionary = xlsx.labels "nome_file_dati", :mode => :dict
|
E’ possibile accedere alle variabili tramite le seguenti sintassi:
1 2 3 | dictionary["area"]
dictionary[:area]
dictionary.area
|
Ogni variabile dispone degli attributi name, label, levels, type, size, ndec, weights e options:
1 2 3 4 5 6 | p dictionary.area.label # "AREA"
p dictionary.area.levels # {1=>"Nord Ovest", 2=>"Nord Est", 3=>"Centro", 4=>"Sud"}
p dictionary.area.type # :single
p dictionary.area.size # 1
levels :mcr => dictionary.area.levels
|
xlsx.convert¶
Con xlsx.convert, la stessa tabella di metadati può essere utilizzata per convertire ed etichettare variabili stringa in variabili numeriche, sostituendo alle etichette trovate i codici corrispondenti. Eventuali specifiche per variabili non stringa presenti nella tabella di metadati verranno ignorate.
- filename: il nome del file con i metadati
- :sheet => sheet_name: il nome del foglio
- :vars => varlist: l’elenco delle variabili da convertire
- :into => prefix: se specificato, invece di convertire le variabili originarie, crea nuove variabili con quel prefisso
- :language => value: specifica quale linguaggio usare per le conversioni e le etichette delle variabili
1 2 3 4 5 6 | xlsx.convert filename [, :sheet => sheetname, :vars => varlist, :into => rootname
xlsx.convert "labelfile"
xlsx.convert "labelfile", :language => "en"
xlsx.convert "labelfile", :sheet => "legend", :vars => [:sex, :eta]
xlsx.convert "labelfile", :sheet => "legend", :into => 'int_'
|
Attenzione
Se non vengono trovate corrispondenze tra dati e etichette, il dato risulterà mancante.
Vedi anche autorecode.
cleanlabels.txt¶
E’ possibile fornire istruzioni per sostituire caratteri e stringhe di testo nelle etichette delle variabilie attraverso il file cleanlabels.txt. Il nome del file può essere modificato impostando il parametro clean_labels_file dei Parametri di configurazione. Il file può essere posto nella cartella pTabs-user o direttamente nella cartella di lavoro o in una cartella genitore della cartella di lavoro.
Il file può contenere singole righe di istruzione secondo il seguente formato:
- # commenti: righe di commento
- text|regex: testo o espressione regolare da eliminare
- text|regex => sost: stringhe o espressione regolare da sostituire. Prima e dopo => deve esserci uno spazio
Il testo cercato può essere scritto indifferentemente maiuscolo o minuscolo. Se il testo cercato viene racchiuso tra parentesi graffe, verrà cercato sia tra parentesi tonde, sia tra quadre e sia tra graffe.
I caratteri che hanno uno specifico significato per le espressioni regolari, devono essere preceduti da backslash (\) se si desidera che siano interpretati letteralmente.
1 2 3 4 5 6 7 8 9 10 11 12 | # regole pulizia etichette
# eliminazioni
SPECIFICARE
{RISPOSTA.*?}
# sostituzioni
Ôÿ => à
° => .
\\ => /
Marca A => Marca XY
\^f\('D3_8a'\)\^ => Altro
|
Note
[1] | Una tabella di metadati può essere utilizzata anche per un file SPSS in sostituzione oppure a integrazione o correzione delle etichette del system file SPSS. |