시각화/R

▶R로만드는 데이터시각화 : 데이터멍잉 기초 - tappy, by, aggregate

비주얼라이즈 2014. 4. 10. 11:20


R로하는 데이터시각화 :: 데이터멍잉 - tapply, aggregate, by






R을 활용하여 데이터시각화를 하면서

꼭 필요한 부분이 바로 데이터 멍잉입니다.


데이터 멍잉[data munging]이 무엇인지 알아보야야 하는데요~


멍잉[munging] : 전처리, 파싱, 필터링과 같이 데이터를 이리저리 핸들링하는[각주:1]

, 데이터 멍잉이란 목적에 맞게 데이터를 여러가지

방법으로 다듬는 과정이라고 생각할 수 있겠습니다^^




오늘은 이런 데이터멍잉의 방법으로

tapply, by, aggregate 함수를 적용해보려고 합니다.



**

이번예제는 R로하는데이터시각화의

예제를 바탕으로 진행됨을 알려드립니다.

**



저 역시 R을 공부하기 전까지는

일일이 엑셀을 이용하여 데이터를 이리저리 바꾸곤 했었습니다.

(물론 지금도 엑셀의 기능도 사용하고있습니다.)




이번 예제에서 활용할 데이터는

서울열린데이터광장에서 공개하는 [생필품가격 데이터]이며,


직접 열린데이터광장에서 받을 수도 있지만,

친절히도 저자님께서 url로 실행해볼 수 있도록

해주셨으니 그것을 바탕으로 진행하도록 하겠습니다.




그럼 먼저,

R-studio에서 데이터를 불러오겠습니다.






market_price <- read.csv("http://dl.dropbox.com/u/8686172/requisites.csv", fileEncoding = "euc-kr")

<사용예제 데이터>



데이터의 형태는 아래 사진과 같습니다.



느낌부터가 복잡복잡하지요?

이 데이터를 바탕으로

데이터멍잉과정을 살펴보겠습니다.





tapply, by, aggregate중에

가장먼저 살펴볼것은  'tapply'함수입니다.






1. tapply

[ tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)  ]


X는 우리가 확인하고자하는 가격,INDEX에는 리스트를 입력합니다.

(factor형으로 구성된 리스트)


Fun에는 함수명을 입력합니다.


**

 tapply의 특징


tapply는 키가 하나이고, fun으로 입력한 함수의 리턴 값이 하나라면,

>> 벡터형의 데이터를 반환합니다.


**이것보다 복잡한 데이터가 리턴될 경우

>> 행렬이나 리스트형태로 반환합니다.



EX ) tapply(market_price$"A_PRICE", market_price[,c("M_TYPE_NAME", "A_NAME")], mean)


이렇게 나오는 코드는 아래와 같습니다.



행: ‘M_TYPE_NAME’

열: ‘A_NAME’ 으로 구성된 행렬 데이터입니다.

mean으로 인해 내부값은 모두 평균값이 됩니다.




2. by

ex ) by(market_price$A_PRICEmarket_price[,c("M_TYPE_NAME", "A_NAME")], mean)


두 번째로 살펴볼것은 'by'함수입니다.

위에서 소개한 tapply와 입력하는 방식은 비슷하지만,

조금은 다릅니다.


또한, 다른 작업방식으로 진행됩니다.



**

by의 작업방식



① 가격을(A_NAME)을 분리한 후,

(입력된 data.frame 키 기준) 

각 가격에 mean함수를 적용

이를 리스트로 엮어서 리턴.


(첫 번째 인자와 두 번째 인자로 입력되는 데이터형의 길이는 같아야 된다.)


이번 예제에서는 같은 데이터를

 사용하였기에, 문제가 없습니다.




이렇게 나오는 함수는 아래 사진과 같습니다.^^













마지막으로 aggregate함수를 살펴보겠습니다.





[각주:2]


저자가 말하는 것처럼 저에게도 이 aggregate함수가

가장 눈에 익숙한 형태로 들어와서 편리했습니다.




자, 그럼 aggregate함수를 살펴보겠습니다.






3. aggregate

aggregate(market_price$A_PRICEmarket_price[,c("M_TYPE_NAME", "A_NAME")], mean)

aggregate(A_PRICE ~ M_GU_NAME + A_NAME, market_price, mean)


이런 형태를 갖고 있으며




결과의 형태는 아래의 사진과 같습니다.


현재까지도 가장 많이 사용하고있는 기능인 것 같습니다^^


시각화를 하기 전, 데이터를 다듬는 과정에서

정말 유용하게 쓰이기때문에, 꼭 알아두셨으면합니다.



마지막으로, 오늘 사용한예제들의 결과를

한번에 묶어서 살펴보겠습니다.









  1. 전희원, 『R로하는 데이터시각화』, 2014, 한빛미디어, p.52 [본문으로]
  2. 전희원, 『R로하는 데이터시각화』, 한빛미디어, 2014, p.74 [본문으로]