20.2 일변량 범주형 자료 그래프
플롯 함수의 데이터 인수가 1개 이며, 그 데이터가 범주형(명목형, 요인 변수)인 경우의 그래프입니다.
이러한 유형의 변수의 시각화를 위한 다양한 그래프 함수가 있는데 이 절에서는 다음과 같은 유형의 그래프에 대하여 살펴보겠습니다.
- 막대 그래프(Bar plot)
- 클리블랜드 점 플롯(Cleveland dot plot)
- 파이 차트(Pie chart)
일반적으로 범주형 데이터의 경우는 그 변수에 대한 도수 분포표 또는 도수 분포도로 그 변수에 대한 통계적 정보를 파악하게 됩니다. 여기서 도수 분포도가 바로 범주형 변수의 시각화 방법의 대상입니다.
참고적으로 도수 분포표(frequency table)는 table()
함수로 구할 수 있습니다.
다음의 예는 Cars93
데이터 세트의 Cylinders
에 대한 도수 분포표(freq.table.cyl
)를 구하는 예입니다.
# Cars93$Cylinders의 클래스를 확인합니다.
library(MASS)
class(Cars93$Cylinders) # factor 형입을 확인할 수 있습니다.
## [1] "factor"
# Cars93$Cylinders의 도수분포표를 구합니다.
<- table(Cars93$Cylinders)
freq.table.cyl freq.table.cyl
##
## 3 4 5 6 8 rotary
## 3 49 2 31 7 1
# 이렇게 구한 도수분포표의 상대 도수분포표를 구합니다.
<- prop.table(freq.table.cyl)
rel.freq.table.cyl rel.freq.table.cyl
##
## 3 4 5 6 8 rotary
## 0.03225806 0.52688172 0.02150538 0.33333333 0.07526882 0.01075269
이제 위의 예에서 구한 도수분포표를 시각화해 보겠습니다.
20.2.1 막대 그래프(bar plot)
막대 그래프는 앞의 도수 분포표를 시각화하는 방법 중의 하나입니다. x
축에 범주형 데이터의 수준을 표시하고, y
축에 그 빈도를 표시하는 그래프가 막대 그래프입니다.
막대 그래프는 barplot()
함수로 작성됩니다.
다음의 예는 Cars93
데이터 세트의 Cylinders
에 대한 도수 분포표(freq.table.cyl
)를 막대 그래프로 시각화하는 예입니다.
## 일변량 범주형 데이터의 시각화입니다.
# barplot() 함수를 이용하여 막대그래프를 작성합니다.
library(MASS)
# 먼저 Cars93$Cylinders의 도수분포표를 구합니다.
<- table(Cars93$Cylinders)
freq.table.cyl
# 도수분포표를 데이터 인수로 하여 막대 그래프를 작성합니다.
barplot(freq.table.cyl, main = " 막대 그래프 : barplot()")
? barplot()
을 이용하여 자세한 도움말을 참고하기 바랍니다.
20.2.2 클리블랜드 점 플롯(Cleveland dot plot )
이 시각화 방법은 Cleveland and McGill (1984) 이 “Graphical Methods for Data Presentation: Full Scale Breaks, Dot Charts, and Multibased Logging.” 이라는 논문을 통해, 막대 그래프에 비해 점 그래프가 데이터의 해석, 가독성 등에서 우수한 점을 소개하면서 Cleveland Dot Plot 이라고 명명이 된 그래프입니다.
클리블랜드 점 플롯은 dotchart()
함수로 작성됩니다.
다음의 예는 Cars93
데이터 세트의 Cylinders
에 대한 도수 분포표(freq.table.cyl
)를 클리블랜드 점 플롯으로 시각화하는 예입니다.
# dotchart() 함수를 이용하여 클리블랜드 점 플롯을 작성합니다
library(MASS)
# 먼저 Cars93$Cylinders의 도수분포표를 구합니다.
<- sort(table(Cars93$Cylinders)) # 빈도수로 sort 합니다.
freq.table.cyl
# Cars93$Cylinders의 수준이름을 추출합니다.
<- names(freq.table.cyl) # y축에 표시될 수준 데이터 레이블입니다.
Cylinders
# names for label
dotchart(as.numeric(freq.table.cyl), # 도수 분포표를 숫자형으로 변환합니다.
labels = Cylinders, # y축에 Cylinders 의 값을 표시합니다.
main = " 클리블랜드 점 플롯")
그런데, 클리블랜드 점 플롯은 막대 그래프와 달리 범주형 데이터의 수준을 y
축에 표시합니다. 그리고 빈도수는 x
축에 표시합니다.
? dotchart()
를 이용하여 자세한 도움말을 참고하기 바랍니다.
한편 위의 클리블랜드 점 플롯을 자동차 종류(Type
)별로 그룹화하여 시각화해 보겠습니다.
https://nittaku.tistory.com/367
20.2.3 파이 차트
파이 차트는 (상대) 도수 분포표(Relative frequency table)를 시각화하는 방법 중의 하나입니다. 범주형 데이터 x
에 대하여 각 수준별 발생 빈도(의 비율)에 비례하여 중심각을 나누어 마치 파이를 조작으로 나눈 것과 같은 형태로 시각화한 것입니다.
파이 차트는 pie()
함수로 작성됩니다.
다음의 예는 Cars93
데이터 세트의 Cylinders
에 대한 상대도수 분포표(rel.freq.table.cyl
)를 파이 차트로 시각화하는 예입니다.
# Cylinders 의 도수분포표와 상대도수분포표를 구합니다.
library(MASS)
# 도수 분포표를 구합니다.
<- table(Cars93$Cylinders)
freq.table.cyl freq.table.cyl
##
## 3 4 5 6 8 rotary
## 3 49 2 31 7 1
# 도수 분포표를 이용하여 상대 도수 분포표를 구합니다.
<- round(prop.table(freq.table.cyl) * 10000) / 100
rel.freq.table.cyl rel.freq.table.cyl
##
## 3 4 5 6 8 rotary
## 3.23 52.69 2.15 33.33 7.53 1.08
# Cylinders의 수준 이름을 추출합니다. 이를 파이 조작의 레이블로 사용합니다.
<- names(rel.freq.table.cyl)
Cylinders <- paste0(Cylinders, " : ", rel.freq.table.cyl, " %" )
label1
# 상대 도수 분포표를 파이 차트로 시각화합니다.
pie(rel.freq.table.cyl, labels = label1, main = "파이 차트 : 상대 도수", cex = 0.7)
? pie()
를 이용하여 자세한 도움말을 참고하기 바랍니다.