본문 바로가기
Programming/R

[ R ] 그룹별 누적 합계 구하기

by 코딩하는 금융인 2021. 4. 6.

# R을 활용하여 그룹별 누적 합계 구하기

*본 문제는 모 기업 데이터 분석 시험에서 나온 문제를 제 방식대로 변형한 문제입니다.


데이터 설명

[ MEMBER_ORDER ]

  1. member_no : 회원번호
  2. group : 그룹명(A/B/C)
  3. order_code : 주문번호
  4. order_date : 주문일자
  5. order_pay : 주문금액

* 위의 예시는 필자가 임의의 값으로 넣은 데이터 테이블입니다.


문제. MEMBER_ORDER 테이블에서 각 그룹(group)의 일자별 누적 고객수(cum_buyer_cnt)를 구하는 코드를 작성하라.

  • 이때 2020-07-XX의 누적 고객수란 2020년 7월 1일부터 2020년 7월 xx일까지 기간 동안 한 번 이상 주문한 회원의 수이며, 누적 고객수의 정의에 따라 이미 한 번 주문을 한 회원이 추가 주문을 하여도 누적 고객수는 증가하지 않는다.

#나의 풀이 in Rstudio

# 패키지 다운로드
library(dplyr); library(data.table)
data.table(MEMBER_ORDER %>% # NA 제거
					na.omit() %>% # 그룹 및 주문일자별 정렬 (누적값을 만들어주기 위해)
                    arrange(group,order_date) %>% # 한 번 이상 주문한 회원에 대해서는 누적 count하지 않으므로 member_no 기준 고유처리
                    distinct(member_no,.keep_all=TRUE) %>% # 그룹 및 주문일자별 묶기
                    group_by(group,order_date) %>% # sum_buyer_cnt라는 그룹 및 주문일자별 합값 변수 만들기
                    summarise(sum_buyer_cnt=sum(n())) %>% # cum_buyer_cnt라는 그룹 및 주문일자별 누적 고객수 만들기
                    group_by(group) %>%
                    mutate(cum_buyer_cnt = cumsum(sum_buyer_cnt))

데이터 분석 설명

  1. na.omit() 활용하여 테이블 내 결측값 제거 (편의상 대체 대신 제거)
  2. arrange(그룹, 주문일자) 활용하여 그룹 및 주문일자별 오름차순 정렬
  3. distinct(회원번호, .keep_all = TRUE) : 회원번호 중복값 처리 및 모든 컬럼은 유지
  4. group_by ~ summarise() : 그룹 및 주문일자별 주문수의 합 변수 생성
  5. group_by ~ mutate() : 위의 주문합 변수를 활용하여 cumsum 누적 주문수 변수 만들기

결과 예시

R을 활용한 데이터 분석의 핵심은 dplyr 패키지로 얼마나 데이터 테이블을 자유자재로 활용하느냐입니다.

데이터에서 어떤 변수가 중요하고 내가 원하는 값을 찾기 위해서는 데이터 테이블을 제대로 전처리하고 활용하는 능력이 중요하므로 dplyr 라이브러리를 제대로 공부해놓아야 합니다.

반응형

댓글