Omgaan met missende waarden

Data manipulatie in Julia

Katerina Zahradova

Instructor

Missende waarden vinden

# Controleren op missende waarden
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
Data manipulatie in Julia

ismissing()

# Rijen met missende waarden zoeken
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             ...
Data manipulatie in Julia

ismissing()

# Rijen met missende waarden zoeken
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
Data manipulatie in Julia

dropmissing()

# Alle missende waarden verwijderen
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
# Missende waarden in kolom island verwijderen
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
Data manipulatie in Julia

replace()

# Vervang missing door een waarde
replace!(penguins.body_mass_g, missing => 0)
# Vervang missing door het gemiddelde
replace!(penguins.body_mass_g, missing => mean(skipmissing(penguins.body_mass_g)))
Data manipulatie in Julia

Vervangen met gegroepeerde samenvatting

Vergelijking pinguïns

1 Afbeelding met dank aan www.bas.ac.uk/about/antarctica/wildlife/penguins/
Data manipulatie in Julia

Vervangen met groupby()

# Loop over groepen en vervang door afgerond groepsgemiddelde
for group in groupby(penguins, :species)
    group[ismissing.(group.body_mass_g), :body_mass_g] .= round(mean(skipmissing(group.body_mass_g)))
end

# Controleer missende waarden
describe(penguins, :nmissing)
7×2 DataFrame
Row variable           nmissing
    Symbol             Int64
1   species            0
...
6   body_mass_g        0
7   sex                0
Data manipulatie in Julia

Vervangen met meerdere kolommen

# Loop over meer groepen en vervang door afgerond groepsgemiddelde
for group in groupby(penguins, [:species, :sex])
    group[ismissing.(group.body_mass_g), :body_mass_g] .= round(mean(skipmissing(group.body_mass_g)))
end
Data manipulatie in Julia

Onvoldoende data

# Wat als er geen records in de groep staan?
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[]
Data manipulatie in Julia

Cheatsheet - missende waarden vinden en verwijderen

  • ismissing(var): geeft true als var = missing, anders false
  • ismissing.(df.col): geeft een vector met true/false
  • df[ismissing.(df.col),:]: rijen uit df waar col missing is
  • dropmissing(df): verwijdert alle rijen met missing
  • dropmissing!(df, :col): verwijdert rijen met missing in col; overschrijft df
Data manipulatie in Julia

Cheatsheet - missende waarden vervangen

  • replace!(df.col, missing => mean(skipmissing(df.col))): vervangt missing in col door het gemiddelde van col (berekend met overslaan van missende waarden)
  • missing per groep vervangen
    for group in groupby(df, :col)
      group[ismissing.(group.col),:col] = value  # of door het groepsgemiddelde
    end
    
Data manipulatie in Julia

Laten we oefenen!

Data manipulatie in Julia

Preparing Video For Download...