Chain.jl ile okunabilirliği artırma

Julia'da Veri İşleme

Katerina Zahradova

Instructor

Karmaşık kodla ilgili sorunlar

# Okunabilir değil 
combine(groupby(
    select(wages, :year, :eff_2020)
        :year),
        :eff_2020 => mean)
# Parantez unutması kolay
combine(groupby(wages, :year, ... )
syntax: incomplete: 
input beklenmedik şekilde bitti ...
# Çok sayıda ara değişken
w_tmp = select(wages, :state, :year, :eff_2020)
year_groups = groupby(w_tmp, :year)
combine(year_groups, :eff_2020 => mean)
# Önemli bir şeyi üzerine yazmak kolay
select!(wages, :year, :eff_2020)
groupby(wages, :state)
ArgumentError: 
"state" adlı sütun bulunamadı ...
Julia'da Veri İşleme

Piping nedir?

  • Kodlama yaklaşımı
  • Art arda gelen çoklu fonksiyon çağrılarını birleştirir
  • Kodu okunur tutar
  • Ara sonuçları kaydetmeye gerek yok
  • İç içe yapı yok

Piping

Julia'da Veri İşleme

Chain.jl kullanma

Yıla göre ortalama asgari ücreti hesaplama

  • doğru sütunları seçme
  • DataFrame'i :year ile gruplama
  • yıl bazında ortalama hesaplama
@chain wages begin

select(:state, :year, :eff_2020)
groupby(:year) combine(:eff_2020 => mean)
end
53×2 DataFrame
Row    year    eff_2020_mean
       Int64   Float64
_________________________
1      1968    9.28529
...
Julia'da Veri İşleme

_ ile piping

@chain wages begin
    select(:state, :year, :eff_2020)
    groupby(:year)
    combine(:eff_2020 => mean)    

# Birden çok yerde pipe için _ kullanın plot(_.year, _.eff_2020_mean)
end

Yıllara göre etkili asgari ücret grafiği

Julia'da Veri İşleme

@aside ile piping'i atlamak

@chain wages begin
    select(:state, :year,
        :eff_2020, :state_2020)
    groupby(:year)
    combine([:eff_2020,
        :state_2020] .=> mean)

# Pipe'ı atlamak için @aside kullanın @aside plot(_.year,_.eff_2020_mean) plot!(_.year,_.state_2020_mean)
end

Eyalet ve asgari ücret karşılaştırma grafiği

Julia'da Veri İşleme

Sonucu kaydetme

# Chain makrosunun çıktısını değişken olarak kaydedin
wages_mean_by_year = @chain wages begin
    select(:state, :year, :eff_2020, :state_2020)
    groupby(:year)
    combine([:eff_2020, :state_2020] .=> mean)
end
# İlk satırı yazdır
println(first(wages_mean_by_year))
DataFrameRow
Row | year     eff_2020_mean   state_2020_mean
    | Int64    Float64         Float64
____|_________________________________
   1| 1968     9.28529         6.21549
Julia'da Veri İşleme

Haydi pratik yapalım!

Julia'da Veri İşleme

Preparing Video For Download...