Accesso diretto ai dati¶
f()¶
f(:nomevar).data o f(:nomevar).d restituisce un vettore con i dati della variabile.
f(:nomevar) << [] assegna i dati alla variabile, Il vettore deve contenere l’esatto numero di valori (uno per ciascun record).
1 2 3 4 5 6 7 8 | f(:v1).data # => [nil, nil, nil, nil, 2, 2, 1, 3, 2, 2, 3, 3, 4, 4, 2, 3, 3, 2, 2, 3, ...]
f(:v1) << [0, 0, 0, 0, 2, 2, 1, 3, 2, 2, 3, 3, 4, 4, 2, 3, 3, 2, 2, 3, ...]
f(:v1) << f(:v1).d.map { |x| x ? x : 9 }
data = f(:d5).d
d5mean = data.compact.sum.to_f / data.compact.size
f(:d5) << data.map { |x| x ? x : d5mean.round(2) }
|
row_index :nomevar imposta l’indice sui valori di una specifica variabile. row_index riattribuisce l’indice al numero di riga.
current_index # sposta l’indice al record indicato.
index¶
Le funzioni c e row possono utilizzare come indice il numero di riga oppure una variabile contenete valori univoci.
row_index :nomevar imposta l’indice sui valori di una specifica variabile.
row_index riattribuisce l’indice al numero di riga.
current_index # sposta l’indice al record indicato.
c() o cell()¶
c(:nomevar, index) identifica una cella della matrice di dati corrispondente alla variabile (:nomevar) per un dato record (index). Se uno o entrambi gli argomenti vengono omessi, verranno utilizzati quelli dell’istruzione c precedente.
c().value restituisce il valore della cella.
c().value = value o c() << value asseggna un valore alla cella.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | c(:v1, 2) # => [v1:9] 9
c(:v1, 2).value # => 0
c(:v1, 2) << 9
f(:v1).data # => [0, 9, 0, 0, 2, 2, 1, 3, 2, 2, 3, 3, 4, 4, 2, 3, 3, 2, 2, 3, ...]
c(:v2_datetime, 1) << Time.parse("2024-06-30 14:32:15")
c(:v2_data, 1) << Date.parse("2024-06-30")
c(:v2_ora, 1) << 36055 # (10:00:55)
row_index :serial_no
c(:v1, 3450) << 7
current_index 3456
c(:v1) << 9
c # => [v1:<3456>] 9
c(:v1).value # => 9
c(3456).value # => 9
c.value # => 9
|
E’ possibile indicare come indice il nome della variabile e il valore c(:nomevar, :index_var => index_value). In tal caso la variabile indice verrà impostata solo in modo temporaneo.
1 2 | c(:v1, :serial_no => 3450) << 7
c(:v1, :serial_no => 3450).value
|
row¶
row restituisce il contenuto di un record del dataset sotto forma di un Hash. Il risultato può essere assegnato a una variabile. Il metodo .values dell’hash restituisce eventualmente l’elenco dei valori.
- #: un numero che identifica il numero di riga o il valore della variabile indice se impostata
- :id_varname => value: identifica il record con quesso specifico valore su una variabile che funge da identificativo di record
- :keeep => varlist: permette di restituire solo le variabili specificate
1 2 3 4 5 6 7 | p row(2) # => {"ser_no"=>3, "sesso"=>1.0, "area"=>1, "d1"=>4, "d7_1"=>1, "d7_2"=>0, "d7_3"=>0, "d7_4"=>1,...
p row(2, :keep => s(:d7_, 1..3)) # => {"d7_1"=>1, "d7_2"=>0, "d7_3"=>0}
p row(:ser_no => 12) # => {"ser_no"=>12, "sesso"=>2.0, "area"=>1, "d1"=>4, "d7_1"=>nil, "d7_2"=>0, "d7_3"=>0, "d7_4"=...
p row(:ser_no => 12, :keep => s(:d7_, 1..3)) # => {"d7_1"=>nil, "d7_2"=>0, "d7_3"=>0}
p row(:ser_no => 12, :keep => s(:d6_, 1..10)).values # => [nil, 2, 2, 4, 3, 2, 3, 4, 1, 1]
rec45 = row(:ser_no => 45)
|
rows¶
rows permette di accedere ai dati del dataset un record alla volta. Se è attivo un filtro, restituisce solo i record attivi.
All’interno del blocco è possibile far riferimento al valore della variabile, sia con la sintassi c(:v1).value, sia semplicemente con il nome della variabile v1 (senza virgolette o due punti). Le espressioni, gli operatori, ecc. utilizzano la sintassi di Ruby: equal ==; and &&; or ||.
Per assegnare un valore alla variabile, è possibile utilizzare sia la sintassi c(:v1) << value (o l’equivalente c(:v1).value = value), sia la sintassi set :v1 => value (che permette anche assegnamenti su più variabili).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | rows.each do |row|
c(:v1) << 99 if c(:v100).value == 9
set [:v2, :v3] => 0 unless v500 # ovvero: if v500 == nil
end
rows.each do |row|
break if row.index > 100 # .index restituisce sempre il numero del record
if area == 1 && npc == 4 && x3 == nil
set :v5 => 4, s(:v7_, 1..10) => 0, [:v23, :v24, :v25] => [1, 2, 3]
end
end
rows.each do |row|
if d5 == nil
puts "- (#{row.index}) Record ID: #{serial_no}"
p [area, sesso, eta, titolo, prof, comune]
end
end
# - (5) Record ID: 81
# [3, 2, 2, 3, 3, "AIELLI"]
# - (11) Record ID: 88
# [3, 1, 3, 3, 1, "AIRASCA"]
# - (12) Record ID: 91
# [3, 1, 3, 3, 1, "AIRUNO"]
# - (16) Record ID: 213
# [1, 2, 1, 2, 3, "ACQUANEGRA CREMONESE"]
|
rows.to_h(varlist) genera un vettore contenente per ciascun record un hash dei valori delle variabili specificate.
1 2 3 4 5 6 7 8 | dset = rows.to_h(:serial_no, :area, :sesso, :d1, :d2, :d5)
pp dset
# [{"serial_no"=>2, "area"=>1, "sesso"=>2, "d1"=>4, "d2"=>3, "d5"=>4},
# {"serial_no"=>99, "area"=>1, "sesso"=>2, "d1"=>-2, "d2"=>1, "d5"=>0},
# {"serial_no"=>10, "area"=>1, "sesso"=>1, "d1"=>4, "d2"=>1, "d5"=>4},
# {"serial_no"=>29, "area"=>1, "sesso"=>1, "d1"=>4, "d2"=>1, "d5"=>4},
# {"serial_no"=>32, "area"=>1, "sesso"=>2, "d1"=>4, "d2"=>3, "d5"=>2},
# ...]
|
rows.to_a(varlist) genera un vettore contenente per ciascun record un vettore dei valori variabili specificate.
1 2 3 4 5 6 7 8 | dset = rows.to_a(:serial_no, :area, :sesso, :d1, :d2, :d5)
pp dset
# [[2, 1, 2, 4, 3, 4],
# [99, 1, 2, -2, 1, 0],
# [10, 1, 1, 4, 1, 4],
# [29, 1, 1, 4, 1, 4],
# [32, 1, 2, 4, 3, 2],
# ...]
|
column¶
column restituisce un vettore con i dati della variabile. Se è attivo un filtro, restituisce solo i dati dei record attivi.
1 | column :etaq # => [15, 24, 27, 19, 25, 20, 33, 20, 34, 27, 26, 29, ...]
|
columns¶
columns restituisce un vettore con i vettori dei dati delle variabili. Se è attivo un filtro, restituisce solo i dati dei record attivi.
1 | columns :area, :etaq # =>[[1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, ...], [15, 24, 27, 19, 25, 20, 33, 20, 34, 27, 26, 29, ...]]
|
matrix¶
matrix restituisce un vettore con i vettori delle righe dei dati delle variabili. Se è attivo un filtro, restituisce solo i dati dei record attivi.
1 | matrix :sesso, :area, :etaq # => [[2, 1, 15], [2, 1, 24], [1, 1, 27], [1, 1, 19], [2, 1, 25], [1, 3, 20], [2, 3, 33], ...]
|
add o add_records¶
add o add_records accoda nuovi records al dataset.
Parametri:
- number: aggiunge il numero indicato di record vuoti
- []: un vettore contenente una riga di dati. E’ necessario specificare tanti dati quante sono le variabili
- [[],[]...]: un vettore contenente un vettore per ciascuna riga di dati E’ necessario specificare tanti dati quante sono le variabili
- {}: un hash con le coppie :nome variabile => valore di una riga di dati. E’ possibile non indicare tutte le variabili; i relativi dati verranno impostati a nil
- [{},{}...]: un vettore contenente un hash per ciascuna riga di dati E’ possibile non indicare tutte le variabili; i relativi dati verranno impostati a nil
1 2 3 4 5 6 7 | spss.open "datafile", :keep => [:v1, :v2, :v3, :v4, :v5]
add 2
add [401, 2, 4, 9, 0.0001]
add [ [402, 2, 4, 9, 0.0001], [403, 1, 3, 2, 1.0001] ]
add v1: 404, v2: 2, v3: 4, v4: 9, v5: 0.0001
add [ {v1: 404, v3: 4, v4: 9}, {v1: 405, v2: 1, v5: 1.0001} ]
|
Generazione di un dataset nello script¶
pTabs all’avvio o quando si crea un nuovo workspace (ws.new), genera un dataset vuoto a cui è possibile aggiungere variabili e records di dati.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | new :serial, :type => :int, :size => 2
new :price, :type => :float, :size => 8, :ndec => 3
new :name, :type => :string, :size => 10
add [
[1, 0.2 , "AAA"],
[2, 12.3 , "BBB"],
[3, 124.25, "CCC"],
[4, 1.4 , "DDD"],
]
add [
{serial: 5, price: 45.67},
{serial: 6, name: "FFF"},
]
list
|
- la variabile <serial> è stata creata
- la variabile <price> è stata creata
- la variabile <name> è stata creata
(list 6 records)
+---+----------+-----------+---------+
| # | serial | price | name |
+---+----------+-----------+---------+
| | int(2.0) | flt(8.3) | str(10) |
+---+----------+-----------+---------+
| 1 | 1 | 0.2 | AAA |
| 2 | 2 | 12.3 | BBB |
| 3 | 3 | 124.25 | CCC |
| 4 | 4 | 1.4 | DDD |
| 5 | 5 | 12345.678 | |
| 6 | 6 | | FFF |
+---+----------+-----------+---------+
Nel caso non sia stata creata nessuna variabile, pTabs le genera automaticamente in base ai dati forniti.
1 2 3 4 5 6 7 8 | ws.new :ds2
add [
[1, 0.2 , "AAA"],
[2, 12.3 , "BBB"],
[3, 124.25, "CCC"],
[4, 1.4 , "DDD"],
]
list
|
(list 4 records)
+---+----------+----------+--------+
| # | v1 | v2 | v3 |
+---+----------+----------+--------+
| | int(1.0) | flt(3.2) | str(3) |
+---+----------+----------+--------+
| 1 | 1 | 0.2 | AAA |
| 2 | 2 | 12.3 | BBB |
| 3 | 3 | 124.25 | CCC |
| 4 | 4 | 1.4 | DDD |
+---+----------+----------+--------+
1 2 3 4 5 6 7 8 | ws.new :ds3
add [
{:id => 1, :country => "PT"},
{:id => 2, :country => "IT"},
{:id => 3, :country => "GR"},
{:id => 4, :country => "SP"},
]
list
|
(list 4 records)
+---+----------+---------+
| # | id | country |
+---+----------+---------+
| | int(1.0) | str(2) |
+---+----------+---------+
| 1 | 1 | PT |
| 2 | 2 | IT |
| 3 | 3 | GR |
| 4 | 4 | SP |
+---+----------+---------+