R|Rstudio

집단별 기초 통계량 구하기

루아흐뉴마 2018. 6. 11. 01:04
반응형

집단별 데이터 처리



  • 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.


반응형