Funzioni informative¶
Le funzioni seguenti restituiscono informazioni relative alle variabili e ai dati presenti nel dataset. Sono utili per titoli e note o per condizionare il comportamento e rendere più flessibile lo script di pTabs.
Variabili¶
exist?¶
Controlla se le variabili esistono nel dataframe corrente e restituisce true se tutte le variabili esistono e false se almeno una variabile non esiste.
1 2 3 | cat :v10045 if exist?(:v10045)
ord [:eta, etaq] if exist?(:eta, etaq)
md s(:v100,10) if exist?(s(:v100,10))
|
existing¶
Controlla se le variabili esistono nel dataframe corrente e restituisce l’elenco (Array) delle solo variabili esistenti.
1 2 | cat existing(:v1,:v2,:v3)
md existing(s(:d7_,99))
|
varnames¶
varnames(varlist) restituisce un vettore di nomi di variabili partendo dall’elenco di variabili dato ed espandendo gli eventuali net.
size¶
size(varlist) restituisce il numero di elementi partendo dall’elenco di variabili dato ed espandendo gli eventuali net.
usedvars¶
usedvars restituisce un vettore con i nomi di tutte le variabili utilizzate nelle tavole (pannelli e fiancate).
1 2 | # esporta un file contenente solo le variabili utilizzate nella tabulazione
excelx.save "variabili_usate", :vars => usedvars, :as_num => false
|
allvars¶
allvars restituisce un vettore con i nomi di tutte le variabili presenti nel file di dati.
Il parametro :sets => true restituisce i set di variabili, dove presenti, al posto delle singole variabili.
1 2 | # esporta un file contenente solo le variabili NON utilizzate nella tabulazione
excelx.save "variabili_non_usate", :vars => allvars-usedvars, :as_num => false
|
Etichette e livelli¶
factor?¶
factor?(varname) restituisce true se la variabile è una variabile factor, altrimenti restituisce false.
get_label¶
get_label(varname) restituisce la stringa con l’etichetta della variabile.
get_labels¶
get_labels(varlist) restituisce un vettore con le etichette delle variabili.
1 2 3 | get_labels(s(:d7,10)).rep do |label|
...
end
|
get_levels¶
get_levels(varname) restituisce un vettore con le etichette dei livelli della variabile.
1 2 3 4 | get_levels(:d1).rep do |label, index|
filter :d1 => index, :label => label
ord :d5
end
|
get_codes_and_levels¶
get_codes_and_levels(varname) restituisce un hash con i codici e le etichette dei livelli della variabile.
1 2 3 4 5 | get_codes_and_levels(:area).each do |code, lab|
filter :area => code, :label => "Area: "+lab
cat :d1
ord :d5
end
|
get_values¶
get_values(varname) restituisce un array con i valori presenti nella variabile. I valori sono restituiti come valori decimali.
1 2 | p get_values(:eta)
[1.0, 2.0, 3.0, 4.0]
|
get_max_level¶
get_max_level(varname) restituisce il numero totale dei livelli della variabile. Equivale a get_max_level(varname).size.
info¶
info(varname) restituisce un oggetto PTables::VariableInfo contenente varie informazioni relative alla variabile o al set di variabili.
Metodi dell’oggetto VariableInfo:
- name: restituisce il nome della variabile
- set?: restituisce true se la variabile è un set di variabili
- type: restituisce il tipo di variabile: :numeric, :factor, :alpha
- numeric?: restituisce true se la variabile è numerica
- factor?: restituisce true se la variabile è factor
- alpha?: restituisce true se la variabile è alfanumerica
- multi?: restituisce true se la variabile è multipla
- label: restituisce l’eticheta della variabile
- levels: se la variabile è una factor restituisce le etichette dei valori
- values: restituisce i valori della variabile
- range: se la variabile è numerica restituisce il range dei valori
- print: stampa le informazioni nell’output
1 2 3 4 | i5 = info(:d5)
md i5 if i5.multi?
info(m7).print
|
df?¶
df? o show_dataframe stampa nell’output la struttura del data frame.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | df?
'data.frame': 300 obs. of 14 variables:
$ ser_no : int 1 2 3 4 5 6 7 8 9 10 ...
$ area : int 1 1 1 1 1 1 1 1 1 1 ...
$ sesso : int 1 2 1 2 2 2 2 2 2 1 ...
$ eta : int 3 2 4 3 3 4 3 2 2 4 ...
$ titolo : int 3 3 4 4 3 2 3 3 4 3 ...
$ prof : int 3 1 1 4 2 4 1 2 1 1 ...
$ dc : int 4 4 2 2 2 2 6 4 4 1 ...
$ d1 : int 3 4 4 2 2 4 4 4 3 4 ...
$ d2 : int 1 3 3 1 1 3 3 1 1 1 ...
$ d5 : int NA NA NA NA NA NA NA NA NA NA ...
$ w1 : Factor w/ 4 levels " ,25","1,00",..: 3 4 4 2 2 4 4 4 3 4 ...
$ let : Factor w/ 2 levels "A","B": 1 2 1 2 1 2 1 2 1 2 ...
$ ._tot : Factor w/ 1 level "": 1 1 1 1 1 1 1 1 1 1 ...
$ ._fake.weight: num 1 1 1 1 1 1 1 1 1 1 ...
- attr(*, "variable.labels")= Named chr "ser_no" "area" "sesso" "eta" ...
..- attr(*, "names")= chr "" "" "" "" ...
- attr(*, "value.labels")= list()
|
Dati¶
list¶
list stampa nell’output i valori delle variabili dei record del data frame.
- vars: elenco variabili
- rows: numero di riga o intervallo di righe (ignorato se specificato :if)
- if: filtro per selezionare un sottoinsieme di casi (Espressioni)
- numeric: (false|true) converte i valori delle variabili in valori numerici (default false)
1 | list :vars => [:ser_no, :sesso, :eta, :etaq, :area, s(:d7_,4)], :rows => 1..10
|
ser_no sesso eta etaq area d7_1 d7_2 d7_3 d7_4
1 1 Maschio 25-30 anni 25 Nord Ovest 1 1 1 0
2 2 Femmina 18-24 anni 24 Nord Ovest 0 0 1 0
3 3 Maschio 31-34 anni 31 Nord Ovest 1 0 0 1
4 4 Femmina 25-30 anni 25 Nord Ovest 1 1 0 0
5 5 Femmina 25-30 anni 30 Nord Ovest 1 1 1 0
6 6 Femmina 31-34 anni 33 Nord Ovest 1 0 0 0
7 7 Femmina 25-30 anni 30 Nord Ovest 1 1 1 1
8 8 Femmina 18-24 anni 20 Nord Ovest 0 0 1 1
9 9 Femmina 18-24 anni 24 Nord Ovest 1 0 1 0
10 10 Maschio 31-34 anni 32 Nord Ovest 1 1 0 0
1 | list :vars => [:ser_no, :sesso, :etaq, :d1], :if => "#sesso==1 & etaq>=33", :numeric => true
|
ser_no sesso etaq d1
15 5 1 34 1
37 37 1 34 3
114 117 1 34 4
122 125 1 33 4
138 141 1 34 4
192 195 1 33 3
226 229 1 34 4
240 243 1 33 4
257 260 1 33 4
279 282 1 34 3
281 284 1 33 4
296 299 1 33 3
299 302 1 34 4
300 303 1 33 3
get_base¶
get_base(varname, value) restituisce il numero di casi pesati di una variabile o di un suo livello (se specificato value).
Se non si specifica varname verà restituito il numero totale di casi pesati del dataframe.
1 2 3 4 5 6 | base_d5 = get_base(:d5)
if base_d5 > 100
ord :d5
end
ord :d1 if get_base(:d1, 2) > 30
|
get_base_u¶
get_base_u(varname, value) restituisce il numero di casi non pesati di una variabile o di un suo livello (se specificato value).
Se non si specifica varname verà restituito il numero totale di casi non pesati del dataframe.
get_counts¶
get_counts(varname [, :drop]) restituisce i livelli di una variabile con le distribuzioni di frequenza ponderate (se è attiva una variabile di ponderazione). Il parametro :drop elimina i livelli con frequenze pari a zero. get_counts restituisce un vettore con un elemento per ciascun livello della variabile costituito a sua volta da un vettore di tre elementi: codice livello, etichetta livello, conteggio frequenze:
p get_counts(:sesso)
[[1, "Maschio", 154.0], [2, "Femmina", 146.0]]
1 2 3 4 | get_counts(:d1, :drop).each do |code, lab, count|
filter :d1 => code, :label => "D1: #{lab} (n.#{count.round})"
ord :d5
end
|
get_counts_u¶
get_counts(varname [, :drop]) funziona in modo analogo a get_counts, ma restituisce sempre le distribuzioni di frequenza non ponderate.
xtab¶
xtab(varname[, by: varname]) calcola una tabella con le distribuzioni di frequenza di una variabile (variabile di riga). Specificando un’ulteriore variabile con il parametro by (variabile di colonna) calcola una tabella di contingenza.
Importante
Se è attiva una variabile di ponderazione, xtab calcola i dati ponderati. Per produrre dati non ponderati usare xtab_u.
Se è attivo un filtro, xtab restituisce i dati filtrati, cioè solo per i casi attivi.
Opzioni:
- by: specifica un nome di variabile da incrociare
- drop: elimina i livelli/valori con frequenze pari a zero (default: false)
- decimal: numero di decimali delle percentuali (default: valore impostato nel parametro di configurazione :frm_pct)
- count_dec: numero di decimali dei valori assoluti (default: valore impostato nel parametro di configurazione :frm_count)
- if: filtro per selezionare un sottoinsieme di casi (Espressioni)
xtab restituisce un oggetto che dispone di vari metodi per estrarre i dati.
Metodo Tipo dato restituito Descrizione nrows Integer Numero righe tabella ncols Integer Numero colonne tabella size Array Dimensioni tabella (righe, colonne) codes Array Valori/codici variabile label String Etichetta variabile riga labels Array Etichette delle modalità della variabile di riga clabel String Etichetta variabile colonna clabels Array Etichetta delle modalità della variabile di colonna data (col=nil, simplify=true) Array Array con le serie di dati della tabella (una serie per il totale e una per ciascuna modalità della variabile di colonna) counts (col=nil) Array Valori assoluti pcts (col=nil) Array Percentuali di colonna tcounts (simplify=true) Array Totali colonne tpcts (simplify=true) Array Percentuale dei totali delle colonne Object Stampa nell’output una versione testuale della tabella (restituisce lo stesso oggetto)
I metodi data, counts e pcts accettano come argomento il numero di colonna dei dati da estrarre (0 è la colonna del totale) o l’etichetta della colonna. I vettori di dati restituiti potranno quindi essere costituiti da una o più serie di dati.
1 2 3 4 5 6 7 8 9 | x = xtab(:d1, by: :sesso).print
p x.counts
# [[27, 43, 56, 170, 4], [12, 25, 32, 84, 0], [15, 17, 23, 81, 4]]
p x.counts(1)
# [12, 25, 32, 84, 0]
p x.pcts
# [[9.0, 14.3, 18.7, 56.7, 1.3], [7.8, 16.3, 20.9, 54.9, 0], [10.7, 12.1, 16.4, 57.9, 2.9]]
p x.pcts('maschio')
# [7.8, 16.3, 20.9, 54.9, 0]
|
I dati sono semplificati in modo da restituire il tipo più semplice di dato. Utilizzare false per non semplificare i dati.
1 2 3 4 5 6 7 8 | p xtab(:d1, by: :sesso).tcounts
# <Array> [300, 153, 140]
p xtab(:d1).tcounts
# <Fixnum> 300
p xtab(:d1).tcounts(false)
# <Array> [300]
|
Il metodo data restituisce un array per ciascuna serie di dati contenente un array costituito da una struttura con quattro campi per ciascuna riga: code, label, count, pct:
1 2 3 4 | x = xtab(:sesso)
p x.data
# [#<struct PTables::Counts::Row code=1, label="Maschio", count=153, pct=52.2>,
# #<struct PTables::Counts::Row code=2, label="Femmina", count=140, pct=47.8>]
|
Esempi utilizzo:
ripetizione sui valori di una variabile con controllo della numerosità e indicazione della numerosità nell’etichetta del filtro:
1 2 3 4 5
xtab(:d1).data.each do |x| next if x.count < 50 filter :d1 => x.code, :label => "D1: #{x.label} (n.#{x.count})" ord :d5, "D5.#{x.code}" end
print:
1 | xtab(:d1, by: :sesso).print
|
Con quale frequenza frequenza di solito vai...?
by Sesso
+-------+---------------------------------------+--------+-------+---------+------+---------+------+
| Value | Label | TOTALE | % | Maschio | % | Femmina | % |
+-------+---------------------------------------+--------+-------+---------+------+---------+------+
| 1 | una volta alla settimana o più spesso | 27 | 9.0 | 12 | 7.8 | 15 | 10.7 |
| 2 | una volta ogni due settimane | 43 | 14.3 | 25 | 16.3 | 17 | 12.1 |
| 3 | una volta ogni tre settimane | 56 | 18.7 | 32 | 20.9 | 23 | 16.4 |
| 4 | una volta al mese | 170 | 56.7 | 84 | 54.9 | 81 | 57.9 |
| 5 | meno spesso | 4 | 1.3 | 0 | 0 | 4 | 2.9 |
| | Totale | 300 | 100.0 | 153 | 51.0 | 140 | 46.7 |
+-------+---------------------------------------+--------+-------+---------+------+---------+------+
xtab_u¶
xtab_u(varname[, by: varname]) funziona in modo analogo a xtab, ma usa dati non ponderati.
get_data¶
get_data(varlist, options={}) restituisce dei vettori con i dati delle variabili indicate.
Opzioni:
- as_num: converte i dati in numerici (default false)
- jitter: aggiunge “rumore” ai dati numerici (true oppure un valore, default false)
- if: filtro per selezionare un sottoinsieme di casi (Espressioni)
get_last_id¶
get_last_id restituisce l’id dell’ultima tabella generata.
valid?¶
valid?(varname) restituisce true se la variabile contiene casi validi, altrimenti restituisce false.
missing?¶
missing?(varname) restituisce true se la variabile contiene solo casi mancanti, altrimenti restituisce false.
get_selection¶
get_selection(expression) restituisce il numero di casi pesati selezionati dall’espressione.
Vedi anche Espressioni e parse
get_selection_u¶
get_selection_u(expression) restituisce il numero di casi non pesati selezionati dall’espressione.
Vedi anche Espressioni e parse
Data e ora¶
L’oggetto time contiene la data e l’ora corrente. E’ possibile estrarre alcuni dati applicando vari metodi:
- year: anno
- month: numero del mese
- day: numero del giorno del mese
- wday: numero del giorno della setitmana
- yday: numero del giorno dell’anno
- today(format): stringa con la data corrente; formato di default: %Y%m%d
- now(format): stringa con la data e l’ora corrente; formato di default: %Y%m%d%H%M%S
- days: vettore con il nome dei giorni della settimana in inglese
- giorni: vettore con il nome dei giorni della settimana in italiano
- months: vettore con il nome dei mesi in inglese
- mesi: vettore con il nome dei mesi in italiano
- freeze!: blocca la data e l’ora anche per le successive richieste all’oggetto time
1 2 3 4 5 6 | # se è il 31/12/2012 23:59:59
spss.open "data_#{time.year}" # => data_2012
spss.open "data_#{time.today}" # => data_20121231
spss.open "data_#{time.now}" # => data_20121231235959
spss.open "data_#{time.year}_" + time.mesi[time.wday][0..2] # => data_2012_dic
spss.open "data" + time.year.to_s + time.mesi[time.wday][0..2].upcase # => data2012DIC
|
Funzioni per i titoli delle tabelle¶
$vl()¶
$vl(varname) [1] inserisce nel titolo della tabella l’etichetta della variabile. L’argomento varname è facoltativo, se omesso viene considerata la prima variabile della tabella. Altrimenti si può utilizzare qualsiasi nome di variabile esistente nel file di dati, anche se non fa parte della tabella. Il nome deve essere inserito senza virgolette. Le parentesi vanno comunque inserite.
Le varianti $VL(), $Vl() mettono l’etichetta rispettivamente in maiuscolo e con la prima lettera maiuscola.
1 2 3 | cat :d12_1, "Esprima un giuduzio relativamente ai seguenti personaggi;\n$vl()"
ord [:aggr12_1, :d12_1], "Esprima un giuduzio relativamente ai seguenti personaggi;\n$VL(d12_1)"
|
$vn()¶
$vn(start) inserisce nel titolo della tabella il nome della variabile. Le varianti $VN(), $Vn() mettono il nome rispettivamente in maiuscolo e con la prima lettera maiuscola. Se sono presenti più variabili nella tabella, cercherà di inserire la radice comune. start è facoltativo e indica il numero di carattere del nome da cui partire. Il comando è utile per i parametri :title_template e :title_prefix.
1 | title_template "Tab.$tn() - $VN() - $vl()"
|
$tn()¶
$tn(offset) inserisce nel titolo della tabella il numero progressivo della tavola. offset è facoltativo e deve essere un numero positivo o negativo che verrà sommato al numero della tavola. Il comando è anche utile per i parametri :title_template e :title_prefix.
1 | title_prefix "Tabella $tn(-1) : "
|
Note
[1] | $vl() sostituisce $var_label() che viene comunque ancora accettato. |