Completezza

Pulizia dei dati in R

Maggie Matsui

Content Developer @ DataCamp

Che cos'è un dato mancante?

Un puzzle completato con un pezzo mancante. Descrizione: si verifica quando per una variabile in un'osservazione non è memorizzato alcun valore.

Può essere rappresentato come NA, nan, 0, 99, . ...

Pulizia dei dati in R

Che cos'è un dato mancante?

missing.png

Può essere rappresentato come NA, nan, 0, 99, . ...

Un robot che rappresenta errori tecnici.

Pulizia dei dati in R

Che cos'è un dato mancante?

missing.png

Può essere rappresentato come NA, nan, 0, 99, . ...

Una figura umana che rappresenta un errore umano.

Pulizia dei dati in R

Qualità dell'aria

head(airquality)
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
Pulizia dei dati in R

Qualità dell'aria

head(airquality)
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
Pulizia dei dati in R

Trovare i valori mancanti

is.na(airquality)
     Ozone Solar.R  Wind  Temp Month   Day
[1,] FALSE   FALSE FALSE FALSE FALSE FALSE
[2,] FALSE   FALSE FALSE FALSE FALSE FALSE
[3,] FALSE   FALSE FALSE FALSE FALSE FALSE
[4,] FALSE   FALSE FALSE FALSE FALSE FALSE
[5,]  TRUE    TRUE FALSE FALSE FALSE FALSE
[6,] FALSE    TRUE FALSE FALSE FALSE FALSE
Pulizia dei dati in R

Contare i valori mancanti

# Count missing vals in entire dataset
sum(is.na(airquality))
44
Pulizia dei dati in R

Visualizzare i valori mancanti

library(visdat)
vis_miss(airquality)

Visualizzazione creata dal codice. La colonna più a sinistra ha più righe nere, la seconda ne ha quasi quanto. Le altre colonne non hanno righe nere.

Pulizia dei dati in R

Analizzare la mancanza di dati

airquality %>%
  mutate(miss_ozone = is.na(Ozone)) %>%

group_by(miss_ozone) %>% summarize(across(everything(), median, na.rm = TRUE))
  miss_ozone Ozone Solar.R  Wind  Temp Month   Day
  <lgl>      <dbl>   <int> <dbl> <dbl> <dbl> <dbl>
1 FALSE       31.5     207   9.7    65     7    16
2 TRUE        NA       194   9.7    99     6    15
Pulizia dei dati in R

Analizzare la mancanza di dati

airquality %>%
  arrange(Temp) %>%
  vis_miss()

Stessa visualizzazione di prima, ma nella colonna di Ozone tutti i valori mancanti sono in basso.

Pulizia dei dati in R

Tipi di dati mancanti

A sinistra: un dado a sei facce per rappresentare il Missing Completely at Random. Al centro: un dado con un solo punto su ogni faccia per rappresentare il Missing at Random. A destra: quattro quadrati che puntano l'uno all'altro in ciclo per rappresentare il Missing Not at Random.

Pulizia dei dati in R

Tipi di dati mancanti

Missing completely at random: nessuna relazione sistematica tra dati mancanti e altri valori. Esempio: errori di inserimento dati.

Pulizia dei dati in R

Tipi di dati mancanti

Missing at random: relazione sistematica tra dati mancanti e altri valori osservati. Esempio: dati di ozono mancanti con temperature alte.

Pulizia dei dati in R

Tipi di mancanza

Missing not at random: relazione sistematica tra dati mancanti e valori non osservati. Esempio: temperature mancanti per valori molto alti.

Pulizia dei dati in R

Gestire i dati mancanti

Approcci semplici:

  1. Elimina i dati mancanti
  2. Imputa (riempi) con misure statistiche (media, mediana, moda...) o conoscenza del dominio

Approcci più complessi:

  1. Imputa con un approccio algoritmico
  2. Imputa con modelli di machine learning

 

Approfondisci in Dealing with Missing Data in R

Pulizia dei dati in R

Eliminare i valori mancanti

airquality %>%
  filter(!is.na(Ozone), !is.na(Solar.R))
   Ozone Solar.R  Wind  Temp Month   Day
   <int>   <int> <dbl> <int> <int> <int>
 1    41     190   7.4    67     5     1
 2    36     118     8    72     5     2
 3    12     149  12.6    74     5     3
 4    18     313  11.5    62     5     4
 5    23     299   8.6    65     5     7
 6    19      99  13.8    59     5     8
Pulizia dei dati in R

Sostituire i valori mancanti

airquality %>%
  mutate(ozone_filled = ifelse(is.na(Ozone), mean(Ozone, na.rm = TRUE), Ozone))
   Ozone Solar.R  Wind  Temp Month   Day ozone_filled
   <int>   <int> <dbl> <int> <int> <int>        <dbl>
 1    41     190   7.4    67     5     1         41  
 2    36     118   8      72     5     2         36  
 3    12     149  12.6    74     5     3         12  
 4    18     313  11.5    62     5     4         18  
 5    NA      NA  14.3    56     5     5         42.1
Pulizia dei dati in R

Esercitiamoci!

Pulizia dei dati in R

Preparing Video For Download...