A hiányzó értékek (NA) pótlása az R-ben: na.omit & na.rm

Tartalomjegyzék:

Anonim

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