Chybějící hodnoty ve vědě o datech vznikají, když ve sloupci datového rámce chybí pozorování nebo místo numerické hodnoty obsahuje hodnotu znaku. Chybějící hodnoty musí být zrušeny nebo nahrazeny, aby bylo možné z dat vyvodit správný závěr.
V tomto kurzu se naučíme, jak řešit chybějící hodnoty pomocí knihovny dplyr. Knihovna dplyr je součástí ekosystému k provádění analýzy dat.
V tomto výukovém programu se naučíte
- mutovat()
- Vyloučit chybějící hodnoty (NA)
- Imputovat chybějící hodnoty (NA) se střední hodnotou a střední hodnotou
mutovat()
Čtvrté sloveso v knihovně dplyr je užitečné k vytvoření nové proměnné nebo ke změně hodnot existující proměnné.
Budeme postupovat ve dvou částech. Naučíme se, jak:
- vyloučit chybějící hodnoty z datového rámce
- započítat chybějící hodnoty průměrem a mediánem
Sloveso mutate () se velmi snadno používá. Můžeme vytvořit novou proměnnou podle této syntaxe:
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()
Vyloučit chybějící hodnoty (NA)
Metoda na.omit () z knihovny dplyr je jednoduchý způsob, jak vyloučit chybějící pozorování. Vypuštění všech NA z dat je snadné, ale to neznamená, že je to nejelegantnější řešení. Během analýzy je rozumné použít různé metody řešení chybějících hodnot
K řešení problému chybějících pozorování použijeme titanový datový soubor. V tomto datovém souboru máme přístup k informacím cestujících na palubě během tragédie. Tato datová sada obsahuje mnoho NA, o které je třeba se starat.
Nahrajeme soubor csv z internetu a poté zkontrolujeme, které sloupce mají NA. K vrácení sloupců s chybějícími daty můžeme použít následující kód:
Nahrajme data a ověřte chybějící data.
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
Výstup:
## [1] "age" "fare"
Tady,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Uvádí název sloupců, které neobsahují data.
Stáří sloupců a jízdné mají chybějící hodnoty.
Můžeme je zrušit pomocí na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Výstup:
## [1] 1045 13
Nová datová sada obsahuje 1045 řádků ve srovnání s 1309 s původní datovou sadou.
Vypočítat chybějící data pomocí průměru a mediánu
Mohli bychom také započítat (naplnit) chybějící hodnoty mediánem nebo průměrem. Dobrým postupem je vytvoření dvou samostatných proměnných pro průměr a medián. Po vytvoření můžeme chybějící hodnoty nahradit nově vytvořenými proměnnými.
Pro výpočet průměru sloupce s NA použijeme metodu apply. Podívejme se na příklad
Krok 1) Dříve v tutoriálu jsme uložili název sloupců s chybějícími hodnotami do seznamu s názvem list_na. Tento seznam použijeme
Krok 2) Nyní musíme vypočítat průměr s argumentem na.rm = TRUE. Tento argument je povinný, protože ve sloupcích chybí data, a to říká R, aby je ignoroval.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Vysvětlení kódu:
V metodě apply předáme 4 argumenty.
- df: df_titanic [, colnames (df_titanic)% v% list_na]. Tento kód vrátí název sloupců z objektu list_na (tj. „Age“ a „fare“)
- 2: Vypočítat funkci na sloupcích
- průměr: Vypočítá průměr
- na.rm = TRUE: Chybí chybějící hodnoty
Výstup:
## age fare## 29.88113 33.29548
Úspěšně jsme vytvořili průměr sloupců obsahujících chybějící pozorování. Tyto dvě hodnoty budou použity k nahrazení chybějících pozorování.
Krok 3) Vyměňte NA hodnoty
Sloveso mutovat z knihovny dplyr je užitečné při vytváření nové proměnné. Nechceme nutně chtít změnit původní sloupec, abychom mohli vytvořit novou proměnnou bez NA. mutace se snadno používá, stačí zvolit název proměnné a definovat, jak tuto proměnnou vytvořit. Zde je kompletní kód
# 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))
Vysvětlení kódu:
Vytvoříme dvě proměnné, replace_mean_age a replace_mean_fare takto:
- replace_mean_age = ifelse (is.na (age), average_missing [1], age)
- replace_mean_fare = ifelse (is.na (fare), average_missing [2], fare)
Pokud věk sloupce chybí hodnoty, nahraďte jej prvním prvkem average_missing (průměr věku), jinak zachovejte původní hodnoty. Stejná logika pro jízdné
sum(is.na(df_titanic_replace$age))
Výstup:
## [1] 263
Proveďte výměnu
sum(is.na(df_titanic_replace$replace_mean_age))
Výstup:
## [1] 0
Původní stáří sloupce má 263 chybějících hodnot, zatímco nově vytvořená proměnná je nahradila průměrem stáří proměnné.
Krok 4) Můžeme také nahradit chybějící pozorování mediánem.
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)
Výstup:
Krok 5) Velká sada dat může mít spoustu chybějících hodnot a výše uvedená metoda může být těžkopádná. Všechny výše uvedené kroky můžeme provést v jednom řádku kódu pomocí metody sapply (). Ačkoli bychom neznali údolní hodnoty střední a střední.
sapply nevytváří datový rámec, takže můžeme funkci sapply () zabalit do data.frame () a vytvořit objekt datového rámce.
# 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)))
souhrn
Máme tři metody řešení chybějících hodnot:
- Vyloučte všechna chybějící pozorování
- Imputovat s průměrem
- Imputovat s mediánem
Následující tabulka shrnuje, jak odstranit všechna chybějící pozorování
Knihovna | Objektivní | Kód |
---|---|---|
základna | Seznam chybějících pozorování |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Odstraňte všechny chybějící hodnoty |
na.omit(df) |
Imputaci průměrem nebo mediánem lze provést dvěma způsoby
- Pomocí aplikace
- Pomocí sapply
Metoda | Detaily | Výhody | Nevýhody |
---|---|---|---|
Krok za krokem s aplikací | Zkontrolovat chybějící sloupce, vypočítat průměr / medián, uložit hodnotu, nahradit mutate () | Znáte hodnotu prostředků / medián | Více času na provedení. Může být pomalý s velkým souborem dat |
Rychlý způsob sapply | Použijte sapply () a data.frame () k automatickému vyhledávání a nahrazení chybějících hodnot střední / střední hodnotou | Krátký kód a rychlý | Neznám imputační hodnoty |