Puuduvad väärtused tekivad andmeteaduses siis, kui vaatlus puudub andmeraami veerus või sisaldab arvväärtuse asemel märgi väärtust. Andmetest õige järelduse tegemiseks tuleb puuduvad väärtused ära jätta või asendada.
Selles õpetuses õpime, kuidas puuduvate väärtustega hakkama saada dplyri teegiga. dplyri teek on andmeanalüüsi teostamiseks osa ökosüsteemist.
Selles õpetuses saate teada
- muteeruma ()
- Välista puuduvad väärtused (NA)
- Mõjutage puuduvad väärtused (NA) keskmise ja mediaaniga
muteeruma ()
Dplyri teegi neljas verb on kasulik uue muutuja loomiseks või olemasoleva muutuja väärtuste muutmiseks.
Jätkame kahes osas. Õpime, kuidas:
- välistada andmeraamist puuduvad väärtused
- arvestada puuduvad väärtused keskmise ja mediaaniga
Verbi mutate () on väga lihtne kasutada. Selle süntaksiga saame luua uue muutuja:
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()
Välista puuduvad väärtused (NA)
Naplymise () meetod dplyri teegist on lihtne viis puuduva vaatluse välistamiseks. Andmetest kogu NA eemaldamine on lihtne, kuid see ei tähenda, et see oleks kõige elegantsem lahendus. Analüüsi käigus on mõistlik puuduvate väärtustega toimetulemiseks kasutada erinevaid meetodeid
Puuduvate vaatluste probleemi lahendamiseks kasutame titaanilist andmestikku. Selles andmekogumis on meil juurdepääs tragöödia ajal pardal olnud reisijate teabele. Selles andmekogumis on palju NA-sid, mille eest tuleb hoolitseda.
Laadime csv-faili Internetist üles ja kontrollime siis, millistes veergudes on NA. Puuduvate andmetega veergude tagastamiseks võime kasutada järgmist koodi:
Laadime andmed üles ja kontrollime puuduvad andmed.
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äljund:
## [1] "age" "fare"
Siin,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Annab veergude nime, millel pole andmeid.
Veergudel vanus ja hind on puuduvad väärtused.
Me võime need na.omit () abil maha visata.
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Väljund:
## [1] 1045 13
Uus andmekogum sisaldab 1045 rida võrreldes 1309-ga algse andmekogumiga.
Andke puuduvate andmete arv keskmisele ja mediaanile
Võiksime puuduvad väärtused arvutada ka mediaani või keskmisega. Hea tava on luua kaks eraldi muutujat keskmise ja mediaani jaoks. Kui need on loodud, saame puuduvad väärtused asendada vastloodud muutujatega.
Veeru keskmise arvutamiseks NA-ga kasutame rakendusmeetodit. Vaatame näite
Samm 1) Varem õpetuses salvestasime nimekirja nimega list_na veergude nime koos puuduvate väärtustega. Me kasutame seda loendit
Samm 2) Nüüd peame arvutama keskmise argumendiga na.rm = TRUE. See argument on kohustuslik, kuna veergudel puuduvad andmed ja see käsib R-l neid eirata.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Koodi selgitus:
Anname meetodi 4 korral 4 argumenti.
- df: df_titanic [, kolnimed (df_titanic)% loendis% list_na]. See kood tagastab veeru nime objektilt list_na (st "vanus" ja "hind")
- 2: arvutage veergude funktsioon
- keskmine: arvutage keskmine
- na.rm = TRUE: ignoreerige puuduvaid väärtusi
Väljund:
## age fare## 29.88113 33.29548
Lõime puuduvate vaatlustega veergude keskmise edukalt. Neid kahte väärtust kasutatakse puuduvate tähelepanekute asendamiseks.
Samm 3) Asendage NA väärtused
Verbi muteerumine dplyri teegist on kasulik uue muutuja loomisel. Me ei soovi tingimata algset veergu muuta, et saaksime uue muutuja ilma NA-ta luua. mutate on lihtne kasutada, valime lihtsalt muutuja nime ja määratleme, kuidas seda muutujat luua. Siin on täielik kood
# 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))
Koodi selgitus:
Loome kaks muutujat, asendame_mean_age ja asendame_mean_fare järgmiselt:
- substit_mean_age = ifelse (is.na (vanus), keskmine_ puuduv [1], vanus)
- asendusmäära_hind = ifelse (is.na (hind), keskmine_ puudu [2], hind)
Kui veeru vanusel puuduvad väärtused, asendage see keskmise_puuduva (vanuse keskmine) esimese elemendiga, muidu säilitage algsed väärtused. Sõiduhinna sama loogika
sum(is.na(df_titanic_replace$age))
Väljund:
## [1] 263
Tehke asendamine
sum(is.na(df_titanic_replace$replace_mean_age))
Väljund:
## [1] 0
Esialgses veeru vanuses on 263 puuduvat väärtust, samas kui vastloodud muutuja on need asendanud muutuja vanuse keskmisega.
4. samm . Puuduvad vaatlused saame asendada ka mediaaniga.
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äljund:
5. samm . Suures andmekogumis võib olla palju puuduvaid väärtusi ja ülaltoodud meetod võib olla tülikas. Saame kõik ülaltoodud toimingud täita ühes koodireas, kasutades meetodit sapply (). Kuigi me ei teaks keskmise ja mediaani valesid.
sapply ei loo andmeraami, seega saame andmeraami objekti loomiseks mähkida funktsiooni sapply () data.frame () sisse.
# 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)))
Kokkuvõte
Puuduvate väärtuste käsitlemiseks on meil kolm meetodit:
- Välistage kõik puuduvad tähelepanekud
- Mõjutada keskmisega
- Mõjutage mediaaniga
Järgmine tabel võtab kokku, kuidas eemaldada kõik puuduvad tähelepanekud
Raamatukogu | Eesmärk | Kood |
---|---|---|
alus | Loetlege puuduvad tähelepanekud |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Eemaldage kõik puuduvad väärtused |
na.omit(df) |
Keskmise või mediaaniga sisestamist saab teha kahel viisil
- Kasutades rakendust
- Kasutades sapply
Meetod | Üksikasjad | Eelised | Puudused |
---|---|---|---|
Samm-sammult rakendage | Kontrollige puuduvaid veerge, arvutage keskmine / mediaan, salvestage väärtus, asendage mutatsiooniga () | Teate keskmise / mediaani väärtust | Rohkem täitmisaega. Suure andmekogumi korral võib olla aeglane |
Kiire viis sapply'iga | Kasutage sapply () ja data.frame () puuduvate väärtuste automaatseks otsimiseks ja asendamiseks keskmise / mediaaniga | Lühike kood ja kiire | Ei tea imputatsiooni väärtusi |