Veri biliminde eksik değerler, bir veri çerçevesinin bir sütununda bir gözlem eksik olduğunda veya sayısal değer yerine bir karakter değeri içerdiğinde ortaya çıkar. Verilerden doğru sonuca varmak için eksik değerler atılmalı veya değiştirilmelidir.
Bu eğitimde, dplyr kitaplığıyla eksik değerlerle nasıl başa çıkılacağını öğreneceğiz. dplyr kitaplığı, bir veri analizi gerçekleştirmek için bir ekosistemin parçasıdır.
Bu eğitimde öğreneceksiniz
- mutate ()
- Eksik Değerleri Hariç Tut (NA)
- Eksik Değerleri (NA) Ortalama ve Medyan ile İfade Et
mutate ()
Dplyr kitaplığındaki dördüncü fiil, yeni değişken oluşturmak veya mevcut bir değişkenin değerlerini değiştirmek için faydalıdır.
İki kısımda ilerleyeceğiz. Nasıl yapılacağını öğreneceğiz:
- eksik değerleri bir veri çerçevesinden hariç tut
- Eksik değerleri ortalama ve medyan ile hesaplayın
Mutate () fiilinin kullanımı çok kolaydır. Bu sözdizimini izleyerek yeni bir değişken oluşturabiliriz:
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()
Eksik Değerleri Hariç Tut (NA)
Dplyr kitaplığındaki na.omit () yöntemi, eksik gözlemleri hariç tutmanın basit bir yoludur. Tüm NA'yı verilerden çıkarmak kolaydır, ancak bu en zarif çözüm olduğu anlamına gelmez. Analiz sırasında, eksik değerlerle başa çıkmak için çeşitli yöntemler kullanmak akıllıca olacaktır.
Eksik gözlem sorununu çözmek için titanik veri setini kullanacağız. Bu veri setinde, trajedi sırasında uçaktaki yolcuların bilgilerine erişebiliyoruz. Bu veri kümesinde, ilgilenilmesi gereken birçok NA vardır.
Csv dosyasını internetten yükleyeceğiz ve sonra hangi sütunların NA içerdiğini kontrol edeceğiz. Eksik veri içeren sütunları döndürmek için aşağıdaki kodu kullanabiliriz:
Verileri yükleyelim ve eksik verileri doğrulayalım.
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
Çıktı:
## [1] "age" "fare"
Buraya,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Veri içermeyen sütunların adını verir.
Age ve ücret sütunlarında eksik değerler var.
Onları na.omit () ile bırakabiliriz.
library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)
Çıktı:
## [1] 1045 13
Yeni veri kümesi, orijinal veri kümesiyle 1309'a kıyasla 1045 satır içerir.
Eksik verileri Ortalama ve Medyan ile ifade edin
Ayrıca, eksik değerleri medyan veya ortalama ile doldurabiliriz (doldurabiliriz). İyi bir uygulama, ortalama ve medyan için iki ayrı değişken oluşturmaktır. Oluşturulduktan sonra, eksik değerleri yeni oluşturulan değişkenlerle değiştirebiliriz.
NA ile sütunun ortalamasını hesaplamak için apply yöntemini kullanacağız. Bir örnek görelim
Adım 1) Eğitimde daha önce, eksik değerlerle birlikte sütun adını list_na adlı listede sakladık. Bu listeyi kullanacağız
Adım 2) Şimdi ortalamayı na.rm = DOĞRU argümanıyla hesaplamamız gerekiyor. Bu argüman zorunludur çünkü sütunlarda eksik veriler vardır ve bu R'ye onları yok saymasını söyler.
# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing
Kod Açıklaması:
Uygulama yönteminde 4 argüman iletiyoruz.
- df: df_titanic [, colnames (df_titanic)% in% list_na]. Bu kod, list_na nesnesinden sütun adını döndürecektir (yani, "yaş" ve "ücret")
- 2: Sütunlardaki işlevi hesaplayın
- ortalama: Ortalamayı hesaplayın
- na.rm = DOĞRU: Eksik değerleri göz ardı edin
Çıktı:
## age fare## 29.88113 33.29548
Eksik gözlemleri içeren sütunların ortalamasını başarıyla oluşturduk. Bu iki değer, eksik gözlemleri değiştirmek için kullanılacaktır.
Adım 3) NA Değerlerini Değiştirin
Dplyr kitaplığındaki fiil mutasyonu, yeni bir değişken oluşturmada kullanışlıdır. Orijinal sütunu mutlaka değiştirmek istemiyoruz, böylece NA olmadan yeni bir değişken oluşturabiliriz. mutate'in kullanımı kolaydır, biz sadece bir değişken adı seçeriz ve bu değişkeni nasıl yaratacağımızı tanımlarız. İşte tam kod
# 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))
Kod Açıklaması:
Aşağıdaki gibi iki değişken oluşturuyoruz: replace_mean_age ve replace_mean_fare:
- replace_mean_age = ifelse (is.na (yaş), ortalama_missing [1], yaş)
- replace_mean_fare = ifelse (is.na (ücret), ortalama_missing [2], ücret)
Sütun yaşı eksik değerlere sahipse, ortalama_missing'in ilk öğesiyle değiştirin (yaş ortalaması), aksi takdirde orijinal değerleri koruyun. Ücret için aynı mantık
sum(is.na(df_titanic_replace$age))
Çıktı:
## [1] 263
Değiştirme işlemini gerçekleştirin
sum(is.na(df_titanic_replace$replace_mean_age))
Çıktı:
## [1] 0
Orijinal sütun yaşı 263 eksik değere sahipken, yeni oluşturulan değişken bunları yaş değişkeninin ortalaması ile değiştirmiştir.
Adım 4) Eksik gözlemleri medyan ile de değiştirebiliriz.
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)
Çıktı:
Adım 5) Büyük bir veri kümesinde çok sayıda eksik değer olabilir ve yukarıdaki yöntem külfetli olabilir. Yukarıdaki tüm adımları sapply () yöntemini kullanarak tek bir kod satırında çalıştırabiliriz. Ortalama ve medyan değerlerini bilmesek de.
sapply bir veri çerçevesi oluşturmaz, bu nedenle bir veri çerçevesi nesnesi oluşturmak için sapply () işlevini data.frame () içinde sarmalayabiliriz.
# 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)))
Özet
Eksik değerlerle başa çıkmak için üç yöntemimiz var:
- Tüm eksik gözlemleri hariç tutun
- Ortalama ile impute
- Medyan ile impute
Aşağıdaki tablo, tüm eksik gözlemlerin nasıl kaldırılacağını özetlemektedir.
Kütüphane | Amaç | Kod |
---|---|---|
temel | Eksik gözlemleri listeleyin |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Tüm eksik değerleri kaldırın |
na.omit(df) |
Ortalama veya ortanca ile ifade iki şekilde yapılabilir
- Uygula kullanarak
- Sapply kullanma
Yöntem | Detaylar | Avantajlar | Dezavantajları |
---|---|---|---|
Başvuruyla adım adım | Eksik sütunları kontrol edin, ortalama / medyan hesaplayın, değeri kaydedin, mutate () ile değiştirin | Ortanca / ortanca değerini biliyorsunuz | Daha fazla yürütme süresi. Büyük veri kümesiyle yavaş olabilir |
Sapply ile hızlı yol | Eksik değerleri otomatik olarak aramak ve ortalama / medyan ile değiştirmek için sapply () ve data.frame () kullanın | Kısa kod ve hızlı | İsnat değerlerini bilmiyorum |