14.3 평행 좌표 그림 (parallel coordinate plot)
이번 절에서는 (3) 평행 좌표 그림 (parallel coordinate plot)에 대해서 소개하겠습니다.
14.3.1 데이터 세트
MASS Package
의 parcoord()
함수를 사용하겠으며, 예제 데이터 역시 MASS
Package에 내장된 Cars93
데이터 프레임의 차종(Type)
별로 선모양(line type)과 색깔(color)을 달리하여 가격(Price)
, 고속도로연비(MPG.highway)
, 마력(Horsepower)
, 분당회전수(RPM)
, 길이(Length)
, 무게(Weight)
변수를 가지고 그래프를 그려보겠습니다.
##--------------------------------------
## parallel coordinate plot
##--------------------------------------
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.3.2 데이터 전처리
차종(Type)
별로 선 모양(lty)과 선 색깔(col)을 다르게 하기 위해서 데이터 전처리를 해보겠습니다. 차종
이 현재는 “Compact
,” “Large
” 등과 같이 character 로 되어있는데요, 1, 2, …, 6 의 numeric 으로 변환하겠습니다.
# making Type_number variable to put line type and color by Car Type
<- transform(Cars93,
Cars93_1 Type_no = ifelse(Type == "Compact", 1,
ifelse(Type == "Large", 2,
ifelse(Type == "Midsize", 3,
ifelse(Type == "Small", 4,
ifelse(Type == "Sporty", 5, 6)))))
)# checking top 10 observations
head(Cars93_1[,c("Type", "Type_no")], n=10)
## Type Type_no
## 1 Small 4
## 2 Midsize 3
## 3 Compact 1
## 4 Midsize 3
## 5 Midsize 3
## 6 Midsize 3
## 7 Large 2
## 8 Large 2
## 9 Midsize 3
## 10 Large 2
14.3.3 평행 좌표 그림 그리기
이제 준비가 되었네요. MASS
Package의 parcoord()
함수를 사용해서 평행 좌표 그림(parallel coordinate plot)을 그려보겠습니다.
Cars93_1[, c("MPG.highway", "RPM", "Horsepower", "Weight", "Length", "Price")]
은 평행좌표그림을 그릴 대상 변수만 선별해 오는 명령문입니다.
위에서 Cars93_1
이라는 새로운 데이터 프레임에 Type_no
라는 numeric 변수를 만들었는데요, 선 유형(lty
, line type)과 색깔(col
, color)를 Cars93_1$Type_no
로 지정을 해줘서 차종(Type)
에 따라서 선 유형과 색깔이 달라지게 했습니다.
var.label = TRUE
옵션을 설정하면 각 변수별로 minimum value, maximum value 가 하단과 상단에 표기됩니다.
main = "parallel coordinate plot of Cars93 by Type"
옵션은 그래프에 제목 넣을 때 사용합니다.
아래 그래프 상단 우측에 범례가 들어가 있는데요, legend()
함수를 사용해서 추가한 것입니다.
# parallel coordinate plot
library(MASS)
parcoord(Cars93_1[, c("MPG.highway", "RPM", "Horsepower", "Weight", "Length", "Price")],
lty = Cars93_1$Type_no,
col = Cars93_1$Type_no,
var.label = TRUE,
main = "parallel coordinate plot of Cars93 by Type")
# putting legend
legend("topright",
legend = c("Compact", "Large", "Midsize", "Small", "Sporty", "Van"),
lty = c(1:6),
col = c(1:6),
lwd = 2, # line width
cex = 0.7) # character size
다음번 포스팅에서는 3차원 산포도 (3 dimensional scatter plot)에 대해서 소개하도록 하겠습니다.