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:

  1. righe riferite alle variabili
  2. righe riferite ai livelli delle variabili

Campi di principale utilizzo:

  1. 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()
  2. code: il codice del livello (da valorizzare solo sulla riga dei livelli)
  3. 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              

2 No   single 1 0      
d2   Possessori           w2 Solo per wave 2

0 No   single 1 0   w2  

1           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(: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 Yes
d1 2 No No
d2   Possessori Owners
d2 0 No No
d2 1 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.