Brakujące wartości w nauce o danych pojawiają się, gdy brakuje obserwacji w kolumnie ramki danych lub zawiera ona wartość znakową zamiast wartości liczbowej. Brakujące wartości należy usunąć lub zastąpić, aby wyciągnąć prawidłowe wnioski z danych.
W tym samouczku nauczymy się, jak radzić sobie z brakującymi wartościami w bibliotece dplyr. Biblioteka dplyr jest częścią ekosystemu do przeprowadzania analizy danych.
W tym samouczku dowiesz się
- zmutować()
- Wyklucz brakujące wartości (NA)
- Podaj brakujące wartości (NA) wraz ze średnią i medianą
zmutować()
Czwarty czasownik w bibliotece dplyr jest pomocny przy tworzeniu nowej zmiennej lub zmianie wartości istniejącej zmiennej.
Będziemy postępować w dwóch częściach. Dowiemy się, jak:
- wyklucz brakujące wartości z ramki danych
- imputuj brakujące wartości ze średnią i medianą
Czasownik mutate () jest bardzo łatwy w użyciu. Możemy utworzyć nową zmienną zgodnie z następującą składnią:
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()
Wyklucz brakujące wartości (NA)
Metoda na.omit () z biblioteki dplyr to prosty sposób na wykluczenie brakujących obserwacji. Usunięcie całej NA z danych jest łatwe, ale nie oznacza to, że jest to najbardziej eleganckie rozwiązanie. Podczas analizy dobrze jest stosować różne metody radzenia sobie z brakującymi wartościami
Aby rozwiązać problem brakujących obserwacji, użyjemy zbioru danych Titanic. W tym zbiorze danych mamy dostęp do informacji o pasażerach na pokładzie podczas tragedii. Ten zestaw danych zawiera wiele NA, którymi należy się zająć.
Prześlemy plik csv z internetu, a następnie sprawdzimy, które kolumny mają NA. Aby zwrócić kolumny z brakującymi danymi, możemy użyć następującego kodu:
Prześlijmy dane i zweryfikujmy brakujące dane.
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
Wynik:
## [1] "age" "fare"
Tutaj,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Podaje nazwy kolumn, które nie zawierają danych.
W kolumnach wiek i taryfa brakuje wartości.
Możemy je upuścić za pomocą na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Wynik:
## [1] 1045 13
Nowy zestaw danych zawiera 1045 wierszy w porównaniu do 1309 z oryginalnym zestawem danych.
Wpisz brakujące dane za pomocą średniej i mediany
Moglibyśmy również przypisać (uzupełnić) brakujące wartości za pomocą mediany lub średniej. Dobrą praktyką jest utworzenie dwóch oddzielnych zmiennych dla średniej i mediany. Po utworzeniu możemy zastąpić brakujące wartości nowo utworzonymi zmiennymi.
Użyjemy metody Apply do obliczenia średniej kolumny z NA. Zobaczmy przykład
Krok 1) Wcześniej w samouczku zapisaliśmy nazwy kolumn z brakującymi wartościami na liście o nazwie list_na. Użyjemy tej listy
Krok 2) Teraz musimy obliczyć średnią z argumentem na.rm = TRUE. Ten argument jest obowiązkowy, ponieważ w kolumnach brakuje danych, a to mówi R, aby je zignorował.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Objaśnienie kodu:
W metodzie apply przekazujemy 4 argumenty.
- df: df_titanic [, colnames (df_titanic)% w% list_na]. Ten kod zwróci nazwę kolumny z obiektu list_na (tj. „Wiek” i „opłata”)
- 2: Oblicz funkcję w kolumnach
- mean: Oblicz średnią
- na.rm = TRUE: Ignoruj brakujące wartości
Wynik:
## age fare## 29.88113 33.29548
Z powodzeniem utworzyliśmy średnią z kolumn zawierających brakujące obserwacje. Te dwie wartości zostaną użyte do zastąpienia brakujących obserwacji.
Krok 3) Zastąp wartości NA
Mutacja czasownika z biblioteki dplyr jest przydatna przy tworzeniu nowej zmiennej. Niekoniecznie chcemy zmieniać oryginalną kolumnę, abyśmy mogli stworzyć nową zmienną bez NA. mutate jest łatwy w użyciu, po prostu wybieramy nazwę zmiennej i definiujemy sposób jej utworzenia. Oto pełny kod
# 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))
Objaśnienie kodu:
Tworzymy dwie zmienne, replace_mean_age i replace_mean_fare w następujący sposób:
- replace_mean_age = ifelse (is.na (wiek), średni_ brakujący [1], wiek)
- replace_mean_fare = ifelse (is.na (taryfa), średni_ brakujący [2], taryfa)
Jeśli wiek kolumny ma brakujące wartości, zamień na pierwszy element średnia_brak (średnia wieku), w przeciwnym razie zachowaj oryginalne wartości. Ta sama logika dla taryfy
sum(is.na(df_titanic_replace$age))
Wynik:
## [1] 263
Przeprowadź wymianę
sum(is.na(df_titanic_replace$replace_mean_age))
Wynik:
## [1] 0
W pierwotnym wieku kolumny brakowało 263 wartości, podczas gdy nowo utworzona zmienna zastąpiła je średnią wieku zmiennej.
Krok 4) Możemy również zastąpić brakujące obserwacje medianą.
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)
Wynik:
Krok 5) Duży zbiór danych może zawierać wiele brakujących wartości, a powyższa metoda może być kłopotliwa. Możemy wykonać wszystkie powyższe kroki w jednej linii kodu za pomocą metody sapply (). Chociaż nie znalibyśmy wartości średniej i mediany.
sapply nie tworzy ramki danych, więc możemy zawinąć funkcję sapply () wewnątrz data.frame (), aby utworzyć obiekt ramki danych.
# 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)))
Podsumowanie
Mamy trzy metody radzenia sobie z brakującymi wartościami:
- Wyklucz wszystkie brakujące obserwacje
- Poczytaj o średniej
- Przypisać medianie
W poniższej tabeli podsumowano, jak usunąć wszystkie brakujące obserwacje
Biblioteka | Cel | Kod |
---|---|---|
baza | Wymień brakujące obserwacje |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Usuń wszystkie brakujące wartości |
na.omit(df) |
Imputację za pomocą średniej lub mediany można przeprowadzić na dwa sposoby
- Korzystanie z aplikacji
- Używanie sapply
metoda | Detale | Zalety | Niedogodności |
---|---|---|---|
Krok po kroku z aplikacją | Sprawdź kolumny z brakującymi danymi, oblicz średnią / medianę, zapisz wartość, zamień na mutate () | Znasz wartość średnich / mediany | Dłuższy czas realizacji. Może działać wolno w przypadku dużego zbioru danych |
Szybki sposób z mlekiem | Użyj sapply () i data.frame (), aby automatycznie wyszukać i zastąpić brakujące wartości średnią / medianą | Krótki kod i szybko | Nie znam wartości imputacji |