Visualizzazione post con etichetta inserimento dati. Mostra tutti i post
Visualizzazione post con etichetta inserimento dati. Mostra tutti i post

martedì 9 giugno 2020

Inserimento manuale dei dati [3]

Abbiamo già visto alcuni esempi di dati riportati direttamente (cablati) nel codice R, dove comunque possono essere modificati a piacere [1, 2]. Una modalità molto elementare ma utile nella pratica quando si debbano inserire pochi dati, come in un test chi-quadrato, in un grafico a torta o quant'altro.

Vediamo ora due nuovi esempi un po' particolari, in quanto prevedono l'inserimento dei dati in modo interattivo, cioè da parte di un operatore che deve inserire manualmente i dati nella Console di R su richiesta, nel punto previsto dallo script, perché l'esecuzione dello script possa proseguire. Si tratta di una modalità di inserimento dei dati che, mentre consente di familiarizzare con qualche aspetto un po' più tecnico di R, può risultare utile in casi particolari.

Copiate lo script che segue quindi incollatelo nella Console di R e premete ↵ Invio:

# INSERIMENTO MANUALE DEI DATI [3a]
# inserimento di un singolo dato
#
# predispone la funzione inserisci_un_dato() compresa tra { e }
inserisci_un_dato <- function() {
# legge il dato inserito nella Console di R
datoinserito <- readline("Dato da elaborare = ")
# converte il dato inserito in un numero
datoinserito <- as.numeric(datoinserito)
# calcola la radice quadrata del numero inserito e mostra il risultato
print(paste("La radice quadrata di", datoinserito, "è", sqrt(datoinserito)), quote=FALSE)
}
# esegue la funzione inserisci_un_dato() in modalità interattiva attendendo un input da tastiera
if(interactive()) inserisci_un_dato()

Con le prime quattro righe di codice viene predisposta la funzione inserisci_un_dato, il cui codice è incluso tra la parentesi graffa { e la parentesi graffa }. La funzione prevede di acquisire il dato (un solo dato) dalla Console di R con readline(), trasformare quanto immesso in un numero con as.numeric() quindi calcolarne la radice quadrata e mostrare il risultato con la quarta riga di codice.

L'ultima riga di codice con if(interactive()) manda in esecuzione la funzione inserisci_un_dato() in modo interattivo, restando in attesa dell'immissione da tastiera nella Console di R del dato. 

I commenti inseriti nel codice R sono sufficientemente esplicativi di quanto avviene, mentre la documentazione delle funzioni impiegate può essere visualizzata come al solito digitando help(nomedellafunzione) nella Console di R.

Ora copiate lo script che segue quindi incollatelo nella Console di R e premete ↵ Invio:

# INSERIMENTO MANUALE DEI DATI [3b]
# inserimento di più dati
#
# imposta 1 come dato iniziale
datoinserito <- 1
# ripete le istruzioni inserite nel loop fino a quando il dato inserito è diverso da 0 (zero)
while(datoinserito!=0) {
# richiede di inserire la temperatura in gradi Celsius
datoinserito <- readline("Temperatura in gradi Celsius = ")
# converte il dato inserito in un numero
datoinserito <- as.numeric(datoinserito)
# effettua il calcolo e presenta il risultato
print(paste(datoinserito, "gradi Celsius corrispondono a", ((datoinserito * 1.8) + 32), "gradi Fahrenheit"), quote=FALSE)
}

Mediante la funzione while() viene realizzato un loop, il cui codice è incluso tra la parentesi graffa { e la parentesi graffa }, che viene reiterato fino a quando il dato inserito risulta diverso da 0 (datoinserito!=0). Quando il dato inserito è 0 il loop viene terminato.

Il codice prevede che nella Console di R sia inserito manualmente da tastiera un dato di temperatura (datoinserito) in gradi Celsius (°C), per il quale viene calcolata e mostrata la corrispondente temperatura in gradi Fahrenheit (°F) essendo

°F = (°C ∙ 1.8) + 32

Possono essere inseriti anche valori negativi di temperatura in gradi Celsius.

Anche in questo caso i commenti inseriti nel codice R sono sufficientemente esplicativi di quanto avviene mentre di nuovo al bisogno la documentazione delle funzioni impiegate può essere visualizzata digitando help(nomedellafunzione) nella Console di R.

Per entrambi gli script ci si può inoltre divertire a immaginare i controlli che potrebbero essere eseguiti sul dato inserito, e per il secondo script anche a trovare qualcosa di meglio dell'uscita dal loop piuttosto grezza realizzata inserendo 0 come dato, ma questo va al di la degli scopi del post.

In definitiva i due script, pur nella loro semplicità, forniscono come sottoprodotto utile due esempi didattici:
di come con R sia possibile realizzare una funzione, cioè un blocco di codice che può essere eseguito semplicemente richiamando nomedellafunzione(eventualiargomenti);
di come con R sia possibile realizzare un loop (ciclo, iterazione), cioè la ripetizione ciclica di una sequenza di operazioni finché risulta vera la condizione di controllo prefissata, una struttura di controllo ampiamente utilizzata in qualsiasi linguaggio di programmazione, oltre che all'interno delle funzioni di R.


----------

[1] Vedere il post Inserimento manuale dei dati [1] per l'assemblamento dei vettori in matrici.

[2] Vedere il post Inserimento manuale dei dati [2] per l'assemblamento di vettori in tabelle.

Nota: parliamo di array o vettore nel caso di dati numerici monodimensionali, disposti su una sola riga, 

8
6
11
7

di matrice nel caso di dati numerici disposti su più righe e più colonne

8
9
15
14
6
7
18
12
11
8
17
13
7
4
19
17

e di tabella nei casi in cui il contenuto, disposto su più righe e più colonne, è rappresentato oltre che da dati numerici, anche da testo e/o operatori logici

M
7
9
VERO
F
3
12
VERO
F
5
10
FALSO

Di fatto i vettori sono matrici aventi una sola riga o una sola colonna. Una matrice con una sola riga e più colonne è detta matrice riga o vettore riga, mentre una matrice con una sola colonna e più righe è detta matrice colonna o vettore colonna.


lunedì 26 novembre 2018

Inserimento manuale dei dati [2]

Sapere inserire a mano i dati in R può essere utilePer questo ho predisposto due esempi che illustrano la sintassi da utilizzare per inserire direttamente da tastiera array (vettori) e combinarli in matrici o tabelle [1] assegnando i nomi alle variabili e ai casi.

Questo script genera una matrice di due righe per due colonne. Si tratta della struttura dati tipica necessaria per effettuare il test chi-quadrato, per effettuare il test di Fisher, il test di McNemar o impiegare il teorema di Bayes [2].

Copiate lo script, incollatelo nella Console di R e premete ↵ Invio.

# DA QUATTRO VALORI GENERA UNA MATRICE 2x2
#
cells <- c(1, 26, 24, 68) # genera l'array cells con i valori numerici contenuti nelle celle
cells # mostra l'array cells
#
rnames <- c("Riga 1", "Riga 2") # genera l'array rnames con i nomi delle righe
rnames # mostra l'array rnames
#
cnames <- c("Colonna 1", "Colonna 2") # genera l'array cnames con i nomi delle colonne
cnames # mostra l'array cnames
#
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames, cnames)) # costruisce la matrice a partire dagli array cells, rnames, cnames
mymatrix # mostra la matrice 
#

Dopo avere eseguito lo script utilizzate i tasti Pag-su e Pag-giù per scorrere nella finestra della Console di R quanto è accaduto.

Mediante la funzione c() [3] sono generati gli array che mediante l'operatore di assegnamento <- vengono denominati cells, rnames, cnames e contengono rispettivamente i dati (cells), i nomi delle righe (rnames) e i nomi delle colonne (cnames).

Mediante la funzione matrix() [4] gli array sono combinati nella matrice mymatrix di 2 righe (nrow=2) per due colonne (ncol=2) inserendo i valori per riga (byrow=TRUE) e quindi da sinistra a destra e dall'alto in basso ottenendo quindi la matrice desiderata alla quale con l'ultimo argomento (dimnames=list(rnames, cnames)) sono assegnati i nomi alle righe e alle colonne.

Questo è il contenuto dell'oggetto mymatrix definitivo riportato da R al termine dell'elaborazione dopo l'ultimo comando mymatrix:

> mymatrix
       Colonna 1 Colonna 2
Riga 1         1        26
Riga 2        24        68

Quest'altro script genera una tabella (dataframe) che contiene valori numerici, alfanumerici e logici, e assegna i nomi alle variabili (colonne).

Copiatelo per intero quindi incollatelo nella Console di R e premete ↵ Invio:

# GENERA UNA TABELLA (DATAFRAME) DI 3 COLONNE PER 4 RIGHE
#
d <- c(9901, 9902, 9903, 9904) # genera un array con quattro valori numerici
d # mostra l'array d
#
e <- c("rosso", "bianco", "blu", NA) # genera un array con quattro valori alfanumerici, NA=Not Available
e # mostra l'array e
f <- c(TRUE,TRUE,TRUE,FALSE) # genera un array con quattro valori logici
f # mostra l'array f
#
mytable <- data.frame(d, e, f) # genera una tabella (dataframe) a partire dagli array d, e, f
mytable # mostra il contenuto della tabella
#
names(mytable) <- c("Codice", "Colore", "Dato valido") # assegna i nomi alle variabili/colonne
row.names(mytable) <- c("A", "B", "C", "D") # sostituisce gli identificativi numerici di riga di R con nuovi descrittori univoci dei casi/righe
mytable # mostra il contenuto della tabella 
#

Dopo avere eseguito lo script utilizzate casi i tasti Pag-su e Pag-giù per scorrere nella finestra della Console di R quanto è accaduto.

Qui di nuovo con la funzione c() sono generati gli array che mediante l'operatore di assegnamento <- vengono denominati d, e, f e che subito dopo sono combinati mediante la funzione data.frame() nella tabella mytable.

Successivamente con la funzione names() sono generati i nomi che vengono assegnati alle colonne/variabili della tabella e con la funzione row.names() sono sostituiti gli identificativi numerici assegnati di default ai casi/righe.

Questo è il contenuto dell'oggetto definitivo riportato al termine dell'elaborazione dopo l'ultimo comando mytable:

> mytable # mostra il contenuto della tabella 
  Codice Colore Dato valido
A   9901  rosso        TRUE
B   9902 bianco        TRUE
C   9903    blu        TRUE
D   9904   <NA>       FALSE

Anche se il significato dei vari passaggi è stato illustrato con i commenti inclusi negli script, si ricordano alcune regole generali:
→ i nomi assegnati agli oggetti che vengono generati (cells, rnames, d, fmytable e quant'altro) possono essere stabiliti liberamente;
→ potete stabilire liberamente anche i nomi da assegnare alle colonne/variabili e ai casi/righe;
per vedere il contenuto di un oggetto è sufficiente digitare nella Console di R il nome dell'oggetto;
→ una tabella per definizione può contenere sia valori numerici, sia valori alfanumerici (stringhe di testo), sia valori logici;
→ se un dato non è disponibile, al posto del dato va inserita la sigla NA (Not Available).

Se siete interessati al tema potrebbero esservi utili anche gli esempi riportati in:

----------

[1] Parliamo di array o vettore nel caso di dati numerici monodimensionali, disposti su una sola riga, 

8
6
11
7

di matrice nel caso di dati numerici disposti su più righe e più colonne

8
9
15
14
6
7
18
12
11
8
17
13
7
4
19
17

e di tabella nei casi in cui il contenuto, disposto su più righe e più colonne, è rappresentato oltre che da dati numerici, anche da testo e/o operatori logici

M
7
9
VERO
F
3
12
VERO
F
5
10
FALSO

[2] Vedere le rispettive voci alla pagina Indice.

[3] Digitate help(c) nella Console di R per la documentazione della funzione c().

[4] Digitate help(matrix) nella Console di R per la documentazione della funzione matrix.

domenica 25 novembre 2018

Inserimento manuale dei dati [1]

Inserire a mano i dati in R non accade di frequente, ma è utile quando i dati da inserire sono pochi, come ad esempio quando si vuole effettuare un test chi-quadrato [1], impiegare il teorema di Bayes [2] o realizzare dei grafici a torta [3].

Per questo ho predisposto due esempi che illustrano la sintassi da utilizzare per inserire direttamente da tastiera array (vettori) e combinarli in matrici assegnando i nomi alle variabili e ai casi [4].

Il primo esempio genera un vettore (array), lo trasforma in una matrice, assegna un nuovo nome alla variabile/colonna e infine assegna un nuovo descrittore a ciascuno dei casi/righe.

Per eseguire lo script copiatelo quindi incollatelo nella Console di R e premete ↵ Invio.

# GENERA UN ARRAY E LO TRASFORMA IN UNA MATRICE
#
x <- c(4.2, 6.8, 2.5, 8.3, 5.4, 7.9, 5.3, 6.7, 2.2, 3.1) # genera l'array x
x # mostra l'array x
mean(x) # calcola la media
#
mymatrix <- data.frame(x) # trasforma l'array x in una matrice
mymatrix # mostra la matrice con i casi/righe identificati automaticamente da R
mean (mymatrix$x) # calcola la media
#
names(mymatrix) <- c("Variabile_1") # assegna un nuovo nome alla variabile/colonna
mymatrix # mostra la matrice con il nuovo nome della variabile/colonna
mean(mymatrix$Variabile_1) # calcola la media richiamando il nome della variabile/colonna
#
row.names(mymatrix) <- c("Riga_uno", "Riga_due", "Riga_tre", "Riga_quattro", "Riga_cinque", "Riga_sei", "Riga_sette", "Riga_otto", "Riga_nove", "Riga_dieci") # sostituisce gli identificativi numerici di riga di R con nuovi descrittori univoci dei casi/righe
mymatrix # mostra la matrice con i nuovi descrittori dei casi/righe
mean(mymatrix[,1]) # calcola la media richiamando il numero della variabile/colonna
#

Utilizzate i tasti Pag-su e Pag-giù per scorrere nella finestra della Console di R quanto è accaduto, che viene illustrato dai commenti inseriti in ciascuna riga.

Da notare come, quando l'array x viene trasformato nella matrice mymatrix mediante la funzione data.frame() [5], ai casi/righe viene assegnato di default un identificativo numerico univoco.

A questo punto viene impiegata la funzione names() per assegnare un nuovo nome alla variabile. In questo modo gli identificativi numerici dei casi/righe assegnati di default sono sostituiti con dei nuovi descrittori univoci (“Riga_uno”, “Riga_due”, eccetera) impiegando la funzione row.names().

Questo è quindi il contenuto dell'oggetto mymatrix definitivo riportato alla penultima riga di codice:

> mymatrix # mostra mymatrix con il nome della variabile/colonna e i descrittori dei casi
             Variabile_1
Riga_uno             4.2
Riga_due             6.8
Riga_tre             2.5
Riga_quattro         8.3
Riga_cinque          5.4
Riga_sei             7.9
Riga_sette           5.3
Riga_otto            6.7
Riga_nove            2.2
Riga_dieci           3.1

Il calcolo della media è stato introdotto ogni volta per illustrare la sintassi da impiegare. Interessante l'ultimo caso, all'ultima riga di codice: qui la media è stata calcolata richiamando il numero della colonna sulla quale va calcolata, un modo interessante e utile per richiamare una variabile di una matrice o di una tabella.

> mean(mymatrix[,1]) # calcola la media richiamando il numero della colonna
[1] 5.24

In questo secondo esempio di inserimento manuale dei dati sono generati due vettori (array), che sono combinati in una matrice di 2 colonne per 10 righe, quindi alla matrice viene aggiunta una terza colonna/variabile. Sono poi assegnati nuovi nomi alle variabili/colonne e infine viene assegnato un nuovo descrittore univoco a ciascuno dei casi/righe.

Copiate lo script quindi incollatelo nella Console di R e premete ↵ Invio.

# GENERA DUE ARRAY, LI COMBINA IN UNA MATRICE E AGGIUNGE UNA COLONNA
#
x <- c(4.2, 6.8, 2.5, 8.3, 5.4, 7.9, 5.3, 6.7, 2.2, 3.1) # genera l'array x
y <- c(3.1, 2.2, 6.7, 5.3, 7.9, 5.4, 8.3, 2.5, 6.8, 4.2) # genera l'array y
#
mymatrix <- data.frame(x, y) # combina gli array x e y in una matrice
mymatrix # mostra la matrice con i casi/righe identificati automaticamente da R
sapply(mymatrix, mean) # calcola la media
#
mymatrix$z <- mymatrix$x + mymatrix$y # aggiunge una nuova colonna
mymatrix # mostra la matrice con i casi/righe identificati automaticamente da R
sapply(mymatrix, mean) # calcola la media
#
names(mymatrix) <- c("Var_1", "Var_2", "Var_3") # assegna un nuovo nome alle variabili/colonne
mymatrix # mostra la matrice con i nuovi nomi delle variabili/colonne
mean(mymatrix$Var_3) # calcola la media richiamando il nome della variabile/colonna
#
row.names(mymatrix) <- c("Caso_uno", "Caso_due", "Caso_tre", "Caso_quattro", "Caso_cinque", "Caso_sei", "Caso_sette", "Caso_otto", "Caso_nove", "Caso_dieci") # sostituisce gli identificativi numerici di riga di R con nuovi descrittori univoci dei casi/righe
mymatrix # mostra la matrice con i nuovi descrittori dei casi/righe
mean(mymatrix[,3]) # calcola la media richiamando il numero della variabile/colonna
#

Dopo avere eseguito lo script utilizzate i tasti Pag-su e Pag-giù per scorrere nella finestra della Console di R quanto è accaduto, che viene di nuovo illustrato dai commenti inseriti in ciascuna riga.

Da notare nuovamente come una volta combinati i due array x e y nella matrice mymatrix mediante la funzione data.frame() ai casi/righe viene assegnato di default un identificativo numerico univoco. Quindi con la funzione sapply() viene calcolata la media su tutte le colonne/variabili della matrice. Questo accade anche quando viene aggiunta alla matrice una nuova colonna/variabile z contenente la somma della variabile x e della variabile y.

A questo punto viene impiegata la funzione names() per assegnare i nuovi nomi alle variabili delle due colonne mentre con la funzione mean() è possibile calcolare separatamente la media della colonna/variabile Var_3.

Infine gli identificativi numerici delle righe/casi assegnati da R sono sostituiti con dei nuovi descrittori univoci (“Riga uno”, “Riga due”, eccetera) impiegando la funzione row.names().

Questo è quindi il contenuto dell'oggetto mymatrix definitivo riportato alla penultima riga di codice:

> mymatrix # mostra la matrice con i nuovi descrittori dei casi/righe
             Var_1 Var_2 Var_3
Caso_uno       4.2   3.1   7.3
Caso_due       6.8   2.2   9.0
Caso_tre       2.5   6.7   9.2
Caso_quattro   8.3   5.3  13.6
Caso_cinque    5.4   7.9  13.3
Caso_sei       7.9   5.4  13.3
Caso_sette     5.3   8.3  13.6
Caso_otto      6.7   2.5   9.2
Caso_nove      2.2   6.8   9.0
Caso_dieci     3.1   4.2   7.3

Infine l'ultima riga di codice ci ricorda la possibilità di impiegare il numero della colonna per specificare i dati sui quali effettuare il calcolo della media:

> mean(mymatrix[,3]) # calcola la media richiamando il numero della colonna
[1] 10.48

Se siete interessati al tema potrebbero esservi utili anche gli esempi riportati in:


----------

[1] Vedere la sezione Analisi di dati qualitativi alla pagina Indice.


[3] Vedere il post Grafici a torta.

[4] Parliamo di array o vettore nel caso di dati numerici monodimensionali, disposti su una sola riga, 

8
6
11
7

di matrice nel caso di dati numerici disposti su più righe e più colonne

8
9
15
14
6
7
18
12
11
8
17
13
7
4
19
17

e di tabella nei casi in cui il contenuto, disposto su più righe e più colonne, è rappresentato oltre che da dati numerici, anche da testo e/o operatori logici

M
7
9
VERO
F
3
12
VERO
F
5
10
FALSO

Di fatto i vettori sono matrici aventi una sola riga o una sola colonna. Una matrice con una sola riga e più colonne è detta matrice riga o vettore riga, mentre una matrice con una sola colonna e più righe è detta matrice colonna o vettore colonna.

[5] Digitate help(nomedellafunzione) nella Console di R per la documentazione di questa e delle altre funzioni qui impiegate.