Variabili: etichette e livelli¶
In relazione alle etichette delle variabile si veda anche File di dati>Metadati e le funzioni get_label, get_labels, get_levels, get_levels.
Un modo per lavorare sulle etichette senza doverle ridigitare, è quello di far stampare le vecchie etichette e incollarle nello script:
1 2 3 4 | p get_levels(:titolo) # => stampa nel log: {1=>"nessun titolo-elementare", 2=>"Media inferiore", 3=>"Media superiore", 4=>"Laurea"}
# copia e incolla nello script per modificarle:
levels :titolo => {1=>"Nessun titolo/Elementare", 2=>"Media inferiore", 3=>"Media superiore", 4=>"Laurea"}
|
label¶
Imposta l’etichetta della variabile o dell’elenco di variabili.
E’ possibile indicare un elenco di variabili e un’etichetta o un’elenco di etichette pari al numero delle variabili. E’ possibile elencare più coppie variabile/i => etichetta.
La variante label? non dà errore se la variabile non esiste.
Argomenti:
- varlist => label|labels: il nome della variabile o l’elenco dei nomi delle variabili e l’etichetta o l’elenco delle etichette corrispondenti a ciascuna variabile
1 2 3 4 5 6 | label :sex => "Sesso dell'intervistato"
label :sex => "SESSO", :area => "MACROAREA"
label [:mcr1, :mcr2, :mcr3] => "MACROAREA"
label [:sex, :eta, :mcr] => ["Sesso", "Età", "Macroarea"]
label s(:v1_, 1..5) => ["Label 1", "Label 2", "Label 3", "Label 4", "Label 5"]
|
levels¶
Imposta le etichette dei livelli.
La variante levels? non dà errore se la variabile non esiste.
Argomenti:
- varlist => levels: il nome della variabile o l’elenco dei nomi delle variabili e l’elenco dei livelli
- il levels è possibile specificare:
- un array [] con un elenco di etichette: i codici verranno attribuiti sequenzialmente a partire da 1
- un hash {} con le coppie di codice e etichetta. È anche possibile specificare :else => :value per etichettare i codici non specificati semplicemente con il loro valore
- il levels è possibile specificare:
1 2 3 4 5 6 7 8 9 10 11 12 13 | levels :sesso => ['M', 'F']
levels s(:r100, 1..8) => ["Sì", "No"]
levels :area => {1 => "Nord Ovest", 2 => "Nord Est", 3 => "Centro", 4 => "Sud e Isole"}
levels :sesso => ['M', 'F'], :area => {1 => "Nord Ovest", 2 => "Nord Est", 3 => "Centro", 4 => "Sud e Isole"}
levels :d100 => {1 => "1 Per niente importante", 10 => "10 Molto importante", 0 => "NA", :else => :value}
# elimina le etichette
levels :v1 => {}
levels :v1 => nil
levels :v1
|
add_label¶
Aggiunge la stringa specificata all’etichetta della variabile.
- :sep => "" permette di specificare una stringa di separazione (default ""). Nel caso l’etichetta originaria sia vuota, non viene inserito nessun carattere di separazione
- :pos => :left|:right specifica se la stringa deve essere messa a sinistra/inizio o a destra/fine (default :right)
1 2 3 4 5 | add_label varlist => labels, :sep => "string", :pos => :right
add_label :v1 => " / (Totale)"
add_label s(:v2_, 1..3) => ["X", "Y", "Z"], :sep => "_"
add_label :v3.to(:v10) => "SEZ.1 - ", :pos => :left
|
add_levels¶
Aggiunge o sostituisce nuove etichette di livelli.
1 2 3 4 5 | add_levels varlist => levels
add_levels :v1 => {98 => "Non sa", 99 => "Non risponde"}
add_levels [:v10, :v20] => {99 => "Non sa"}
add_levels s(:v3_, 1..10) => {7 => "Rosso"}
|
autolevels¶
Inserisce delle etichette uguali ai valori della variabile. Se la variabile ha già etichette, inserisce solo eventuali nuove etichette per livelli non ancora etichettati.
Argomenti:
- varlist: la lista delle variabili
- :pref => string: un prefisso da aggiungere alle etichette
- :suff => string: un suffisso da aggiungere alle etichette
copy_label¶
Etichetta una o più variabili con l’etichetta di altre variabili.
1 2 3 4 5 6 | copy_label var|varlist => var|varlist
copy_label :v1 => :r1
copy_label :v1 => [:r11, :r12, :r13]
copy_label [:v7_1, :v7_2, :c7_3] => [:x7_1, :x7_2, :x7_3]
|
copy_levels¶
Etichetta i livelli di una o più variabili con le etichette dei livelli di altre variabili.
1 2 3 4 5 6 | copy_levels var|varlist => var|varlist
copy_levels :v1 => :r1
copy_levels :v1 => [:r11, :r12, :r13]
copy_levels [:v7_1, :v7_2, :c7_3] => [:x7_1, :x7_2, :x7_3]
|
copy_labels¶
Esegue in successione copy_label e copy_levels.
relevel¶
Riordina i livelli di una o più variabili riordinando anche le etichette. Agisce ricodificando i codici delle variabile.
Argomenti:
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
- valuelist: l’elenco dei codici della variabile nell’ordine desiderato
- :a [,endcodes]: ordina alfabeticamente le etichette (endcodes = livelli da tenere in fondo)
- :d [,endcodes]: ordina alfabeticamente le etichette in senso decrescente(endcodes = livelli da tenere in fondo)
- :seq [,start]: rinumera sequenzialmente i livelli partendo da 1 o da start
- :rev [,endcodes]: inverte l’ordine dei livelli (endcodes = livelli da tenere in fondo)
- :freq [,endcodes]: ordina in base alle frequenze pesate in senso crescente (endcodes = livelli da tenere in fondo)
- :dfreq [,endcodes]: ordina in base alle frequenze pesate in senso decrescente (endcodes = livelli da tenere in fondo)
- :freq_u [,endcodes]: ordina in base alle frequenze non pesate in senso crescente (endcodes = livelli da tenere in fondo)
- :dfreq_u [,endcodes]: ordina in base alle frequenze non pesate in senso decrescente (endcodes = livelli da tenere in fondo)
- :top, valuelist: sposta i codici indicati all’inizio
- :bottom, valuelist: sposta i codici indicati alla fine
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # riordina i livelli della variabile v1
relevel :v1, 3, 2, 5, 4, 1
# riordina le etichette della variabile :brand in senso alfbetico, lasciando in fondo i codici 98 e 99
relevel :brand, :a, [98,99]
# inverte l'ordine dei livelli della variabile v2 ad eslusione del codice 9 che viene tenuto in fondo
relevel :v2, :rev, 9
# riordina i livelli in base alle frequenze
relevel [:v3, :v4, :v5], :freq
# riordina i livelli in base alle frequenze in senso decrescente
relevel s(:v101_, 1..7), :dfreq
# sposta i codici 5 e 7 all'inizio
relevel :v3, :top, 7, 5
# sposta il codice 1 in fondo
relevel :v3, :bottom, 1
# rinumera i livelli partendo da 1
relevel :brand, :seq
|
reverse¶
Riordina i livelli di una o più variabili invertendo i codici e riordinando anche le etichette (cfr. relevel).
Argomenti:
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
- valuelist: l’elenco dei codici che devono rimanere invariati
1 2 3 4 5 | reverse :v1
reverse s(:v2_, 1..10), 9
reverse :v3, 98, 99
|
changelev¶
Modifica i codici di una variabile, spostando anche le etichette (cfr. relevel).
Argomenti:
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
- valuepairs|list|:compact:
- valuepairs: le coppie di codici da modificare con il vecchio e il nuovo valore
- valuelist: la lista completa dei nuovi valori che verranno accoppiati ai livelli definiti della variabile (nel log vengono stampate le coppie di valori effettivamente utilizzate)
- :compact: ricodifica in modo progressivo a partire da 1 i livelli della variabile
1 2 3 4 5 6 7 | changelev :d5 => {0 => 9}
changelev :x10 => {0=>1, 1=>0}
changelev :v100 => [2,1,0,-1,-2]
changelev :marche => :compact
|
switch¶
Scambia due livelli di una o più variabili scambiando anche le etichette (cfr. relevel).
1 2 3 | switch :x10, 1, 0
switch :v30, 70, 75
|
merge_levels¶
Ricodifica i valori di una variabile unendo due o più livelli.
Argomenti:
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
- codes: un array con la lista dei codici da unire; il nuovo livello avrà come codice il primo codice elencato
- label: (opzionale) l’etichetta del livello (default l’etichetta del primo codice elencato)
1 2 3 | merge_levels :d5, [8,9], "NA"
merge_levels s(:d1_, 1..9), [9,0]
|
collect_levels¶
Unisce la definizione dei livelli di più variabili in un’unica definizione.
Non modifica i valori ma solo la definizione dei livelli.
Argomenti:
- varlist: l’elenco dei nomi delle variabili da cui prendere le etichette
- :into => varlist: l’elenco dei nomi delle variabili che devono essere etichettate (default varlist)
- :order => :first|:last: in caso di livelli uguali su più variabili, :first tiene la prima etichetta, mentre :last tiene l’ultima (default :first)
- :syntax => false|true: true stampa nel log l’istruzione per la definizione dei livelli e non la assegna a nessuna variabile (default false)
1 2 | collect_levels :v1, :v2, :v3
collect_levels :v1, :v2, :v3, :into => :x1, :order => :last
|
collect_data¶
Estrae e unisce i dati contenuti in più variabili ed elimina i duplicati.
Genera un elenco di coppie valore => codice progressivo (Hash) utile per la ricodifica
oppure un elenco di valori (Array).
Può essere utilizzato per ricodificare più variabili stringa con un una codifica comune.
Argomenti:
- varlist: l’elenco dei nomi delle variabili
- :as_array => true|false: genera un array e non un hash (default false)
- :sort => true|false: ordina i valori trovati (default true)
- :invert => true|false: inverte le chia con i valori dell’hash (default false)
- :print => true|false: stampa il risultato (default true)
- :fun => []: un array di funzioni da applicare ai dati, per esempio: :to_s, :strip, :squish, :upcase, :downcase, :titleize, :capitalize, :to_i, ecc.
1 2 3 4 | recode s(:open_, 1..5) => collect_data(s(:open_, 1..5)), :into => s(:v1_, 1..5)
varlist = %w(a5 b7 b8 c2 d4, e1)
recode varlist => collect_data(varlist), :fun => [:to_s, :squish, :upcase], :into => varlist.map{|x| "r#{x}"}
|
add_na¶
Ricodifica i casi mancanti della variabile in un nuovo livello.
Argomenti:
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
- label: (opzionale) l’etichetta del livello (default NA)
- codes: (opzionale) il codice del nuovo livello (default il primo livello disponibile dopo quelli esistenti)
1 2 3 | add_na :d5
add_na :d5, "Na/Nr", 9
|
drop_levels¶
Elimina tutti i livelli della variabile che hanno frequenza uguale a zero.
1 2 3 4 | drop_levels varlist
drop_levels :d1
drop_levels [:d1, :d2, :d3]
drop_levels s(:x10_, 1..8)
|
delete_levels¶
Elimina le etichette dei livelli specificati della variabile. Eventuali dati presenti per quei livelli non verranno modificati.
1 2 3 4 | delete_levels :d1 => 99
delete_levels [:d2, :d3] => 9
delete_levels :d4 => [0, 99]
delete_levels :d5 => 97..99
|
delete_levels!¶
Elimina sia le etichette dei livelli specificati della variabile, sia eventuali dati presenti per quei livelli.
1 | delete_levels! :d5 => 97..99
|
lprefix¶
Aggiunge un prefisso alle etichette dei livelli della variabile.
1 2 3 4 | lprefix varlist => prefix
lprefix :v123 => "Kg. "
lprefix [:v123.1, :v123.2] => "Kg. "
|
lsuffix¶
Aggiunge un suffisso alle etichette dei livelli della variabile.
1 2 3 4 | lsuffix varlist => suffix
lsuffix :etaf => " anni"
lsuffix [:eta1f, :eta2f, :eta3f] => " anni"
|
labprefix¶
Aggiunge un prefisso all’etichetta della variabile.
1 2 3 4 5 | labprefix varlist => prefix
labprefix :v13 => "D13. "
labprefix s(:v10_, 1..9) => "D10. "
labprefix s(:v11_, 1..2) => ["D11.1 ", "D11.2 "]
|
labsuffix¶
Aggiunge un suffisso all’etichetta della variabile.
1 2 3 | labsuffix varlist => suffix
labsuffix :v13 => " (D13)"
|
label_to_level¶
Copia l’etichetta della variabile come etichetta di un livello.
1 2 3 | label_to_level varlist => level_id
label_to_level s(:d7_, 1..10) => 1
|
level_to_label¶
Copia l’etichetta di livello come etichetta della variabile.
1 2 3 | level_to_label level_id => varlist
level_to_label 1 => s(:d7_, 1..10)
|
switch_labels¶
Scambia l’etichetta di un livello e l’etichetta della variabile.
1 2 3 | switch_labels varlist => level_id
switch_labels s(:d7_, 1..10) => 1
|
simplify_label¶
Elimina da un set di variabili la parte uguale dell’etichetta.
Argomenti:
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
- drop_from => string|regex: (opzionale) una stringa o una espressione regolare che definisce il testo a partire dal quale l’etichetta va ripulita fino alla fine. E’ utile quando simplify_label non riesce a trovare la parte comune quando le etichette sono state troncate e il testo superfluo rimasto in fondo all’etichetta è differente per ciascuna variabile
1 2 3 4 5 | simplify_label s(:d19_, 1..6)
simplify_label s(:d19_, 1..6), :drop_from => " Rispondere su una"
simplify_label s(:d19_, 1..6), :drop_from => / \*\(Rispondere/
|
simplify_levels¶
Elimina da un set di variabili la parte uguale dell’etichetta di uno dei livelli.
Argomenti:
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
- code: il codice del livello su cui agire (default 1)
- drop_from => string|regex: (opzionale) una stringa o una espressione regolare che definisce il testo a partire dal quale l’etichetta va ripulita fino alla fine. E’ utile quando simplify_label non riesce a trovare la parte comune quando le etichette sono state troncate e il testo superfluo rimasto in fondo all’etichetta è differente per ciascuna variabile
1 2 3 | simplify_levels s(:d19_, 1..6)
simplify_levels s(:d19_, 1..6), 1
|
label_sub¶
Cerca e sostituisce testo nelle etichette delle variabili. E’ possibile usare espressioni regolari e più coppie di testo da cercare / testo da sostituire.
1 2 3 4 | label_sub varlist, search1 => replace1, search2 => replace2, search3 => replace3, ...
label_sub :v100, "(leggere)" => "", "(non suggerire)" => ""
label_sub s(:v10_, 1..10), /^(.*?)\((.+)\)(.*)$/ => '\1\3 [\2]'
|
levels_sub¶
Cerca e sostituisce testo nelle etichette dei livelli delle variabili. E’ possibile usare espressioni regolari e più coppie di testo da cercare / testo da sostituire.
1 2 3 4 | levels_sub varlist, search1 => replace1, search2 => replace2, search3 => replace3, ...
levels_sub :v5, "favorevole" => "d'accordo"
levels_sub s(:v72_, 1..12), /^\d+\.\s*/ => ""
|
label_crop¶
Elimina i caratteri iniziali e/o finali dell’etichett1 della variabile.
Un numero positivo indica il numero di caratteri da eliminare all’inizio della stringa.
Un numero negativo indica il numero di caratteri da eliminare alla fine della stringa.
Se come secondo numero viene indicato un numero positivo, questo indicherà la lunghezza totale della della stringa da estrarre.
Se viene indicata una stringa, verrà eliminato tutto il testo dalla stringa fino alla fine.
1 2 3 4 5 6 7 | label_crop varlist => [n1, n2]
label_crop [:v21, :v22] => [2, -10]
label_crop :v23 => 2
label_crop :v24 => -10
label_crop :v25 => [5, 3]
label_crop :v5 => " (Intervistatore"
|
levels_crop¶
Elimina i caratteri iniziali e/o finali delle etichette dei livelli.
Un numero positivo indica il numero di caratteri da eliminare all’inizio della stringa.
Un numero negativo indica il numero di caratteri da eliminare alla fine della stringa.
Se come secondo numero viene indicato un numero positivo, questo indicherà la lunghezza totale della della stringa da estrarre.
Se viene indicata una stringa, verrà eliminato tutto il testo dalla stringa fino alla fine.
1 2 3 4 5 6 7 | levels_crop varlist => [n1, n2]
levels_crop [:v1, :v2] => [3, -5]
levels_crop :v3 => 3
levels_crop :v4 => -5
levels_crop :v5 => [5, 3]
levels_crop :v9 => " (Non leggere"
|
label_strip¶
Elimina gli spazi iniziali, finali e multipli dall’etichetta della variabile.
levels_strip¶
Elimina gli spazi iniziali, finali e multipli dalle etichette dei livelli.
label_apply¶
Applica una funzione alle etichette delle variabili.
Argomenti:
- funz: la funzione può essere un simbolo o una stringa con il nome della funzione, oppure una lambda (funzione anonima). La lambda ha come primo argomento l’etichetta e come secondo argomento (opzionale) l’oggetto Field
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
1 2 3 4 5 6 | label_apply :strip_tags, :d1
label_apply :upcase, :sesso, :area
label_apply lambda {|x| x.upcase}, :sesso, :area
label_apply -> (x) {x.upcase}, :sesso, :area
label_apply -> (x) {"VAR: "+ x}, :sesso, :area
label_apply -> (x, f) {x + " [#{f.size}]"}, :citta
|
levels_apply¶
Applica una funzione alle etichette dei valori delle variabili.
Argomenti:
- funz: la funzione può essere un simbolo o una stringa con il nome della funzione, oppure una lambda (funzione anonima). La lambda ha come primo argomento l’etichetta, come secondo argomento (opzionale) il codice e come terzo argomento (opzionale) l’oggetto Field
- varlist: il nome della variabile o l’elenco dei nomi delle variabili
1 2 3 4 5 | levels_apply :strip_tags, :d1
levels_apply :upcase, :sesso, :area
levels_apply lambda {|x| x.upcase}, :sesso, :area
levels_apply -> (x) {x.upcase}, :sesso, :area
levels_apply -> (x, y) {"#{y}: #{x.upcase}"}, :sesso, :area
|
zip_code_level¶
Genera l’hash dei livelli partendo da due variabili, dove la prima variabile contiene i codici, mentre la seconda le etichette corrispondenti.
1 | levels :area => zip_code_level(:mcr_code, :mcr_label)
|
to_c, to_l¶
- to_c(level_list): restituisce i codici della variabile corrispondenti alle etichette dei livelli
- to_l(code_list): restituisce le etichette dei livelli corrispondenti ai codici
1 | f(:comune).to_c("MILANO", "Roma", "Reggio di Calabria")
|
has_levels?, has_levels!¶
Controlla se la variabile contiene i livelli indicati. has_levels! interrompe l’esecuzione in caso di errore.
E’ possibile controllare anche solo un sottoinsieme dei livelli.
Il confronto delle etichette avviene senza considerare il maiuscolo/minuscolo e rimuovendo gli spazi iniziali, finali e doppi.
1 2 3 4 | has_levels! :v1 => {1=>"Sì", 2=>"No"},
s(:v2_, 1..10) => {1=>"Molto", 2=>"Abbastanza", 3=>"Poco", 4=>"Per nulla", 5=>"Non so"},
has_levels? s(:v2_, 1..10) => {1=>"Molto", 2=>"Abbastanza"}
|
scrap_labels¶
scrap_labels estrae le etichette delle variabili e dei loro livelli da un file di testo.
Argomenti:
- filename: il nome del file di testo compresa l’estensione
- :encoding => string: l’encoding del file (default "UTF-8")
- :quest => regex: l’espressione regolare per riconoscere il nome/numero della domanda. Deve comprendere due gruppi uno per il nome/numero e uno per l’etichetta (default /^(\d+\w?)\.\s?(.+)$/)
- :answ => regex: l’espressione regolare per riconoscere gli item di risposta Deve comprendere due gruppi uno per ilcodice e uno per l’etichetta (default /^(\d+)\s+(.+)$/)
- :pref => string: il prefisso delle variabili nel caso non sia presente nel testo (default "q")
- :qname => true|false: true inserisce il nome della domanda nell’etichetta (default true)
- :print => true|false: true stampa la tabella delle etichette nel log (default true)
- :xlsx => false|"filename": false non produce il file XLSX con le etichette; filename specifica il nome del file XLSX (default genera automaticamente il nome del file)
1 2 3 | scrap_labels "screening.txt", :quest => /^(Q\d+\w?)\.?\s+(.+)$/i, :answ => /^()(.+)\t|END$/
scrap_labels "main.txt", :suff => :d
|
one_to_item_number¶
In una batteria di variabili, one_to_item_number ricodifica il codice 1 con il codice derivato dal suffisso numerico del nome della variabile. Sposta anche l’etichetta del livello se presente.
Argomenti:
- varlist: la lista delle variabili
- :sep => chr: il separatore del numero di item (default "_")
1 | one_to_item_number s(:d7_, 1..10, 99)
|
item_number_to_one¶
In una batteria di variabili, item_number_to_one ricodifica il codice derivato dal suffisso numerico del nome della variabile con il codice 1. Sposta anche l’etichetta del livello se presente.
Argomenti:
- varlist: la lista delle variabili
- :sep => chr: il separatore del numero di item (default "_")
1 | item_number_to_one s(:d7_, 1..10, 99)
|