Menangani nilai hilang

Manipulasi Data di Julia

Katerina Zahradova

Instructor

Menemukan nilai hilang

# Periksa apakah ada nilai hilang
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
Manipulasi Data di Julia

ismissing()

# Temukan baris dengan nilai hilang
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             ...
Manipulasi Data di Julia

ismissing()

# Temukan baris dengan nilai hilang
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
Manipulasi Data di Julia

dropmissing()

# Hapus semua nilai hilang
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
# Hapus nilai hilang di kolom island
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
Manipulasi Data di Julia

replace()

# Ganti missing dengan nilai tertentu
replace!(penguins.body_mass_g, missing => 0)
# Ganti missing dengan mean
replace!(penguins.body_mass_g, missing => mean(skipmissing(penguins.body_mass_g)))
Manipulasi Data di Julia

Mengganti dengan statistik ringkasan terkelompok

Perbandingan penguin

1 Gambar milik www.bas.ac.uk/about/antarctica/wildlife/penguins/
Manipulasi Data di Julia

Mengganti dengan groupby()

# Iterasi tiap grup dan ganti dengan mean dibulatkan per grup
for group in groupby(penguins, :species)
    group[ismissing.(group.body_mass_g), :body_mass_g] .= round(mean(skipmissing(group.body_mass_g)))
end

# Periksa nilai hilang
describe(penguins, :nmissing)
7×2 DataFrame
Row variable           nmissing
    Symbol             Int64
1   species            0
...
6   body_mass_g        0
7   sex                0
Manipulasi Data di Julia

Mengganti menggunakan beberapa kolom

# Iterasi lebih banyak grup dan ganti dengan mean dibulatkan per grup
for group in groupby(penguins, [:species, :sex])
    group[ismissing.(group.body_mass_g), :body_mass_g] .= round(mean(skipmissing(group.body_mass_g)))
end
Manipulasi Data di Julia

Data tidak cukup

# Apa yang terjadi jika tidak ada rekaman dalam grup
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[]
Manipulasi Data di Julia

Ringkasan cepat - temukan dan hapus nilai hilang

  • ismissing(var): mengembalikan true jika var = missing, false jika tidak
  • ismissing.(df.col): mengembalikan vektor nilai true/false
  • df[ismissing!(df.col),:]: mengembalikan baris df saat nilai di col adalah missing
  • dropmissing(df): menghapus semua baris yang berisi missing
  • dropmissing!(df, :col): menghapus semua baris dengan missing di col; menimpa df
Manipulasi Data di Julia

Ringkasan cepat - ganti nilai hilang

  • replace!(df.col, missing => mean(skipmissing(df.col))): mengganti missing di col dengan mean col (dihitung dengan melewati nilai missing)
  • Untuk mengganti missing per grup
    for group in groupby(df, :col)
      group[ismissing.(group.col),:col] = value  # atau dengan mean per grup
    end
    
Manipulasi Data di Julia

Ayo berlatih!

Manipulasi Data di Julia

Preparing Video For Download...