[ADP] R-데이터 마트(1) / reshape패키지(metl,cast함수)

2020. 7. 13. 18:38ADP | ADsP with R/Knowledge

 R언어와 사용법에 관한 게시글들은 "한국 데이터 산업진흥원"에서 출간한 국가공인 ADP/ADsP자격증을 위한 "데이터 분석 전문 가이드"에 서술된 수준에 한정지어 다루어 볼 것입니다.

 ADP필기 준비를 위한 R의 기본적인 문법과 패키지들을 학습을 목표로 합니다.   


1. 데이터 마트의 정의

 데이터 마트란 데이터의 한 부분으로 특정 사용자가 관심을 갖는 데이터들을 담은 비교적 작은 규모의 데이터 웨어하우스이다. 

 즉, 일반적인 데이터베이스 형태로 갖고 있는 다양한 정보를 사용자의 요구 항목에 따라 체계적으로 분석하여 기업의 경영활동을 돕기 위한 시스템을 말한다.

 데이터 웨어하우스는 정부 기관 또는 정부 전체의 상세 데이터를 포함하는 반면, 데이터 마트는 전체적인 데이터 웨어하우스에서 일부 데이터를 가지고 특정 사용자를 대상으로 한다. 

 다시 말하면, 데이터 웨어하우스와 데이터 마트의 구분은 사용자의 기능 및 제공 범위를 기준으로 한다.

 

2. R-reshape을 활용하여 데이터 마트 개발하기

 

 데이터는 여러 계층으로 그룹화/계층화를 시키거나 또는 다양한 관점을 통해 분석할 필요가 있다. 데이터 분석을 하기 이전에 데이터 재정렬을 하거나 밀집화(aggregation)을 진행할 수 있는데 밀집화는 우리가 잘 아는 엑셀의 피벗테이블과 같은 형태이다. 

 밀접화는 직관적인 이해를 시킬 수 있지만, 데이터에 있어서 많은 정보의 손실을 야기한다. 그렇기에 재정렬을 통해 데이터의 모든 정보를 유지하고 데이터를 다양한 각도에서 보는 해석을 할 역량을 기를 필요가 있다. 

 지금부터, R에서 reshape함수를 통해 실습을 진행하고자 한다. reshape함수는 melt와 cast만을 이용해 데이터를 재구성하거나 밀집화된 데이터를 유연하게 생성해준다. 그리고 기존 데이터 구조를 column-wise하게 전환시키는데 크게 melt와 cast단계로 구분짓는다. 이를 직접 실습해보자.

 

1) reshape 패키지 설치 및 로드

 

# reshape 패키지 install
install.packages("reshape")

# reshape library 로드
library(reshape)

 

 

2) 실습에 사용될 데이터셋 불러오기

 

# 실습에 사용될 데이터셋 불러오기
data(airquality)

head(airquality, 10)  # 기본 6개를 출력

head함수를 통해 상위 10개의 데이터를 확인했다. 뒤의 숫자 parameter를 주지 않으면 기본 6개의 상위 데이터를 출력한다.


# column확인 
names(airquality)

# column명을 소문자로 변환
names(airquality) = tolower(names(airquality))

# 재확인
names(airquality)

 

3) melt&cast 함수

# id를 기준으로 나머지 변수들을 variable이란 이름의 데이터로 변환
# 결측치 제거
aqm = melt(airquality, id = c("month", "day"), na.rm=TRUE)

# 상위 6개 출력
head(aqm)

위의 출력 결과물을 기존 데이터와 비교해보면, month와 day를 기준으로 ozone부터 temp까지 컬럼들의 값을 variable과  value로 나열시킨 것을 확인할 수 있다.


# cast작업 - 피벗팅과 비슷
temp <- cast(aqm, day~month~variable)
temp

ozone 변수
solar.r변수

출력결과를 보면 월 일마다의 변수별 수치를 나타낸다. 이는 ozone과 solar.r뿐만 아니라 wind/temp 모두 동일하다.


# 월별 변수들의 평균값
temp1 <- cast(aqm, month~variable, mean)
temp1

위는 day부터 축형성을 시작했지만, day를 인수에서 제외시켰다. 그리고 mean함수를 적용하여 월별 변수들의 평균값을 구하였다.


# 월별 변수들의 평균값 / 개별 변수마다 분리해 표시
temp2 <- cast(aqm, month~.|variable, mean)
temp2

위의 결과와 동일하지만, 각 컬럼들을 완전하게 분리시켜 표시한다. 이는 보기에는 편할지 몰라도 데이터마트로 만들기에 불편하다.


# 월별 변수들의 평균값 / 마지막 행에 소계를 표시
temp3 <- cast(aqm, month~variable, mean,margins=c("grand_row","grand_col"))
temp3

- margin옵션은 행과 열에 대해 소계를 산출한다.


# 특정 변수만 처리를 할 경우
temp4 <- cast(aqm, day~month, mean, subset = variable == "ozone")
temp4 

subset을 이용하여 특정 변수만 뽑아낼 수도 있고, 이 특정 변수만 전처리 작업을 진행할 수 있다.


# 변수의 최대값과 최소값을 표시
temp5 <- cast(aqm, month~variable, range)
temp5 

range는 말 그대로 범위(최소값~최대값)를 나타낸다 "_x1"은 최소값을 나타내고 "_x2"는 최대값을 나타낸다.

위의 결과는 각 월마다 각 변수의 최소값과 최대값을 나타낸 것이다.