본문 바로가기
AI/AI 이론

[EP. 31-2] Split-Apply-Combine(분할-적용-병합)

by 티옌.liy 2021. 11. 22.

[세줄요약]

1. 분할(Split) - 큰 문제를 자신이 해결 가능한 작은 문제로 나눠서 분할합니다.

2. 적용(Apply) - 분할한 작은 문제를 독립적으로 해결합니다. 

3. 병합(Combine) - 해결한 모든 작은 문제를 하나의 큰 문제로 다시 합치는 작업을 진행합니다.


Split-Apply-Combine Strategy글을 참고하여 작성했습니다.

 


 

우리는 어떠한 복잡한 문제가 있을때, 큰 문제를 작은 문제로 분해하고 작은문제를 하나씩 풀어가며 결국 큰 문제를 해결합니다. 이처럼, 빅데이터 처리를 위한 탐색적 데이터 분석 단계에서도 하나의 큰 데이터 세트를 해결하고자 하는 문제의 기준에 따라 세분화 하고, 세분화된 작은 데이터 세트에서 유의미한 데이터 또는 정보를 집계 후, 문제에 접근 또는 해결합니다. 위 방법은 데이터 분석 방법 중 가장 일반적 전략 중 하나입니다. 아래 Hadley Wickham의 논문은 Split-Apply-Combine Strategy 전략에 대해 상세하게 설명이 기술되어있습니다.

 

 

The Split-Apply-Combine Strategy for Data Analysis | Journal of Statistical Software

Abstract Many data analysis problems involve the application of a split-apply-combine strategy, where you break up a big problem into manageable pieces, operate on each piece independently and then put all the pieces back together. This insight gives rise

www.jstatsoft.org

 


 

Basic Split-Apply-Combine

 

Fig1. 집계 함수를 사용하는 Split-Apply-Combine

가상의 DataFrame을 활용하여 분할-적용-결합을 진행하는 과정을 기술합니다.

 

 

Step1. 분할 단계 : 문제를 해결하고자 하는 기준에 따라 데이터를 그룹 분할기능으로 기존 그룹을 분할하고,
각각의 그룹를 생성합니다. 이때, 행열 조합을 사용하여 데이터를 원하는 형태로 분할할 수 있습니다.

 

Step2. 적용 단계 : 데이터를 집계, 변환 또는 필터링 등의 기법을 활용하여 각 그룹별 독립적으로 데이터를 가공합니다.

 

Step3. 결합 단계 : 적용 단계에서 얻은 결과를 모아서 데이터 구조로 재결합합니다.

 


Improved Split-Apply-Combine

 

Split-Apply-Combine기법은 직관적이고 간단하면서도 분석 결과도 좋은 모습을 보여주기에, 데이터 분석에 많이 사용되어왔습니다. 그래서 지금도 Split-Apply-Combine은 지속적으로 개선되고 있습니다.

Split-Apply-Combine의 개선 과정을 상세히 서술된 블로그는 아래 링크와 같습니다.

 

분할-적용-병합 전략의 진화

 

R 병렬 프로그래밍

분할-적용-병합 전략의 진화 데이터 분석에서 흔히 사용되는 방법 중 하나가 분할-적용-병합(Split-Apply-Combine) 전략이다. 즉, 큰 문제를 작은 문제로 쪼개고 각 문제에 대해서 적절한 연산(예를 들

statkclee.github.io

 

위 블로그의 내용을 요약하면 아래 기능을 활용하여 기존 기법들을 개선해왔습니다.

 

  • ver.1.0 : Split-Apply-Combine: split, lapply, do.call(rbind, …)
  • ver.2.0(plyr) : Split-Apply-Combine: plyr::ddply
  • ver.3.1 tidyverse : Split-Apply-Combine: group_by, do
  • ver.3.2 tidyverse : Split-Apply-Combine: group_by & by_slice
  • ver.3.3 tidyverse : Split-Apply-Combine: group_by, nest, mutate(map())
  • ver.4.0 tidyverse/base 하이브리드 조합 : Split-Apply-Combine: split, map_dfr

 

댓글