Відсутні значення в науці про дані виникають, коли спостереження відсутнє у стовпці кадру даних або містить значення символу замість числового значення. Відсутні значення потрібно скинути або замінити, щоб зробити правильний висновок з даних.
У цьому підручнику ми дізнаємося, як боротися з відсутніми значеннями за допомогою бібліотеки 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 - простий спосіб виключити відсутні спостереження. Видалити всі НС з даних легко, але це не означає, що це найелегантніше рішення. Під час аналізу доцільно використовувати різноманітні методи боротьби з відсутніми значеннями
Для вирішення проблеми відсутніх спостережень ми будемо використовувати титанічний набір даних. У цьому наборі даних ми маємо доступ до інформації про пасажирів на борту під час трагедії. Цей набір даних містить багато НС, про які потрібно піклуватися.
Ми завантажимо файл 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 аргументи в методі apply.
- 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 відсутні значення, тоді як новостворена змінна замінила їх середнім значенням змінної age.
Крок 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 () для автоматичного пошуку та заміни відсутніх значень середнім значенням / медіаною | Короткий код і швидко | Не знаю значень обчислення |