Chýbajúce hodnoty v oblasti dátovej vedy vznikajú, keď chýba pozorovanie v stĺpci dátového rámca alebo obsahuje namiesto numerickej hodnoty znakovú hodnotu. Chýbajúce hodnoty musia byť vypustené alebo nahradené, aby sa z údajov dalo vyvodiť správny záver.
V tomto tutoriále sa naučíme, ako riešiť chýbajúce hodnoty pomocou knižnice dplyr. Knižnica dplyr je súčasťou ekosystému na vykonávanie analýzy údajov.
V tomto návode sa naučíte
- mutovať()
- Vylúčiť chýbajúce hodnoty (NA)
- Imputované chýbajúce hodnoty (NA) so strednou hodnotou a strednou hodnotou
mutovať()
Štvrté sloveso v knižnici dplyr je užitočné na vytvorenie novej premennej alebo na zmenu hodnôt existujúcej premennej.
Budeme postupovať v dvoch častiach. Dozvieme sa, ako:
- vylúčiť chýbajúce hodnoty z dátového rámca
- spočítať chýbajúce hodnoty strednou hodnotou a strednou hodnotou
Sloveso mutate () sa používa veľmi ľahko. Podľa tejto syntaxe môžeme vytvoriť novú premennú:
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()
Vylúčiť chýbajúce hodnoty (NA)
Metóda na.omit () z knižnice dplyr je jednoduchý spôsob, ako vylúčiť chýbajúce pozorovanie. Vypustenie všetkých NA z údajov je jednoduché, ale to neznamená, že ide o najelegantnejšie riešenie. Počas analýzy je rozumné používať rôzne metódy na riešenie chýbajúcich hodnôt
Na riešenie problému chýbajúcich pozorovaní použijeme titánsky súbor údajov. V tomto súbore údajov máme prístup k informáciám o cestujúcich na palube počas tragédie. Tento súbor údajov obsahuje veľa NA, o ktoré je potrebné sa starať.
Nahráme súbor csv z internetu a potom skontrolujeme, ktoré stĺpce majú NA. Na vrátenie stĺpcov s chýbajúcimi údajmi môžeme použiť nasledujúci kód:
Nahrajme údaje a overme chýbajúce údaje.
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ýkon:
## [1] "age" "fare"
Tu,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Uvádza názov stĺpcov, ktoré neobsahujú údaje.
V stĺpcoch vek a cestovné majú chýbajúce hodnoty.
Môžeme ich zahodiť pomocou na.omit ().
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Výkon:
## [1] 1045 13
Nový súbor údajov obsahuje 1045 riadkov v porovnaní s 1309 s pôvodným súborom údajov.
Vypočítajte chýbajúce údaje pomocou priemeru a mediánu
Mohli by sme tiež vypočítať (vyplniť) chýbajúce hodnoty pomocou mediánu alebo priemeru. Dobrým postupom je vytvoriť dve samostatné premenné pre strednú hodnotu a strednú hodnotu. Po vytvorení môžeme chýbajúce hodnoty nahradiť novovytvorenými premennými.
Použijeme metódu apply na výpočet priemeru stĺpca s NA. Pozrime sa na príklad
Krok 1) Na začiatku tohto tutoriálu sme uložili názov stĺpcov s chýbajúcimi hodnotami do zoznamu s názvom list_na. Tento zoznam použijeme
Krok 2) Teraz musíme vypočítať priemer s argumentom na.rm = TRUE. Tento argument je povinný, pretože v stĺpcoch chýbajú údaje, čo znamená, že R ich má ignorovať.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Vysvetlenie kódu:
V metóde apply odovzdáme 4 argumenty.
- df: df_titanic [, colnames (df_titanic)% v% list_na]. Tento kód vráti názov stĺpcov z objektu list_na (tj. „Vek“ a „cestovné“)
- 2: Vypočítajte funkciu na stĺpcoch
- priemer: Vypočítajte priemer
- na.rm = TRUE: Ignorujte chýbajúce hodnoty
Výkon:
## age fare## 29.88113 33.29548
Úspešne sme vytvorili priemer stĺpcov obsahujúcich chýbajúce pozorovania. Tieto dve hodnoty sa použijú na nahradenie chýbajúcich pozorovaní.
Krok 3) Vymeňte NA hodnoty
Sloveso mutovať z knižnice dplyr je užitočné pri vytváraní novej premennej. Nechceme nevyhnutne meniť pôvodný stĺpec, aby sme mohli vytvoriť novú premennú bez NA. mutácia je ľahko použiteľná, stačí zvoliť názov premennej a definovať, ako ju vytvoriť. Tu je celý 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))
Vysvetlenie kódu:
Vytvoríme dve premenné, replace_mean_age a replace_mean_fare nasledovne:
- replace_mean_age = ifelse (is.na (age), average_missing [1], age)
- replace_mean_fare = ifelse (is.na (fare), average_missing [2], fare)
Ak má vek stĺpca chýbajúce hodnoty, potom ho nahraďte prvým prvkom average_missing (stredný vek), inak si ponechajte pôvodné hodnoty. Rovnaká logika pre cestovné
sum(is.na(df_titanic_replace$age))
Výkon:
## [1] 263
Vykonajte výmenu
sum(is.na(df_titanic_replace$replace_mean_age))
Výkon:
## [1] 0
Pôvodný vek stĺpca má 263 chýbajúcich hodnôt, zatiaľ čo novo vytvorená premenná ich nahradila stredom premennej vek.
Krok 4) Chýbajúce pozorovania môžeme nahradiť aj mediánom.
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ýkon:
Krok 5) Sada veľkých údajov môže mať veľa chýbajúcich hodnôt a vyššie uvedená metóda môže byť ťažkopádna. Všetky vyššie uvedené kroky môžeme vykonať v jednom riadku kódu pomocou metódy sapply (). Aj keď by sme nepoznali stredné a stredné hodnoty.
sapply nevytvára dátový rámec, takže môžeme zabaliť funkciu sapply () do data.frame (), aby sme vytvorili objekt dátového rámca.
# 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)))
Zhrnutie
Chýbajúce hodnoty máme k dispozícii tromi spôsobmi:
- Vylúčte všetky chýbajúce poznámky
- Imputovať so strednou hodnotou
- Impúzia s mediánom
V nasledujúcej tabuľke je zhrnuté, ako odstrániť všetky chýbajúce pozorovania
Knižnica | Cieľ | Zákonníka |
---|---|---|
základňa | Uveďte chýbajúce pozorovania |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Odstráňte všetky chýbajúce hodnoty |
na.omit(df) |
Imputáciu stredom alebo stredom je možné vykonať dvoma spôsobmi
- Pomocou aplikácie
- Pomocou sapply
Metóda | Detaily | Výhody | Nevýhody |
---|---|---|---|
Krok za krokom s aplikáciou | Skontrolujte stĺpce, ktoré chýbajú, vypočítajte strednú / strednú hodnotu, uložte hodnotu, nahraďte výrazom mutate () | Poznáte hodnotu prostriedkov / medián | Viac času na vykonanie. S veľkým súborom údajov to môže byť pomalé |
Rýchly spôsob sapply | Použite sapply () a data.frame () na automatické vyhľadávanie a nahradenie chýbajúcich hodnôt priemerom / stredom | Krátky kód a rýchly | Nepoznám imputačné hodnoty |