안녕하세요! 이번 포스팅에서는 산점도행렬에 대해 다루어 보려고 합니다.
많은 데이터 사이언티스트들이 본격적인 데이터 분석에 앞서 EDA를 하고 있습니다. EDA에서는 스키마 점검, 이상치 제거, 변동과 공변동 인사이트 도출을 포함해서 데이터를 이해하기 위해서 여러가지 도구들을 사용합니다.
이때, 시각화 역시 EDA에서 빠질 수 없는데요! 일반적으로 분석 할 데이터에는 많은 변수들이 포함되어 있고, 이를 한번에 표현하면 한 눈에 대략적인 관계를 파악할 수 있을 정도로 효과적이라서 많이 사용합니다.
처음으로 산점도행렬을 표현하기 위해서 데이터셋이 필요한데요. 저는 mtcars 데이터 셋을 사용해서 코드를 작성하였습니다.
mtcars
- 11개의 변수와 32개의 데이터가 있는 mtcars 데이터셋입니다.
간단하게 mtcars 데이터를 살펴보면 전부 수치형 데이터인 것을 확인할 수 있는데요! 모든 변수가 연속형 변수라고 생각할 수 있지만 일부 변수는 수준이 숫자인(또는 숫자로 코딩된) 팩터형 변수일수도 있습니다. 따라서 산점도에 적합하지 않은 범주형 변수가 무엇인지 확인하겠습니다.
purrr::map_dbl(mtcars, n_distinct)
- cyl 변수는 3개의 유일한 값을 가지며, vs, am, gear, carb역시 적은 수의 유일값을 가집니다.
- 따라서, 산점도 및 상관계수에 적합하지 않은 해당 변수들은 제거해줍시다.
유일값의 개수가 적은 변수를 제외하기 위해 유일값의 개수가 num보다 작으면 TRUE를 반환하고 그렇지않으면 FALSE를 반환하는 factor_n 함수를 정의했습니다.
또한, 이 함수를 discard의 조건함수로 적용하여 10개 이하인 열들을 제외하였습니다.
(discard는 조건에 맞지않은 열들만 남기는 함수입니다.. https://moogie.tistory.com/62에서 확인 가능합니다.)
factor_n <- function(x, num=10) ifelse(n_distinct(x)<=num, T, F)
mtcars_numeric <- mtcars %>% discard(factor_n)
- 5개의 열이 유일값의 개수가 10개이하로 mtcars_numeric에서는 제외된 것을 볼 수 있습니다.
이제 수치형 변수들만 남았으므로 산점도행렬을 그려보려고 합니다. base에서는 pairs를 활용해서 그릴 수 있고, 외부라이브러리 GGally에서 ggpairs를 활용해서도 시각화할 수 있습니다. pairs( ) 함수부터 확인해봅시다.
pairs(mtcars_numeric)
pairs(mtcars_numeric, lower.panel = panel.smooth)
- 모든 변수 쌍의 산점도를 기본적으로 그립니다.
- panel.smooth를 사용하여 산점도에 평활곡선을 추가할 수 있습니다.
산점도는 위아래로 두번 나와서 좌측 하단에는 산점도 + 평활곡선, 우측 상단 패널에는 상관계수를 표현해봅시다.
panel.cor <- function(x, y, digits = 2, size=3){
par(usr = c(0, 1, 0, 1))
r <- abs(cor(x, y))
txt <- format(c(r, 0.123456789), digits = digits)[1]
text(0.5, 0.5, txt, cex = size)}
pairs(mtcars_numeric, lower.panel = panel.smooth, upper.panel = panel.cor)
마지막으로 GGally 패키지의 ggpairs를 활용해서 산점도행렬을 표현하겠습니다.
GGally::ggpairs(mtcars_numeric)
또한, ggpairs는 ggplot2 처럼 심미성 매핑을 통해 그룹별 적용이 가능하며, columns 파라미터를 사용해 원하는 열만 선택할 수 있습니다.
bind_cols(mtcars_numeric, cyl=factor(mtcars$cyl)) %>%
GGally::ggpairs(mapping=aes(color=cyl),
columns = c("mpg", "disp", "hp", "drat", "wt", "qsec"))
bind_cols(mtcars_numeric, cyl=factor(mtcars$cyl)) %>%
GGally::ggpairs(mapping=aes(color=cyl),
columns = c("mpg", "disp", "hp", "drat", "wt", "qsec"),
lower = list(continuous = GGally::ggally_smooth))
'Data Science > Visualization' 카테고리의 다른 글
ggplot2에서 geom_rect의 투명도(alpha)가 적용되지 않는 이유와 해결법 (0) | 2025.03.20 |
---|---|
[Visualization with R] 1. Bar Chart (막대 그래프) (0) | 2023.09.07 |
[R] ggplot2 Visualization (0) | 2023.03.29 |