14.1 레이더 차트(radar chart), or 거미줄 그림(spider plot)
이번 포스팅에서는 (1) 레이더 차트 (radar chart)에 대해서 소개하겠습니다. 방사형의 레이더 차트가 마치 거미줄을 닮아서 거미줄 그림 (spider plot)이라고도 부릅니다.
별 그림 (star plot) 도 레이더 차트와 형태는 거의 유사한데요, 약간 현태가 다른 점이 있고 stars
라는 R 패키지가 별도로 있고 해서 다음번에 따로 설명을 드리겠습니다.
14.1.1 데이터 세트
R 실습에 사용할 데이터는 MASS
패키지에 내장되어 있는 Cars93
데이터프레임입니다. 분석 대상 변수로는 차 유형(Type)
, 가격(Price)
, 고속도로연비(MPG.highway)
, 마력(Horsepower)
, 분당회전수RPM(RPM)
, 길이(Length)
, 무게(Weight)
등의 7개 변수입니다.
library(MASS)
str(Cars93)
## 'data.frame': 93 obs. of 27 variables:
## $ Manufacturer : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
## $ Model : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
## $ Type : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
## $ Min.Price : num 12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
## $ Price : num 15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
## $ Max.Price : num 18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
## $ MPG.city : int 25 18 20 19 22 22 19 16 19 16 ...
## $ MPG.highway : int 31 25 26 26 30 31 28 25 27 25 ...
## $ AirBags : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
## $ DriveTrain : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
## $ Cylinders : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
## $ EngineSize : num 1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
## $ Horsepower : int 140 200 172 172 208 110 170 180 170 200 ...
## $ RPM : int 6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
## $ Rev.per.mile : int 2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
## $ Man.trans.avail : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
## $ Fuel.tank.capacity: num 13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
## $ Passengers : int 5 5 5 6 4 6 6 6 5 6 ...
## $ Length : int 177 195 180 193 186 189 200 216 198 206 ...
## $ Wheelbase : int 102 115 102 106 109 105 111 116 108 114 ...
## $ Width : int 68 71 67 70 69 69 74 78 73 73 ...
## $ Turn.circle : int 37 38 37 37 39 41 42 45 41 43 ...
## $ Rear.seat.room : num 26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
## $ Luggage.room : int 11 15 14 17 13 16 17 21 14 18 ...
## $ Weight : int 2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
## $ Origin : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
## $ Make : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...
14.1.2 데이터 전처리
14.1.2.1 차 유형별 분할표 작성
먼저 table()
함수를 사용하여 차 유형별 분할표를 만들어보았습니다. 6종류의 차 유형
별로 10~20여대씩 분포하고 있음을 알 수 있습니다.
# cross tabulation by car type
table(Cars93$Type)
##
## Compact Large Midsize Small Sporty Van
## 16 11 22 21 14 9
14.1.2.2 차 유형별 평균 구하기
다음으로, 차 유형(Type)
별로 가격(Price)
, 고속도로연비(MPG.highway)
, 마력(Housepower)
, 분당회전수RPM(RPM)
, 길이(Length)
, 무게(Weight)
등 6개 변수별 평균(mean)을 구해보겠습니다.
doBy
package 의 summaryBy()
함수를 사용하면 연속형변수의 다변량 데이터에 일괄적으로 요약통계량을 편리하게 계산할 수 있습니다. Base
package가 아니므로 install.packages("doBy")
로 설치하시고, library(doBy)
로 호출한 후에 summaryBy()
함수의 FUN = c(mean, min, max, sd, ...)
처럼 원하는 통계량 함수를 입력하면 됩니다. 이번에는 평균만 사용할 것이므로 아래 예에서는 FUN = c(mean)
만 입력하였습니다.
# mean of multivariates by Car Type
# install.packages("doBy")
library(doBy)
##
## Attaching package: 'doBy'
## The following object is masked from 'package:dplyr':
##
## order_by
<- summaryBy(MPG.highway + RPM + Horsepower + Weight + Length + Price ~ Type,
mean_by_Type data=Cars93,
FUN = c(mean))
mean_by_Type
## Type MPG.highway.mean RPM.mean Horsepower.mean Weight.mean Length.mean
## 1 Compact 30 5362 131 2918 182
## 2 Large 27 4673 179 3695 205
## 3 Midsize 27 5336 173 3400 193
## 4 Small 35 5633 91 2313 167
## 5 Sporty 29 5393 160 2900 175
## 6 Van 22 4744 149 3831 186
## Price.mean
## 1 18
## 2 24
## 3 27
## 4 10
## 5 19
## 6 19
14.1.3 레이더 차트 그리기
14.1.3.1 패키지 설치
다음으로, 레이더 차트(radar chart)를 그리려면 fmsb
Package 를 사용합니다. install.packages("fmsb")
로 설치하고, library(fmsb)
로 호출해보겠습니다.
# install.packages("fmsb")
library(fmsb)
##
## Attaching package: 'fmsb'
## The following object is masked from 'package:vcd':
##
## oddsratio
14.1.3.2 radarchart()
함수
fmsb
Package의 radarchart()
함수를 사용하기 위한 데이터 형태는
데이터 구조는 Dataframe
첫번째 행(1st row)에 최대값(max value)
두번째 행(2nd row)에 최소값(min value)
세번째 행부터는 원래의 관측값
이 오도록 데이터를 전처리해주어야 합니다.
14.1.3.3 radrchart()
함수를 사용하기 위한 데이터 준비
[ fmsb Package의 radrchart() 함수 사용하기 위한 데이터 준비 ]
14.1.3.3.1 사용자 정의 함수 만들기
R 사용자정의함수로 첫번째 행에 최대값, 두번째 행에 최소값이 오도록 하여 Dataframe으로 묶는 명령어는 아래와 같습니다.
# manipulating dataset for radar chart
# data frame includes possible maximum values as row 1
# and possible minimum values as row 2
<- function(df) {
df_radarchart <- data.frame(df)
df <- apply(df, 2, max)
dfmax <- apply(df, 2, min)
dfmin as.data.frame(rbind(dfmax, dfmin, df))
}
14.1.3.3.2 변수의 표준화
사용자정의함수에 더하여 scale()
함수를 사용해서 6개의 변수를 표준화 하였습니다.
# maximum value as row 1, minimum value as row 2 : user-defined function df_radarchart
# standardization : scale()
<- df_radarchart(scale(mean_by_Type[,c(2:7)]))
mean_by_Type_scale mean_by_Type_scale
## MPG.highway.mean RPM.mean Horsepower.mean Weight.mean Length.mean Price.mean
## 1 1.61 1.14 0.986 1.14 1.533 1.279
## 2 -1.42 -1.33 -1.730 -1.51 -1.319 -1.634
## 11 0.36 0.44 -0.502 -0.45 -0.187 -0.260
## 21 -0.34 -1.33 0.986 0.91 1.533 0.781
## 3 -0.34 0.38 0.790 0.39 0.603 1.279
## 4 1.61 1.14 -1.730 -1.51 -1.319 -1.634
## 5 0.12 0.52 0.393 -0.48 -0.711 -0.058
## 6 -1.42 -1.15 0.064 1.14 0.081 -0.108
14.1.3.4 레이더 차트 그리기
드디어 radarchart()
함수를 사용해서 레이더 차트를 그려보겠습니다. 각 옵션에 대한 기능은 아래 R 명령어에 부가설명을 달아놓았습니다.
범례는 legend()
함수를 사용해서 왼쪽 상단에 추가하였습니다.
# radar chart (or spider plot)
radarchart(df = mean_by_Type_scale, # The data frame to be used to draw radarchart
seg = 6, # The number of segments for each axis
pty = 16, # A vector to specify point symbol: Default 16 (closed circle)
pcol = 1:6, # A vector of color codes for plot data
plty = 1:6, # A vector of line types for plot data
plwd = 2, # A vector of line widths for plot data
title = c("radar chart by Car Types") # putting title at the top-middle
)
# adding legend
legend("topleft", legend = mean_by_Type$Type, col = c(1:6), lty = c(1:6), lwd = 2)
선의 형태(plty
)나 선의 색깔(pcol
)을 프로그래밍 편하라고 1:6
이라고 했는데요, 원하는 선 모양이나 색깔을 순서대로 지정할 수 있습니다.
다음번 포스팅에서는 별 그림(star graph)에 대해서 알아보겠습니다.