반응형
집단별 데이터 처리
- ddply 함수는 plyr 패키지에 포함된 함수이다.
- 아래와 같이 plyr 패키지를 설치하고 로드하면 ddply 함수를 사용할 수 있다.
install.packages('plyr')
library(plyr)
사용 데이터: 제주특별자치도 관광산업 빅데이터 분석정보(공공데이터)
- 예제로 사용된 데이터는 공공데이터포털에 등록된 2014~2016년 제주도 관광산업 빅데이터 분석정보이다.
- 2014년에서 2016년 간 내국인 제주도 관광객이 업종별/성별/연령별로 이용한 카드금액/카드건수가 나타나 있다.
- 각 행은 한 사람의 관광객이 제주도 여행을 간 기준년월(yyyymm)을 기점으로 하는 카드 사용 건에 대한 정보이다.
- 아쉽게도 데이터에 대한 메타정보가 없어서 각 변수값에 대한 정보를 일부 추측할 필요가 있다.
- 편의를 위해 한글로 사용된 변수명을 모두 영어로 고친 점 외에는 별도의 편집은 하지 않았다.
str(jeju)
## 'data.frame': 13146 obs. of 9 variables:
## $ yyyymm : Factor w/ 24 levels "2014-09","2014-10",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ region.1st: Factor w/ 2 levels "서귀포시","제주시": 1 1 1 1 1 2 1 2 2 1 ...
## $ region.2nd: Factor w/ 10 levels "남원읍","노형동",..: 3 3 3 1 3 7 8 7 7 1 ...
## $ category : Factor w/ 14 levels "골프 용품","귀 금 속",..: 5 5 5 5 5 8 5 8 8 1 ...
## $ gender : Factor w/ 2 levels "남","여": 2 1 2 1 1 1 1 2 2 1 ...
## $ age : Factor w/ 4 levels "20대","30대",..: 4 4 3 4 3 4 4 3 2 4 ...
## $ cardmount : int 14434000 15119000 7609500 7092500 9098500 10267600 4125000 7412800 11925400 1727400 ...
## $ cardcnt : int 67 72 41 40 59 71 30 55 95 14 ...
## $ costbycnt : int 215433 209986 185598 177313 154212 144614 137500 134778 125531 123386 ...
ddply 함수 예제
- ddply 함수는 사용 문법보다 예제를 먼저 보여주는 것이 이해하기 쉬울 것 같다.
- 일단, 2014~2016년 내국인 제주도 관광객의 연령별로 사용한 평균 카드금액을 알아보자. (BC 카드만 해당)
- 아래와 같이 ddply 함수를 적용하면, 각 집단별 통계량을 구할 수 있다.
- 본 통계에 따르면, 20대 제주도 관광객은 1회 여행시 평균적으로 약 236만원을 카드로 사용한 것으로 나타났다.
- 구매 금액만 놓고 보면 30~50대의 구매력은 큰 차이가 없어 보인다. (평균만 놓고보면 그렇다는 이야기)
ddply(jeju, .(age), summarize, mean(cardmount, na.rm=T))
## age ..1
## 1 20대 2358929
## 2 30대 4167261
## 3 40대 4191983
## 4 50대 3971093
- 각 집단별로 사례수가 다를 수 있으니 사례수를 함께 나열해보자.
- 추가적인 통계는 뒤에 덧붙여서 계속 작성할 수 있다.
- 아래 결과와 같이 각 집단별로 사례수에 큰 차이가 없어 보인다. 각 집단별로 3천~3천5백명 수준
ddply(jeju, .(age), summarize, mean(cardmount, na.rm=T), sum(tabulate(age)))
## age ..1 ..2
## 1 20대 2358929 3137
## 2 30대 4167261 3565
## 3 40대 4191983 3428
## 4 50대 3971093 3016
- 여기에 집단을 추가할 수 있다.
- age 변수 외에 gender 변수를 넣어 성별/연령별 카드이용 금액을 알아보자.
- 20대의 경우 여성의 카드이용 금액이 높은데 반해 30~50대의 경우 남성의 카드이용 금액이 더 높게 나타났다.
ddply(jeju, .(age, gender), summarize, mean(cardmount, na.rm=T), sum(tabulate(age)))
## age gender ..1 ..2
## 1 20대 남 2001758 1466
## 2 20대 여 2672282 1671
## 3 30대 남 4290112 1786
## 4 30대 여 4043927 1779
## 5 40대 남 4642239 1770
## 6 40대 여 3711312 1658
## 7 50대 남 4348727 1587
## 8 50대 여 3551705 1429
- 출력되는 변수명이 '..1'과 같이 자동으로 매겨지는게 싫은 경우 임의로 지정할 수 있다.
- 아래와 같이 계산식 앞에 변수명=을 붙여주면 된다.
ddply(jeju, .(age, gender), summarize, avg=mean(cardmount, na.rm=T), cnt=sum(tabulate(age)))
## age gender avg cnt
## 1 20대 남 2001758 1466
## 2 20대 여 2672282 1671
## 3 30대 남 4290112 1786
## 4 30대 여 4043927 1779
## 5 40대 남 4642239 1770
## 6 40대 여 3711312 1658
## 7 50대 남 4348727 1587
## 8 50대 여 3551705 1429
Copyright (2018) Ruahneuma. All Rights Reserved.
반응형
'R|Rstudio' 카테고리의 다른 글
R로 등분산 검정(Levene, Bartlett) (0) | 2018.08.20 |
---|---|
집단별 평균 차이검정(t검정, t-test) (0) | 2018.07.24 |
데이터 요약하기(Summarizing) (0) | 2018.06.07 |
#2 데이터 가공하기(Manipulating) (0) | 2018.05.22 |
#1 데이터 확인하기(Checking) (0) | 2018.05.21 |