R'deki Eksik Değerler (NA) Nasıl Değiştirilir: na.omit & na.rm
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ğerlerin çıkarılması veya değiştirilmesi gerekir.
Bu eğitimde, dplyr kütüphanesi ile eksik değerlerle nasıl başa çıkılacağını öğreneceğiz. dplyr kütüphanesi, veri analizini gerçekleştirmek için bir ekosistemin parçasıdır.
Bu eğitimde, öğreneceksiniz
mutasyona uğrat()
Dördüncü fiil dplyr kütüphanesi Yeni değişken oluşturmak veya mevcut bir değişkenin değerlerini değiştirmek faydalıdır.
İki bölüm halinde ilerleyeceğiz. Nasıl yapılacağını öğreneceğiz:
- eksik değerleri veri çerçevesinden hariç tutun
- eksik değerleri ortalama ve medyanla ilişkilendirin
mutate() fiili 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 (YOK)
dplyr kütüphanesindeki na.omit() yöntemi eksik gözlemleri hariç tutmanın basit bir yoludur. Verilerden tüm NA'ları çı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 Titanic veri setini kullanacağız. Bu veri setinde trajedi sırasında uçakta bulunan yolcuların bilgilerine ulaşabiliyoruz. Bu veri setinde dikkat edilmesi gereken birçok NA var.
İnternetten csv dosyasını yükleyeceğiz ve ardından hangi sütunların NA olduğunu 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 observations list_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ] list_na
Çıktı:
## [1] "age" "fare"
Burada,
colnames(df_titanic)[apply(df_titanic, 2, anyNA)]
Veri içermeyen sütunların adını verir.
Yaş ve ücret sütunlarında eksik değerler var.
Bunları na.omit() ile bırakabiliriz.
library(dplyr) # Exclude the missing observations df_titanic_drop <-df_titanic %>% na.omit() dim(df_titanic_drop)
Çıktı:
## [1] 1045 13
Yeni veri kümesi, orijinal veri kümesindeki 1045'a kıyasla 1309 satır içeriyor.
Eksik verileri Ortalama ve Medyan ile ilişkilendirin
Ayrıca eksik değerleri medyan veya ortalama ile de yükleyebiliriz (doldurabiliriz). Ortalama ve medyan için iki ayrı değişken oluşturmak iyi bir uygulamadır. Oluşturulduktan sonra eksik değerleri yeni oluşturulan değişkenlerle değiştirebiliriz.
NA'lı sütunun ortalamasını hesaplamak için uygulama yöntemini kullanacağız. Bir örnek görelim
) 1 Adım Eğitimin başlarında, eksik değerlerin bulunduğu sütun adını list_na adlı listede sakladık. Bu listeyi kullanacağız
) 2 Adım Şimdi ortalamayı na.rm = TRUE argümanıyla hesaplamamız gerekiyor. Bu argüman zorunludur çünkü sütunlarda eksik veriler vardır ve bu R'ye bunları yok saymasını söyler.
# Create mean average_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na], 2, mean, na.rm = TRUE) average_missing
Kod Açıklaması:
Apply metodunda 4 adet argüman aktarıyoruz.
- 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 fonksiyonu hesaplayın
- demek: Ortalamayı hesapla
- na.rm = DOĞRU: Eksik değerleri yoksay
Çı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özlemlerin yerine kullanılacaktır.
) 3 Adım NA Değerlerini Değiştirin
Dplyr kitaplığındaki fiil mutasyonu, yeni bir değişken oluşturmada kullanışlıdır. NA olmadan yeni bir değişken oluşturabilmek için orijinal sütunu mutlaka değiştirmek istemiyoruz. Mutate'in kullanımı kolaydır, sadece bir değişken adı seçip bu değişkenin nasıl oluşturulacağını tanımlıyoruz. İşte kodun tamamı
# Create a new variable with the mean and median df_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 replacement_mean_age ve replacement_mean_fare olmak üzere iki değişken oluşturuyoruz:
- replacement_mean_age = ifelse(is.na(yaş), ortalama_missing[1], yaş)
- replacement_mean_fare = ifelse(is.na(ücret), ortalama_missing[2],ücret)
Yaş sütununda eksik değerler varsa, bunu ortalama_missing'in (yaş ortalaması) ilk öğesiyle değiştirin, 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ın yerine yaş değişkeninin ortalamasını koydu.
) 4 Adım Eksik gözlemleri medyanla da 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ı:
) 5 Adım Büyük bir veri kümesinde çok sayıda eksik değer bulunabilir ve yukarıdaki yöntem kullanışsız olabilir. Yukarıdaki adımların tümünü sapply() yöntemini kullanarak tek satır kodda uygulayabiliriz. Ortalama ve medyan değerlerini bilemesek de.
sapply bir oluşturmaz veri çerçevesiböylece bir veri çerçevesi nesnesi oluşturmak için sapply() işlevini data.frame() içine sarabiliriz.
# Quick code to replace missing values with the mean df_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:
- Eksik gözlemlerin tümünü hariç tut
- Ortalama ile atfet
- Medyanla yükleme
Aşağıdaki tabloda eksik tüm gözlemlerin nasıl kaldırılacağı özetlenmiştir
Kütüphane | Nesnel | Kod |
---|---|---|
baz | Eksik gözlemleri listeleyin |
colnames(df)[apply(df, 2, anyNA)] |
dplyr | Tüm eksik değerleri kaldırın |
na.omit(df) |
Ortalama veya medyanla atama iki şekilde yapılabilir
- Uygulamayı kullanma
- Sapply'yi kullanma
Yöntem | Detaylar | Avantajlar | Dezavantajlar |
---|---|---|---|
Başvuruyla adım adım | Eksik sütunları kontrol edin, ortalama/medyanı hesaplayın, değeri saklayın, mutate() ile değiştirin | Ortalamanın/ortancanın değerini biliyorsunuz | Daha fazla yürütme süresi. Büyük veri kümesinde 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ı | Atama değerlerini bilmiyorum |