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.

R'deki Eksik Değerleri Değiştirin

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 Değerleri Hariç Tut

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ı:

Eksik verileri Ortalama ve Medyan ile ilişkilendirin

) 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