Eksik değerleri yönetme

Julia'da Veri İşleme

Katerina Zahradova

Instructor

Eksik değerleri bulma

# Eksik değer var mı kontrol edin
describe(penguins, :nmissing)
7×2 DataFrame
Row variable           nmissing
    Symbol             Int64
_________________________________
1   species            0
2   island             5
3   culmen_length_mm   0
4   culmen_depth_mm    0
5   flipper_length_mm  0
6   body_mass_g        23
7   sex                0
Julia'da Veri İşleme

ismissing()

# Eksik değer içeren satırları bulun
penguins[ismissing.(penguins.island),:]
5x7 DataFrame
Row species   island    culmen_length_mm  culmen_depth_mm  ... 
    String15  String15  Float64           Float64          ...
___________________________________________________________________
1   Adelie    missing   39.5              17.4             ...
2   Adelie    missing   40.3              18.0             ...
3   Chinstrip missing   46.7              18.3             ...
4   Gentoo    missing   49.3              13.6             ...
5   Gentoo    missing   43.9              17.8             ...
Julia'da Veri İşleme

ismissing()

# Eksik değer içeren satırları bulun
penguins[ismissing.(penguins.island), :species, :sex]
5x3 DataFrame
Row species   island    sex
    String15  String15  String7
________________________________
1   Adelie    missing   MALE
2   Adelie    missing   FEMALE
3   Chinstrip missing   MALE
4   Gentoo    missing   MALE
5   Gentoo    missing   FEMALE
Julia'da Veri İşleme

dropmissing()

# Tüm eksik değerleri düşürün
dropmissing!(penguins)

describe(penguins)
7×2 DataFrame
Row variable           nmissing
    Symbol             Int64
1   species            0
2   island             0
3   culmen_length_mm   0
4   culmen_depth_mm    0
5   flipper_length_mm  0
6   body_mass_g        0
7   sex                0
# island sütunundaki eksikleri düşürün
dropmissing!(penguins, :island)

describe(penguins)
7×2 DataFrame
Row variable           nmissing
    Symbol             Int64
1   species            0
2   island             0
3   culmen_length_mm   0
4   culmen_depth_mm    0
5   flipper_length_mm  0
6   body_mass_g        23
7   sex                0
Julia'da Veri İşleme

replace()

# Eksikleri bir değerle değiştirin
replace!(penguins.body_mass_g, missing => 0)
# Eksikleri ortalama ile değiştirin
replace!(penguins.body_mass_g, missing => mean(skipmissing(penguins.body_mass_g)))
Julia'da Veri İşleme

Gruplu özet istatistiklerle değiştirme

Penguen karşılaştırması

1 Görsel: www.bas.ac.uk/about/antarctica/wildlife/penguins/
Julia'da Veri İşleme

groupby() kullanarak değiştirme

# Grupları dolaşıp her grup için yuvarlanmış ortalama ile değiştirin
for group in groupby(penguins, :species)
    group[ismissing.(group.body_mass_g), :body_mass_g] .= round(mean(skipmissing(group.body_mass_g)))
end

# Eksik değerleri kontrol edin
describe(penguins, :nmissing)
7×2 DataFrame
Row variable           nmissing
    Symbol             Int64
1   species            0
...
6   body_mass_g        0
7   sex                0
Julia'da Veri İşleme

Birden çok sütunla değiştirme

# Daha fazla grup üzerinden dolaşıp her grup için yuvarlanmış ortalama ile değiştirin
for group in groupby(penguins, [:species, :sex])
    group[ismissing.(group.body_mass_g), :body_mass_g] .= round(mean(skipmissing(group.body_mass_g)))
end
Julia'da Veri İşleme

Yetersiz veri

# Grupta hiç kayıt yoksa ne olur
for group in groupby(penguins, [:species, :sex, :flipper_length_mm, :culmen_length_mm])
    group[ismissing.(group.body_mass_g), :body_mass_g] .= round(mean(skipmissing(group.body_mass_g)))
end
ArgumentError: median of an empty array is undefined, Any[]
Julia'da Veri İşleme

Kısa rehber - eksikleri bul ve düşür

  • ismissing(var): var = missing ise true, değilse false döndürür
  • ismissing.(df.col): true/false vektörü döndürür
  • df[ismissing.(df.col),:]: col değeri missing olan satırları döndürür
  • dropmissing(df): missing içeren tüm satırları düşürür
  • dropmissing!(df, :col): col içinde missing olan satırları düşürür; dfyi yerinde yazar
Julia'da Veri İşleme

Kısa rehber - eksikleri değiştir

  • replace!(df.col, missing => mean(skipmissing(df.col))): col içindeki missing değerleri, col ortalamasıyla (eksikler atlanarak hesaplanır) değiştirir
  • missing değerleri gruplar içinde değiştirmek için
    for group in groupby(df, :col)
      group[ismissing.(group.col),:col] = value  # veya grubun ortalamasıyla
    end
    
Julia'da Veri İşleme

Hadi pratik yapalım!

Julia'da Veri İşleme

Preparing Video For Download...