사용데이터 : https://2stndard.tistory.com/68
벤다이어그램의 새로운 대안 - 업셋 그래프
중복이 허용되면서 변량이 많지 않은 데이터를 시각화하는 방법으로 많이 활용되는 것이 벤다이어그램이다. 하지만 원(변량)이 3개를 넘어가면 매우 혼란스러워진다. 이 벤다이어그램의 단점을 극복하기 위해 2014년에 제안된 시각화 방법이 업셋 그래프이다.1
업셋 그래프는 그래프의 아래쪽에 해당 데이터를 구성하는 세트의 조합이 표현되고 위쪽에는 해당 세트의 조합에 대한 데이터 값을 표현하는 막대 그래프가 표현된다. 이렇게 구성함으로써 단일 세트만 가능했던 막대 그래프에 변량의 세트에 대한 표현이 가능해져서 벤다이어그램에서 해석이 어려웠던 다양한 데이터의 조합에 대한 시각화에 매우 효과적이다.
업셋 그래프는 3개 이상 30개 미만의 집합 데이터에 가장 적합하다 . 4세트 미만의 경우 익숙한 벤 다이어그램이 친숙하다. 또 업셋 그래프는 집합 데이터의 분포를 분석하는 데 적합하기때문에 교차하는 집합의 조합의 빈도확인에 매우 효과적이다.2
그럼 이제 업셋 그래프를 만들어 보겠다. df_취업통계 데이터는 각 학과를 7개의 학제(전문대학(2년제), 전문대학(3년제), 대학교, 산업대학 등)로 구분되어 있다. 따라서 같은 학과명을 가지더라도 서로 학제가 달라 최대 7개의 행이 있을 수 있다. 그래서 동일한 학과명이 여러 학제에 걸쳐 존재하는 경우가 많은데 이 분포를 알아내기 위해 업셋 그래프를 만든다.
이 업셋 그래프를 만들기 위해 사용하는 데이터는 이 df_취업통계 데이터로 각각의 학과명이 속한 학제를 리스트로 만든 열이 필요하다. 이 열을 기준으로 빈도를 표현한 막대 그래프를 그릴 것이다. 이를 위해 다음과 같이 데이터를 전처리 한다.
## df_취업통계에서
<- df_취업률 |>
df_과정구분_upset ## 학과명으로 그룹화
group_by(학과명) |>
## 학제를 리스트로 만든 학과리스트 열을 생성(각각의 그룹의 행에 학과리스트 열은 모두 같은 값을 가지기 때문에 맨 아래에서 중복을 제거)
mutate(학제리스트 = list(unique(sort(학제)))) |>
## 필요한 열만 선택
select(3:6, 8, 학제리스트, 11) |>
## 중복을 제거
unique()
## df_과정구분_upset |> View() 로 데이터를 확인 가능
View(df_과정구분_upset) ## 'V'는 대문자임에 주의
전처리가 끝났으면 본격적으로 업셋 그래프를 만든다. 이를 위해 먼저 ggupset
패키지를 설치해야한다.
## ggupset 패키지 설치
if(!require(ggupset)) {
install.packages('ggupset')
library(ggupset)
}
업셋 그래프를 그리는 코드는 다음과 같다. 먼저 학과명의 조합 리스트로 구성된 학과명을 X축으로 매핑한 geom_bar 레이어를 생성한다. 이후 X축의 스케일를 업셋 스케일로 바꾸어주면 업셋의 기본 그래프가 생성된다. 축의 스케일을 업셋 스케일로 바꾸려면 scale_x_upset()
을 사용한다.
빈도수를 표현하는 geom_bar()
의 X축 스케일을 scale_x_upset()
으로 설정하여 업셋 그래프를 그리는 코드는 다음과 같다.
|> ggplot() +
df_과정구분_upset ## X축을 학제리스트로 매핑한 geom_bar 레이어 생성
geom_bar(aes(x=학제리스트)) +
## X축 스케일을 업셋 스케일로 설정
scale_x_upset()
기본 업셋 그래프
위의 그래프에서 가장 좌측에 막대가 가장 긴 데이터는 대학교에만 존재하는 학과의 수이다. 좌측에서 세 번째 있는 막대의 경우는 대학교와 일반대학원에 공통으로 있는 학과이다. 이렇게 동일한 학과가 여러개의 학제에 공통으로 있는 경우의 수를 조합하여 나타내는 그래프가 업셋 그래프이다.
7개의 학제에 대한 조합이 표현되다보니 조합의 수가 너무 많아 보인다. 이 중 빈도가 많은 10개의 조합만 표시하도록하는 코드는 다음과 같다.
ggplot(df_과정구분_upset, aes(x=학제리스트)) +
geom_bar() +
## n_intersection을 10으로 설정해서 X축 변량을 10개로 한정
scale_x_upset(n_intersections = 10)
기본 업셋 그래프
앞의 그래프를 보면 대학교에만 존재하는 학과가 가장 많고 다음은 일반대학원이다. 세번째로 많은 분포는 대학교와 일반대학원에 같이 존재하는 학과가 있다는 것을 알 수 있다. 맨 우측에 있는 막대의 경우에는 대학교, 일반대학원, 전문대학 3년제, 2년제, 산업대학 모두에 존재하는 학과의 수를 나타낸다.
앞의 업셋 그래프의 조합 매트릭스의 조합이 많은 순으로 정렬 순서를 바꾸면 다음과 같이 바꿀 수 있다.
|>
df_과정구분_upset ggplot() +
geom_bar(aes(x=학제리스트), fill = "dodgerblue") +
geom_text(aes(x=학제리스트, label = ..count..), stat = 'count', vjust = -1, size = 5, color = "darkblue") +
## order_by를 'degree'로 설정하여 매트릭스 조합을 정렬 기준으로 맞추고 내림차순으로 설정하기 위해 reverse를 설정
scale_x_upset(n_intersections = 10,
order_by="degree",
reverse = TRUE) +
ylab("학과수") + xlab("학제 조합")
조합순으로 정렬된 업셋 그래프
업셋 그래프에 사용되는 상위 그래프는 막대 그래프외에 모든 그래프를 사용할 수 있다. 다만 X축의 조합 매트릭스를 설정함으로써 데이터를 잘 설명할 수 있는지 고려하여 설정하는 것이 좋다. 다음은 앞의 빈도수의 막대 그래프를 취업률에 대한 바이올린 그래프로 바꾼 코드이다.
|>
df_과정구분_upset ggplot() +
## 상부 그래프의 레이어를 geom_violin 레이어로 생성
geom_violin(aes(x=학제리스트, y = 취업률_계), fill = "darkblue") +
scale_x_upset(n_intersections = 10, order_by="degree", reverse = TRUE) +
ylab("취업률") + xlab("학제 조합")
바이올린 업셋 그래프
Alexander Lex, Nils Gehlenborg, Hendrik Strobelt, Romain Vuillemot, Hanspeter Pfister
UpSet: Visualization of Intersecting Sets
IEEE Transactions on Visualization and Computer Graphics (InfoVis), 20(12): 1983–1992, doi:10.1109/TVCG.2014.2346248, 2014.↩︎
'ggplot2' 카테고리의 다른 글
ggplot2 테마 개체 설명(theme element reference) (0) | 2022.08.18 |
---|---|
데이터 밀집 구간 표현 - geom_rug(), ggMarginal() (0) | 2022.07.28 |
대학의 계열별 수도권 입학정원 시각화 in R - 막대 그래프 안에 막대 그래프 (3) | 2022.07.09 |
그래프에 수직선(geom_vline), 수평선(geom_hline), 대각선(geom_abline) 그리기 in R (0) | 2022.06.14 |
박스 플롯(Boxplot)에 평균값 표현하기 in R (0) | 2022.06.12 |
댓글