Funzioni informative

Le funzioni seguenti restituiscono informazioni relative alle variabili e ai dati presenti nel dataset. Sono utili per ispezionare i dati, per generare titoli e note o per condizionare il comportamento e rendere più flessibile lo script di pTabs.

Variabili

info

info stampa nell’output delle informazioni relative al dataset attivo. Restituisce un hash con le numerosità.

1
2
3
4
5
6
7
8
9
+ Dataset [0] 180 record e 652 variabili:
+ valide: 229
+ vuote: 423
+ stringa: 34
+ numeriche: 618
+ integer: 28
+ float: 0
+ single: 590
+ date-time: 0

exist?

Controlla se le variabili indicate sono presenti nel dataset corrente e restituisce true se tutte le variabili esistono e false se almeno una variabile non è stata trovata.

1
2
3
 cat :v10045 if exist?(:v10045)
 ord [:eta, :etaq] if exist?(:eta, :etaq)
 md s(:v100_, 1..10) if exist?(s(:v100_, 1..10))

exist!

Controlla se le variabili indicate sono presenti nel dataset corrente e interrompe l’esecuzione se una o più variabili non esistono. Restituisce true se tutte le variabili sono state trovate.

1
 exist! :eta, :area, s(:d7_, 1..10)

not_exist!

Controlla se le variabili indicate sono presenti nel dataset corrente e interrompe l’esecuzione se una o più variabili esistono. Restituisce true se tutte le variabili non sono state trovate.

1
 not_exist! :eta, :area, s(:d7_, 1..10)

existing, existing!

existing controlla se le variabili indicate sono presenti nel dataset corrente e restituisce l’elenco (Array) delle solo variabili esistenti.
La variante existing! stampa nel log le variabili non esistenti.

1
2
 cat existing(:v1, :v2, :v3)
 md existing(s(:d7_, 1..99))

vars, allvars

vars o allvars restituisce un vettore con i nomi di tutte le variabili presenti nel file di dati.

str_vars, num_vars, int_vars, flt_vars, sng_vars, dtm_vars

  • str_vars: restituisce l’elenco delle variabili di tipo string presenti nel file di dati
  • num_vars: restituisce l’elenco delle variabili numeriche presenti nel file di dati
  • int_vars: restituisce l’elenco delle variabili di tipo integer presenti nel file di dati
  • flt_vars: restituisce l’elenco delle variabili di tipo float presenti nel file di dati
  • sng_vars: restituisce l’elenco delle variabili di tipo single presenti nel file di dati
  • dtm_vars: restituisce l’elenco delle variabili di tipo date, time e datetime presenti nel file di dati

vars?

vars? stampa nella finestra di output il numero e l’elenco dei nomi delle variabili presenti nel file di dati.

usedvars

usedvars restituisce un vettore con i nomi di tutte le variabili utilizzate nelle tavole (pannelli, fiancate, filtri e pesi).

1
2
3
4
5
# stampa nel log le variabili utilizzate nella tabulazione
p usedvars

# esporta un file contenente solo le variabili utilizzate nella tabulazione
xlsx.save "dati", :keep => usedvars

valid?

valid?(varlist) restituisce true se la variabile contiene casi validi, altrimenti restituisce false. Se viene passata più di una variabile, restituisce true se almeno una variabile contiene dei casi validi.

empty?

empty?(varlist) restituisce true se la variabile contiene solo casi mancanti, altrimenti restituisce false. Se viene passata più di una variabile, restituisce true se tutte le variabili contengono solo casi mancanti.

valid_vars

valid_vars(varlist) restituisce l’elenco delle variabili che contengono valori validi tra le variabili indicate. Se non viene specificata nessuna variabile, controlla tutte le variabili presenti nel dataset.

empty_vars

empty_vars(varlist) restituisce l’elenco delle variabili vuote tra le variabili indicate. Se non viene specificata nessuna variabile, controlla tutte le variabili presenti nel dataset.

vars_with_values

vars_with_values(varlist, valuelist) restituisce l’elenco delle variabili che contengono almeno uno dei valori indicati.

vars_without_values

vars_without_values(varlist, valuelist) restituisce l’elenco delle variabili che non contengono nessuno dei valori indicati.

Etichette e livelli

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, 1..10)).rep do |label|
   ...
 end

get_levels

get_levels(varname) restituisce un hash con i codici e le etichette dei livelli della variabile.

get_levels(varname).keys restituisce un array con solo i codici. get_levels(varname).values restituisce un array con solo le etichette.

1
2
3
4
5
get_levels(:area).each do |code, lab|
  filter :area => code, :label => "Area: "+lab
  cat :d1
  ord :d5
end

get_codes, get_values, get_codes_values

Restituiscono un array con i codici etichettati della variabile e/o i valori effettivamente presente nei dati.

  • get_codes(varname): i codici dei livelli
  • get_values(varname): i valori presenti nei dati
  • get_codes_values(varname): l’unione dei due insiemi
1
2
3
get_codes(:d6_5)            # => [1, 2, 3, 4]
get_values(:d6_5)           # => [0, 1, 2, 3]
get_codes_values(:d6_5)     # => [0, 1, 2, 3, 4]

get_max_level

get_max_level(varname) restituisce il numero totale dei livelli della variabile. Equivale a get_max_level(varname).size.

Dataset

nrows

nrows restituisce il numero di record totale del dataset.

active_rows

Se è attivo un filtro, active_rows restituisce il numero di record filtrati, altrimenti restituisce il numero di record totale del dataset.

column

column(varname) restituisce un vettore con i dati della variabile. Se è attivo un filtro, restituisce solo i dati filtrati.

columns

columns(varlist) restituisce una matrice con i dati delle variabili. Se è attivo un filtro, restituisce solo i dati filtrati.

Dati

I seguenti metodi get_, nel caso sia attiva una variabile di ponderazione, restituiscono i dati ponderati mentre le varianti che terminano per _u restituiscono sempre i dati non ponderati (unweighted).
Questi metodi, nel caso sia attivo un filtro, restituiscono i dati filtrati.

Argomenti generali:

  • :ndec => #: il numero di decimali

get_base, get_base_u

get_base(varname) restituisce il numero di casi validi di una variabile.

1
2
3
4
5
6
 base_d5 = get_base(:d5)
 if base_d5 > 100
   ord :d5
 end

 ord :d1 if get_base(:d1) > 30

get_counts, get_counts_u

get_counts calcola le distribuzioni di frequenza di una variabile. Restituisce un vettore con un elemento per ciascun valore della variabile costituito a sua volta da un vettore di tre elementi: valore, etichetta valore, conteggio frequenze.

Argomenti:

  • :drop: elimina i livelli con frequenze pari a zero
  • :miss => true|false: aggiunge il conteggio dei valori mancanti (default false)
1
2
3
get_counts(:area)   # [[1, "Nord Ovest", 93], [2, "Nord Est", 50], [3, "Centro", 70], [4, "Sud", 87]]
filter :gender => 2
get_counts(:area)   # [[1, "Nord Ovest", 46], [2, "Nord Est", 22], [3, "Centro", 34], [4, "Sud", 44]]
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_counts2, get_counts2_u

get_counts2 calcola le distribuzioni di frequenza con le percentuali sui casi validi e le percentuali sul totale di una variabile. Restituisce un vettore con un elemento per ciascun valore della variabile costituito a sua volta da un vettore di cinque elementi: valore, etichetta valore, conteggio frequenze, percentuale validi, percentuale totale.

Argomenti:

  • :miss => true|false: aggiunge il conteggio dei valori mancanti (default true)
1
2
get_counts2(:area, :ndec => 2)
# [[1, "Nord Ovest", 93, 31.0, 30.49], [2, "Nord Est", 50, 16.67, 16.39], [3, "Centro", 70, 23.33, 22.95], [4, "Sud", 87, 29.0, 28.52], [nil, nil, 5, nil, 1.64]]

get_freqs, get_freqs_u

get_freqs(varname [, values]) restituisce un hash con le coppie valore/conteggio. E’ possibile indicare come secondo argomento l’elenco dei valori da considerare.

Argomenti:

  • :miss => true|false: aggiunge il conteggio dei valori mancanti (default false o true se values include nil)
1
2
3
4
get_freqs(:area)          # {1=>93, 2=>50, 3=>70, 4=>87}
get_freqs(:area, [2,3])   # {2=>50, 3=>70}
get_freqs(:area, 3)       # {3=>70}
get_freqs(:area, [2,nil]) # {2=>50, nil=>5}

get_pcts, get_pcts_u

get_pcts(varname) restituisce un hash con le coppie valore/percentuale. E’ possibile indicare come secondo argomento l’elenco dei valori da considerare (le percentuali verranno comunque calcolate sul totale di tutti valori).

Argomenti:

  • :miss => true|false: aggiunge il conteggio dei valori mancanti (default false o true se values include nil).
    In caso di inclusione dei valori mancanti, le percentuali verranno calcolate sul totale casi e non sui casi validi.
1
2
3
4
get_pcts(:area, :ndec => 2) # {1=>31.0, 2=>16.67, 3=>23.33, 4=>29.0}
get_pcts(:area, 3..4)       # {3=>23.333333333333332, 4=>29.0}
get_pcts(:area, 4)          # {4=>29.0}
get_pcts(:area, [4,nil])    # {4=>28.524590163934427, nil=>1.639344262295082}

get_val, get_val_u

get_val(varname, value) restituisce la numerosìtà del valore di una variabile. Indicando una lista di valori si ottiene la somma dei valori.

1
2
3
4
5
get_val(:area, 2)      # 50
get_val(:area, 4)      # 87
get_val(:area, [2,4])  # 137
get_val(:area, 22)     # 0
get_val(:d5, nil)      # 30

get_val_pct, get_val_pct_u

get_val_pct(varname, value) restituisce la percentuale del valore di una variabile. Indicando una lista di valori si ottiene la somma delle percentuali dei valori.
In caso di inclusione dei valori mancanti, le percentuali verranno calcolate sul totale casi e non sui casi validi.

1
2
3
4
5
6
get_val_pct(:area, 2)                 # 16.666666666666668
get_val_pct(:area, 4, :ndec => 2)     # 29.0
get_val_pct(:area, [2,4], :ndec => 2) # 45.67
get_val_pct(:area, 22)                # 0
get_val_pct(:area, [2,nil])           # 18.0327868852459
get_val_pct(:area, nil)               # 1.639344262295082

get_mean, get_std, get_serr, get_sum

get_<stat>(varname) restituisce il valore ponderato della statistica di una variabile.

get_mean_u, get_std_u, get_serr_u, get_sum_u

get_<stat>_u(varname) restituisce il valore non ponderato della statistica di una variabile.

get_min, get_max

get_min(varname) restituisce il valore minimo di una variabile.
get_max(varname) restituisce il valore massimo di una variabile.

get_nval

get_nval(varname) restituisce il numero di valori presenti in una variabile.

Altre funzioni

get_last_id

get_last_id restituisce l’id dell’ultima tabella generata.

allstats

allstats restituisce l’elenco delle statistiche disponibili.

Data e ora

L’oggetto time contiene la data e l’ora corrente. E’ possibile estrarre alcuni dati applicando vari metodi:

Metodo Restituisce
today(format) stringa con la data; formato di default: %Y%m%d
now(format) stringa con la data e l’ora; formato di default: %Y%m%d%H%M%S
year anno
month numero del mese
day numero del giorno del mese
wday numero del giorno della setitmana
yday numero del giorno dell’anno
day(abbr) nome del giorno della settimana in inglese
giorno(abbr) nome del giorno della settimana in italiano
month(abbr) nome del mese in inglese
mese(abbr) nome del mese in italiano
days(abbr) vettore con il nome dei giorni della settimana in inglese
giorni(abbr) vettore con il nome dei giorni della settimana in italiano
months(abbr) vettore con il nome dei mesi in inglese
mesi(abbr) vettore con il nome dei mesi in italiano
freeze! blocca la data e l’ora anche per le successive richieste all’oggetto time

Per i metodi che restituiscono le stringhe dei giorni e dei mesi, le versioni con il punto esclamativo finale restituiscono le stringhe in maiuscolo. Il pagametro abbr indica il numero di caratteri a cui abbreviare le stringhe.

E’ inoltre possibile generare un nuovo oggetto time con una data (e ora) di propria scelta: time(datatime).

1
2
3
4
5
6
7
8
9
 # se è il 31/12/2018 alle ore 23:59:59
 spss.save "results_#{time.year}"                    # => results_2018
 spss.save "results_" + time.today                   # => results_20181231
 spss.save "results_" + time.now                     # => results_20181231235959

 # genero data_produz con una data specifica
 data_produz = time("13/06/2019")
 spss.open "data_#{data_produz.year}_#{data_produz.smonth(3)}"      # => data_2019_Jun
 spss.open "data" + data_produz.year.to_s + data_produz.smese!(3)   # => data2019GIU

Funzioni per i titoli delle tabelle

\n

\n in un titolo genera un a capo.

$vl()

$vl(varname) 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)"

template

I file .yml delle etichette (vedi Internazionalizzazione) contengono i seguenti template:

  • title_template: il template per il titolo delle tabelle
  • autotab_title_template: il template per il titolo delle tabella generate da autotab
  • autotab_title_template_syntax: il template per il titolo delle tabella nella sintassi da autotab

Nei template è possibile inserire del testo e utilizzare i seguenti segnaposti:

  • %{n}: il numero della tabella
  • %{v}: il nome della variabile
  • %{t}: il titolo della tabella (generato da pTabs o inserito esplicitamente)
  • %{l}: l’etichetta della variabile (solo per title_template)

E’ possibile inoltre aggiungere ai segnaposti dei suffissi per formattare le stringhe:

  • f: (capitalize first) la prima lettera maiuscola, il resto invariato
  • c: (capitalize) la prima lettera maiuscola, il resto minuscolo
  • t: (titleize) tutte le iniziali maiuscole, il resto minuscolo
  • u: (upcase) tutto maiuscolo
  • d: (downcase) tutto minuscolo

Solo per nome variabile:

  • .: (dot) sostituisce il punto all’underscore

File language\xx.yml:

xx:
  labels:

    title_template:                "%{t}"
    autotab_title_template:        "Tabella %{n} - [%{v}] %{tf}"
    autotab_title_template_syntax: "%{vu.}. %{tf}"

Nella sintassi è disponibile anche l’istruzione title_template:

1
title_template "Tab.%{n} [%{v}]\n%{t}"