Hiányzó értékek az adattudományban akkor merülnek fel, ha egy megfigyelés hiányzik egy adatkeret oszlopából, vagy karakteres értéket tartalmaz számérték helyett. A hiányzó értékeket el kell dobni vagy ki kell cserélni annak érdekében, hogy helyes következtetést lehessen levonni az adatokból.
Ebben az oktatóanyagban megtanuljuk, hogyan kell kezelni a hiányzó értékeket a dplyr könyvtárral. A dplyr könyvtár egy ökoszisztéma része az adatelemzés megvalósításához.
Ebben az oktatóanyagban megtanulja
- mutál ()
- Hiányzó értékek kizárása (NA)
- Hibázza a hiányzó értékeket (NA) az átlaggal és a mediánnal
mutál ()
A dplyr könyvtár negyedik igéje hasznos új változó létrehozásához vagy egy meglévő változó értékeinek megváltoztatásához.
Két részben folytatjuk. Megtanuljuk, hogyan kell:
- zárja ki az adatkeretről a hiányzó értékeket
- a hiányzó értékeket az átlaggal és a mediánnal számolja be
A mutate () igét nagyon könnyű használni. Ezt a szintaxist követve hozhatunk létre egy új változót:
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()
Hiányzó értékek kizárása (NA)
A dplyr könyvtárból származó na.omit () módszer egyszerű módszer a hiányzó megfigyelések kizárására. Az összes NA levétele az adatokból könnyű, de ez nem jelenti azt, hogy ez a legelegánsabb megoldás. Az elemzés során célszerű különféle módszereket alkalmazni a hiányzó értékek kezelésére
A hiányzó megfigyelések problémájának kezelésére a titán adatkészletet fogjuk használni. Ebben az adatkészletben hozzáférünk a fedélzeten tartózkodó utasok információihoz a tragédia során. Ennek az adatkészletnek számos NA-ja van, amelyekről gondoskodni kell.
Töltsük fel a csv fájlt az internetről, majd ellenőrizzük, hogy mely oszlopokban van NA. A hiányzó adatokkal rendelkező oszlopok visszaadásához a következő kódot használhatjuk:
Töltsük fel az adatokat, és ellenőrizzük a hiányzó adatokat.
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
Kimenet:
## [1] "age" "fare"
Itt,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Megadja azoknak az oszlopoknak a nevét, amelyek nem rendelkeznek adatokkal.
Az életkor és a viteldíj oszlopai hiányoznak.
Dobhatjuk őket a na.omit () -val.
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Kimenet:
## [1] 1045 13
Az új adatkészlet 1045 sort tartalmaz, szemben az eredeti adatállomány 1309-gyel.
A hiányzó adatok számítása az átlaggal és a mediánnal
A hiányzó értékeket a mediánnal vagy az átlaggal is beszámíthatjuk (feltölthetjük). Jó gyakorlat két külön változó létrehozása az átlag és a medián számára. A létrehozás után a hiányzó értékeket pótolhatjuk az újonnan létrehozott változókkal.
Az NA módszerrel az oszlop átlagának kiszámításához az alkalmazási módszert fogjuk használni. Lássunk egy példát
1. lépés : Az oktatóanyag korábban a list_na nevű listában tároltuk az oszlopok nevét a hiányzó értékekkel. Ezt a listát fogjuk használni
2. lépés) Most ki kell számolni az átlagot a na.rm = TRUE argumentummal. Ez az érvelés kötelező, mert az oszlopokból hiányzik az adat, és ez arra utasítja R-t, hogy hagyja figyelmen kívül ezeket.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Kód Magyarázat:
4 argumentumot adunk át az Apply módszerben.
- df: df_titanic [, oszlopnevek (df_titanic)% a% list_na fájlban]. Ez a kód visszaadja az oszlopok nevét a list_na objektumból (azaz "kor" és "viteldíj")
- 2: Számítsa ki a függvényt az oszlopokon
- jelentése: Számítsa ki az átlagot
- na.rm = IGAZ: Hagyja figyelmen kívül a hiányzó értékeket
Kimenet:
## age fare## 29.88113 33.29548
Sikeresen létrehoztuk a hiányzó megfigyeléseket tartalmazó oszlopok átlagát. Ezt a két értéket fogják használni a hiányzó megfigyelések pótlására.
3. lépés: Cserélje ki az NA értékeket
A mutáció ige a dplyr könyvtárból hasznos egy új változó létrehozásában. Nem feltétlenül akarjuk megváltoztatni az eredeti oszlopot, így létrehozhatunk egy új változót az NA nélkül. A mutate használata egyszerű, csak válasszunk egy változó nevet és meghatározzuk, hogyan hozzuk létre ezt a változót. Itt van a teljes 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))
Kód Magyarázat:
Két változót hozunk létre, a Replace_mean_age és az
- Replace_mean_age = ifelse (is.na (életkor), átlagos_ hiányzó [1], életkor)
- Replace_mean_fare = ifelse (is.na (viteldíj), átlagos_ hiányzó [2], viteldíj)
Ha az oszlop korának hiányoznak az értékei, akkor cserélje le az átlag_kihagyás (kor átlag) első elemére, különben őrizze meg az eredeti értékeket. Ugyanaz a logika a viteldíjhoz
sum(is.na(df_titanic_replace$age))
Kimenet:
## [1] 263
Végezze el a cserét
sum(is.na(df_titanic_replace$replace_mean_age))
Kimenet:
## [1] 0
Az eredeti oszlopkornak 263 hiányzó értéke van, míg az újonnan létrehozott változó az életkor átlagával váltotta fel őket.
4. lépés) A hiányzó megfigyeléseket a mediánnal is pótolhatjuk.
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)
Kimenet:
5. lépés: Egy nagy adathalmaznak sok hiányzó értéke lehet, és a fenti módszer nehézkes lehet. A fenti lépéseket a kód egy sorában, a sapply () módszerrel hajthatjuk végre. Bár nem ismernénk az átlag és a medián völgyét.
A sapply nem hoz létre adatkeretet, ezért beilleszthetjük a sapply () függvényt a data.frame () keretbe egy adatkeret objektum létrehozásához.
# 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)))
Összegzés
Három módszerünk van a hiányzó értékek kezelésére:
- Zárja ki az összes hiányzó megfigyelést
- Érintse meg az átlaggal
- Hatás a mediánnal
Az alábbi táblázat összefoglalja az összes hiányzó megfigyelés eltávolításának módját
Könyvtár | Célkitűzés | Kód |
---|---|---|
bázis | Sorolja fel a hiányzó megfigyeléseket |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Távolítsa el az összes hiányzó értéket |
na.omit(df) |
Az átlaggal vagy mediánnal történő beillesztés kétféleképpen történhet
- Az Apply használata
- Sapply használatával
Módszer | Részletek | Előnyök | Hátrányok |
---|---|---|---|
Lépésről lépésre alkalmazza | Ellenőrizze a hiányzó oszlopokat, számítsa ki az átlagot / mediánt, tárolja az értéket, cserélje le a mutátussal () | Tudja az átlag / medián értékét | Több végrehajtási idő. Nagy adatkészlettel lassú lehet |
Gyors mód sapply-val | A sapply () és a data.frame () segítségével automatikusan keresheti és pótolhatja a hiányzó értékeket átlag / medián értékkel | Rövid kód és gyors | Nem ismeri az imputációs értékeket |