Chain.jl로 가독성 높이기

Julia로 하는 데이터 조작

Katerina Zahradova

Instructor

복잡한 코드의 문제

# 가독성 낮음
combine(groupby(
    select(wages, :year, :eff_2020)
        :year),
        :eff_2020 => mean)
# 괄호를 빼먹기 쉬움
combine(groupby(wages, :year, ... )
syntax: incomplete: 
premature end of input ...
# 중간 변수 많음
w_tmp = select(wages, :state, :year, :eff_2020)
year_groups = groupby(w_tmp, :year)
combine(year_groups, :eff_2020 => mean)
# 중요한 것을 덮어쓰기 쉬움
select!(wages, :year, :eff_2020)
groupby(wages, :state)
ArgumentError: 
column name "state" not found ...
Julia로 하는 데이터 조작

파이핑이란?

  • 코딩 방식
  • 여러 연속 함수 호출을 결합
  • 코드 가독성 유지
  • 중간 결과 저장 불필요
  • 중첩 없음

파이핑

Julia로 하는 데이터 조작

Chain.jl 사용하기

연도별 평균 최저임금 계산

  • 필요한 열 선택
  • DataFrame을 :year로 그룹화
  • 연도별 평균 계산
@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로 하는 데이터 조작

_로 파이핑하기

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

# 여러 위치에 파이프하려면 _ 사용 plot(_.year, _.eff_2020_mean)
end

연도별 실질 최저임금 그래프

Julia로 하는 데이터 조작

@aside로 파이핑 생략하기

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

# 파이핑을 건너뛰려면 @aside 사용 @aside plot(_.year,_.eff_2020_mean) plot!(_.year,_.state_2020_mean)
end

주와 최저임금 비교 그래프

Julia로 하는 데이터 조작

결과 저장하기

# 체인 매크로 결과를 변수로 저장
wages_mean_by_year = @chain wages begin
    select(:state, :year, :eff_2020, :state_2020)
    groupby(:year)
    combine([:eff_2020, :state_2020] .=> mean)
end
# 첫 행 출력
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로 하는 데이터 조작

Ayo berlatih!

Julia로 하는 데이터 조작

Preparing Video For Download...