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의 도수분포표를 구합니다.
freq.table.cyl <- table(Cars93$Cylinders)
freq.table.cyl
## 
##      3      4      5      6      8 rotary 
##      3     49      2     31      7      1
# 이렇게 구한 도수분포표의 상대 도수분포표를 구합니다.
rel.freq.table.cyl <- prop.table(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의 도수분포표를 구합니다.
freq.table.cyl <- table(Cars93$Cylinders) 

# 도수분포표를 데이터 인수로 하여 막대 그래프를 작성합니다.
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의 도수분포표를 구합니다. 
freq.table.cyl <- sort(table(Cars93$Cylinders))   # 빈도수로 sort 합니다.

# Cars93$Cylinders의 수준이름을 추출합니다.
Cylinders <- names(freq.table.cyl)                # y축에 표시될 수준 데이터 레이블입니다.

# 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)

# 도수 분포표를 구합니다.
freq.table.cyl <- table(Cars93$Cylinders)
freq.table.cyl
## 
##      3      4      5      6      8 rotary 
##      3     49      2     31      7      1
# 도수 분포표를 이용하여 상대 도수 분포표를 구합니다.
rel.freq.table.cyl <- round(prop.table(freq.table.cyl) * 10000) / 100
rel.freq.table.cyl
## 
##      3      4      5      6      8 rotary 
##   3.23  52.69   2.15  33.33   7.53   1.08
# Cylinders의 수준 이름을 추출합니다. 이를 파이 조작의 레이블로 사용합니다.
Cylinders <- names(rel.freq.table.cyl)
label1 <- paste0(Cylinders, " : ", rel.freq.table.cyl, " %" )

# 상대 도수 분포표를 파이 차트로 시각화합니다. 
pie(rel.freq.table.cyl, labels = label1, main = "파이 차트 : 상대 도수", cex = 0.7)

? pie() 를 이용하여 자세한 도움말을 참고하기 바랍니다.