Améliorer la lisibilité avec Chain.jl

Manipulation de données en Julia

Katerina Zahradova

Instructor

Problèmes avec du code complexe

# Peu lisible 
combine(groupby(
    select(wages, :year, :eff_2020)
        :year),
        :eff_2020 => mean)
# Facile d'oublier une parenthèse
combine(groupby(wages, :year, ... )
syntax: incomplete: 
fin d'entrée prématurée ...
# Trop de variables intermédiaires
w_tmp = select(wages, :state, :year, :eff_2020)
year_groups = groupby(w_tmp, :year)
combine(year_groups, :eff_2020 => mean)
# Risque d'écraser quelque chose d'important
select!(wages, :year, :eff_2020)
groupby(wages, :state)
ArgumentError: 
column name "state" not found ...
Manipulation de données en Julia

Qu'est-ce que la canalisation ?

  • Approche de codage
  • Enchaîne plusieurs appels de fonctions
  • Rend le code facile à lire
  • Pas besoin d'enregistrer les résultats intermédiaires
  • Sans imbrication

Canalisation

Manipulation de données en Julia

Utiliser Chain.jl

Calculer le salaire minimum moyen par année

  • sélectionner les bonnes colonnes
  • regrouper le DataFrame par :year
  • calculer la moyenne par année
@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
...
Manipulation de données en Julia

Canaliser avec _

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

# Utilisez _ pour injecter à plusieurs endroits plot(_.year, _.eff_2020_mean)
end

Graphique du salaire minimum effectif selon l'année

Manipulation de données en Julia

Sauter la canalisation avec @aside

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

# Utilisez @aside pour sauter la canalisation @aside plot(_.year,_.eff_2020_mean) plot!(_.year,_.state_2020_mean)
end

Graphique comparant l'État et le salaire minimum

Manipulation de données en Julia

Enregistrer le résultat

# Enregistrer la sortie de la macro chain dans une variable
wages_mean_by_year = @chain wages begin
    select(:state, :year, :eff_2020, :state_2020)
    groupby(:year)
    combine([:eff_2020, :state_2020] .=> mean)
end
# Afficher la première ligne
println(first(wages_mean_by_year))
DataFrameRow
Row | year     eff_2020_mean   state_2020_mean
    | Int64    Float64         Float64
____|_________________________________
   1| 1968     9.28529         6.21549
Manipulation de données en Julia

Passons à la pratique !

Manipulation de données en Julia

Preparing Video For Download...