벤 다이어그램 in R
벤다이어그램은 아마도 중학교 시절 한번식은 그려본 차트일 것이다. 벤다이어그램은 데이터의 시각화와는 좀 다른 형태의 시각화로 시각화되는 요소들이 데이터의 양에 직접적인 관계가 없고 데이터의 성질에 관계가 있다.
R에서 벤다이어그램을 만들 수 있도록 제공되는 패키지는 ggVennDiagram
패키지이다. 이 패키지외에 VennDiagram
패키지도 있지만 VennDiagram
패키지에서는 한글을 지원하지 못한다는 결정적 단점이 있다. ggVennDiagram
패키지에서 제공하는 ggVennDiagram()
을 이용해서 벤다이어그램을 만들 수 있다.
벤다이어그램은 보통 3개의 원으로 표현되는 것이 효율적이다. 그 이상의 원으로 표현은 가능하겠지만 오히려 데이터의 특징을 전반적으로 확인하는데 방해되는 경우도 많다.
벤다이어그램을 그리기 위해서는 먼저 벤다이어그램에 사용할 데이터 벡터를 생성해야 한다. 여기서는 공학계열의 학과들을 과정구분별로 필터링해서 세개의 벡터를 생성하고 이에 대한 벤다이어그램을 그리도록 한다.
먼저 데이터를 불러들이고 전처리하겠다. 사용하는 데이터는 교육통계 서비스 홈페이지에서 제공하는 2020년 취업통계 학과별 데이터 셋 을 사용하겠다. 2020년 취업통계 학과별 데이터 셋을 불러 들이는 코드는 바로 이전 포스트를 참조하라.
library(readxl)
library(tidyverse)
library(patchwork)
df_취업통계 <- read_excel('2020년 학과별 고등교육기관 취업통계.xlsx',
## '학과별' 시트의 데이터를 불러오는데,
sheet = '학과별',
## 앞의 13행을 제외하고
skip = 13,
## 첫번째 행은 열 이름으로 설정
col_names = TRUE,
## 열의 타입을 설정, 처음 9개는 문자형으로 다음 79개는 수치형으로 설정
col_types = c(rep('text', 9), rep('numeric', 79)))
## df_취업통계에서 첫번째부터 9번째까지의 열과 '계'로 끝나는 열을 선택하여 다시 df_취업통계에 저장
df_취업통계 <- df_취업통계 |> select(1:9, ends_with('계'), '입대자')
이번 포스트에서 만들어 볼 벤다이어그램은 공학계열의 대학과정별 학과명에 대한 벤다이어그램이다. 전문대학과정, 대학과정, 대학원과정에 개설된 학과명들이 어떻게 분포하는지를 나타내는 벤다이어그램을 그린다.
먼저 각 과정에 따른 공학 계열 학과명의 벡터를 다음과 같이 생성한다.
## 전문대학과정의 공학계열 학과명을 벡터로 저장
vec_전문대학과명 <- df_취업통계 |>
filter(대계열 == '공학계열', 과정구분 == '전문대학과정') |>
select(학과명) |>
## 하나의 열만 선택하더라도 여전히 데이터프레임이기 때문에 pull()로 벡터화
pull()
## 대학과정의 공학계열 학과명을 벡터로 저장
vec_대학학과명 <- df_취업통계 |>
filter(대계열 == '공학계열', 과정구분 == '대학과정') |>
select(학과명) |>
pull()
## 대학원과정의 공학계열 학과명을 벡터로 저장
vec_대학원학과명 <- df_취업통계 |>
filter(대계열 == '공학계열', 과정구분 == '대학원과정') |>
select(학과명) |>
pull()
이렇게 생성된 세개의 벡터를 하나의 리스트로 묶어 이 리스트를 사용해 벤다이어그램을 그려준다.
library(ggVennDiagram)
## 벤다이어그램의 제목 설정과 데이터를 연결한 리스트 생성
list_venn_diagram <- list(전문대학 = vec_전문대학과명, 대학 = vec_대학학과명, 대학원 = vec_대학원학과명)
이제 ggVennDiagram
패키지의 ggVennDiagram()
의 매개변수로 앞에서 생성한 리스트를 전달하면 다음과 같은 벤다이어그램이 만들어진다.
if(!require(ggVennDiagram)) {
install.packages('ggVennDiagram')
library(ggVennDiagram)
}
## 벤다이어그램 생성
ggVennDiagram(list_venn_diagram, label_geom = "text", label_color = "white", label_size = rel(5), label_alpha = 1)
'ggplot2' 카테고리의 다른 글
비율(백분률)로 표현하는 히스토그램 in R (0) | 2022.04.22 |
---|---|
geom_histogram의 bins와 binwidth (0) | 2022.04.21 |
회귀방정식이 표기된 ggplot2 in R (0) | 2022.02.19 |
대학 과정의 계열별 취업률 비교 - 원형 막대 그래프(circlular bar graph) in R (0) | 2022.02.16 |
대학 입학생별 학과수 - 축 변환 in R (0) | 2021.12.04 |
댓글