Липсващи стойности в науката за данни възникват, когато наблюдението липсва в колона на рамка с данни или съдържа стойност на знак вместо числова стойност. Липсващите стойности трябва да бъдат изпуснати или заменени, за да се направи правилен извод от данните.
В този урок ще научим как да се справяме с липсващите стойности с библиотеката dplyr. dplyr библиотеката е част от екосистемата за осъществяване на анализ на данни.
В този урок ще научите
- мутиране ()
- Изключване на липсващи стойности (NA)
- Присвояване на липсващи стойности (NA) със средната и средната стойност
мутиране ()
Четвъртият глагол в библиотеката dplyr е полезен за създаване на нова променлива или промяна на стойностите на съществуваща променлива.
Ще продължим в две части. Ще се научим как да:
- изключете липсващите стойности от рамка с данни
- приписвайте липсващи стойности със средната и средната стойност
Глаголът mutate () е много лесен за използване. Можем да създадем нова променлива, следвайки този синтаксис:
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()
Изключване на липсващи стойности (NA)
Методът na.omit () от библиотеката dplyr е прост начин за изключване на липсващото наблюдение. Отпадането на всички NA от данните е лесно, но не означава, че това е най-елегантното решение. По време на анализа е разумно да се използват различни методи за справяне с липсващите стойности
За да се справим с проблема с липсващите наблюдения, ще използваме титаничния набор от данни. В този набор от данни имаме достъп до информацията за пътниците на борда по време на трагедията. Този набор от данни съдържа много NA, за които трябва да се погрижи.
Ще качим csv файла от интернет и след това ще проверим кои колони имат NA. За да върнем колоните с липсващи данни, можем да използваме следния код:
Нека да качим данните и да проверим липсващите данни.
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
Изход:
## [1] "age" "fare"
Тук,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Дава името на колони, които нямат данни.
Възрастта и тарифата на колоните имат липсващи стойности.
Можем да ги пуснем с na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Изход:
## [1] 1045 13
Новият набор от данни съдържа 1045 реда в сравнение с 1309 с оригиналния набор от данни.
Приписвайте липсващи данни със средната и средната стойност
Също така бихме могли да вменим (попълним) липсващи стойности със средната или средната стойност. Добра практика е да се създадат две отделни променливи за средната и медианата. Веднъж създадени, можем да заменим липсващите стойности с новообразуваните променливи.
Ще използваме метода apply, за да изчислим средната стойност на колоната с NA. Да видим пример
Стъпка 1) По-рано в урока съхранихме името на колоните с липсващите стойности в списъка, наречен list_na. Ще използваме този списък
Стъпка 2) Сега трябва да изчислим средната стойност с аргумента na.rm = TRUE. Този аргумент е задължителен, тъй като в колоните липсват данни и това казва на R да ги игнорира.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Обяснение на кода:
Предаваме 4 аргумента в метода за прилагане.
- df: df_titanic [, colnames (df_titanic)% в% list_na]. Този код ще върне името на колоните от обекта list_na (т.е. "възраст" и "тарифа")
- 2: Изчислете функцията върху колоните
- mean: Изчислете средната стойност
- na.rm = TRUE: Игнорирайте липсващите стойности
Изход:
## age fare## 29.88113 33.29548
Успешно създадохме средната стойност на колоните, съдържащи липсващи наблюдения. Тези две стойности ще бъдат използвани за заместване на липсващите наблюдения.
Стъпка 3) Заменете NA стойностите
Мутацията на глагола от библиотеката dplyr е полезна при създаването на нова променлива. Не е задължително да искаме да променяме оригиналната колона, за да можем да създадем нова променлива без NA. mutate е лесен за използване, ние просто избираме име на променлива и дефинираме как да създадем тази променлива. Ето пълния код
# 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))
Обяснение на кода:
Създаваме две променливи, replace_mean_age и replace_mean_fare, както следва:
- replace_mean_age = ifelse (is.na (възраст), средно_ липсващо [1], възраст)
- replace_mean_fare = ifelse (is.na (тарифа), средно пропускане [2], тарифа)
Ако възрастта на колоната има липсващи стойности, заменете с първия елемент на средна_ липса (средна възраст), в противен случай запазете първоначалните стойности. Същата логика за тарифата
sum(is.na(df_titanic_replace$age))
Изход:
## [1] 263
Извършете подмяната
sum(is.na(df_titanic_replace$replace_mean_age))
Изход:
## [1] 0
Първоначалната възраст на колоната има 263 липсващи стойности, докато новосъздадената променлива ги е заменила със средната стойност на променливата възраст.
Стъпка 4) Можем да заменим липсващите наблюдения и с медиана.
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)
Изход:
Стъпка 5) Големият набор от данни може да има много липсващи стойности и горният метод може да бъде тромав. Можем да изпълним всички горепосочени стъпки по-горе в един ред код, използвайки метода sapply (). Въпреки че не бихме познали долините на средната и средната стойност.
sapply не създава рамка за данни, така че можем да увием функцията sapply () в data.frame (), за да създадем обект на рамка за данни.
# 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)))
Обобщение
Имаме три метода за справяне с липсващите стойности:
- Изключете всички липсващи наблюдения
- Вменявайте средното
- Присвояване на медиана
Следващата таблица обобщава как да премахнете всички липсващи наблюдения
Библиотека | Обективен | Код |
---|---|---|
база | Избройте липсващите наблюдения |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Премахнете всички липсващи стойности |
na.omit(df) |
Приписването със средна или средна стойност може да се извърши по два начина
- Използване на приложи
- Използване на sapply
Метод | Подробности | Предимства | Недостатъци |
---|---|---|---|
Стъпка по стъпка с кандидатстване | Проверете колоните с липсващи, изчислете средно / медиана, съхранявайте стойността, заменете с mutate () | Знаете стойността на средствата / медианата | Повече време за изпълнение. Може да бъде бавен с голям набор от данни |
Бърз начин със саппли | Използвайте sapply () и data.frame () за автоматично търсене и замяна на липсващите стойности със средна стойност / медиана | Кратък код и бързо | Не знам стойностите на приписването |