Valorile lipsă în știința datelor apar atunci când lipsește o observație într-o coloană a unui cadru de date sau conține o valoare a caracterelor în loc de o valoare numerică. Valorile lipsă trebuie renunțate sau înlocuite pentru a trage concluzia corectă din date.
În acest tutorial, vom învăța cum să gestionăm valorile lipsă cu biblioteca dplyr. biblioteca dplyr face parte dintr-un ecosistem pentru a realiza o analiză a datelor.
În acest tutorial, veți învăța
- muta ()
- Excludeți valorile lipsă (NA)
- Imputați valorile lipsă (NA) cu media și mediana
muta ()
Al patrulea verb din biblioteca dplyr este util pentru a crea o variabilă nouă sau pentru a schimba valorile unei variabile existente.
Vom proceda în două părți. Vom învăța cum să:
- excludeți valorile lipsă dintr-un cadru de date
- imputați valorile lipsă cu media și mediana
Verbul mutare () este foarte ușor de utilizat. Putem crea o nouă variabilă urmând această sintaxă:
mutate(df, name_variable_1 = condition,… )arguments:-df: Data frame used to create a new variable-name_variable_1: Name and the formula to create the new variable-… : No limit constraint. Possibility to create more than one variable inside mutate()
Excludeți valorile lipsă (NA)
Metoda na.omit () din biblioteca dplyr este un mod simplu de a exclude observația lipsă. Eliminarea tuturor NA din date este ușoară, dar nu înseamnă că este cea mai elegantă soluție. În timpul analizei, este înțelept să folosiți o varietate de metode pentru a face față valorilor lipsă
Pentru a aborda problema observațiilor lipsă, vom folosi setul de date titanic. În acest set de date, avem acces la informațiile pasagerilor de la bord în timpul tragediei. Acest set de date are multe NA care trebuie îngrijite.
Vom încărca fișierul CSV de pe internet și apoi vom verifica ce coloane au NA. Pentru a returna coloanele cu datele lipsă, putem folosi următorul cod:
Să încărcăm datele și să verificăm datele lipsă.
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv"df_titanic <- read.csv(PATH, sep = ",")# Return the column names containing missing observationslist_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]list_na
Ieșire:
## [1] "age" "fare"
Aici,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Oferă numele coloanelor care nu au date.
Coloanele vârstă și tarif au valori lipsă.
Le putem arunca cu na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Ieșire:
## [1] 1045 13
Noul set de date conține 1045 de rânduri comparativ cu 1309 cu setul de date original.
Imputați datele lipsă cu media și mediana
De asemenea, am putea imputa (completa) valorile lipsă cu mediana sau media. O bună practică este de a crea două variabile separate pentru medie și mediană. Odată create, putem înlocui valorile lipsă cu variabilele nou formate.
Vom folosi metoda de aplicare pentru a calcula media coloanei cu NA. Să vedem un exemplu
Pasul 1) Mai devreme în tutorial, am stocat numele coloanelor cu valorile lipsă în lista numită list_na. Vom folosi această listă
Pasul 2) Acum trebuie să calculăm media cu argumentul na.rm = TRUE. Acest argument este obligatoriu deoarece coloanele au date lipsă, iar acest lucru îi spune lui R să le ignore.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Explicatie cod:
Trecem 4 argumente în metoda de aplicare.
- df: df_titanic [, colnames (df_titanic)% în% list_na]. Acest cod va returna numele coloanelor din obiectul list_na (adică „vârstă” și „tarif”)
- 2: Calculați funcția pe coloane
- medie: calculați media
- na.rm = ADEVĂRAT: ignorați valorile lipsă
Ieșire:
## age fare## 29.88113 33.29548
Am creat cu succes media coloanelor care conțin observații lipsă. Aceste două valori vor fi utilizate pentru a înlocui observațiile lipsă.
Pasul 3) Înlocuiți valorile NA
Verbul mutare din biblioteca dplyr este util în crearea unei noi variabile. Nu vrem neapărat să schimbăm coloana originală, astfel încât să putem crea o nouă variabilă fără NA. mutarea este ușor de utilizat, doar alegem un nume de variabilă și definim cum să creăm această variabilă. Iată codul complet
# Create a new variable with the mean and mediandf_titanic_replace <- df_titanic %>%mutate(replace_mean_age = ifelse(is.na(age), average_missing[1], age),replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))
Explicatie cod:
Creăm două variabile, replace_mean_age și replace_mean_fare după cum urmează:
- replace_mean_age = ifelse (is.na (age), average_missing [1], age)
- replace_mean_fare = ifelse (is.na (tarif), average_missing [2], tarif)
Dacă vârsta coloanei are valori lipsă, înlocuiți-o cu primul element de average_missing (media vârstei), altfel păstrați valorile originale. Aceeași logică pentru tarif
sum(is.na(df_titanic_replace$age))
Ieșire:
## [1] 263
Efectuați înlocuirea
sum(is.na(df_titanic_replace$replace_mean_age))
Ieșire:
## [1] 0
Vârsta inițială a coloanei are 263 de valori lipsă, în timp ce variabila nou creată le-a înlocuit cu media variabilei vârstă.
Pasul 4) Putem înlocui observațiile lipsă și cu mediana.
median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,median,na.rm = TRUE)df_titanic_replace <- df_titanic %>%mutate(replace_median_age = ifelse(is.na(age), median_missing[1], age),replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))head(df_titanic_replace)
Ieșire:
Pasul 5) Un set mare de date ar putea avea o mulțime de valori lipsă, iar metoda de mai sus ar putea fi greoaie. Putem executa toți pașii de mai sus într-o singură linie de cod folosind metoda sapply (). Deși nu am cunoaște valorile mediei și medianei.
sapply nu creează un cadru de date, deci putem înfășura funcția sapply () în data.frame () pentru a crea un obiect cadru de date.
# Quick code to replace missing values with the meandf_titanic_impute_mean < -data.frame(sapply(df_titanic,function(x) ifelse(is.na(x),mean(x, na.rm = TRUE),x)))
rezumat
Avem trei metode pentru a face față valorilor lipsă:
- Excludeți toate observațiile lipsă
- Imputați cu media
- Imputați cu mediana
Tabelul următor rezumă cum să eliminați toate observațiile lipsă
Bibliotecă | Obiectiv | Cod |
---|---|---|
baza | Enumerați observațiile lipsă |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Eliminați toate valorile lipsă |
na.omit(df) |
Imputarea cu medie sau mediană se poate face în două moduri
- Folosind Apply
- Folosind sapply
Metodă | Detalii | Avantaje | Dezavantaje |
---|---|---|---|
Pas cu pas cu aplicarea | Verificați coloanele care lipsesc, calculați media / mediana, stocați valoarea, înlocuiți cu mutare () | Știți valoarea mijloacelor / medianei | Mai mult timp de execuție. Poate fi lent cu un set de date mare |
Mod rapid cu sapply | Utilizați sapply () și data.frame () pentru a căuta și a înlocui automat valorile lipsă cu medie / mediană | Cod scurt și rapid | Nu știu valorile imputării |