본 포스팅은 R for Data Science를 기반으로 하여 작성하였습니다.
1. 두 개의 범주형 변수
범주형 변수 간의 공분산을 시각화하려면 각 조합에 대한 관측값의 수를 계산해야 합니다. 그렇게 하는 한 가지 방법은 geom_count()를 활용하는 것입니다.
ggplot(data = diamonds) +
____geom_count(mapping = aes(x = cut, y = color))
그림에 있는 각 원의 크기는 각 값 조합에서 발생한 관측치의 수를 표시합니다. 공변량은 특정 x 값과 특정 y 값 사이의 강한 상관관계로 나타납니다.
또 다른 접근 방식은 dplyr로 개수를 계산하는 것입니다.
diamonds %>%
____count(color, cut)
그런 다음 geom_tile() 및 채우기 미학으로 시각화하는 것입니다.
diamonds %>%
____count(color, cut) %>%
____ggplot(mapping = aes(x = color, y = cut)) +
____geom_tile(mapping = aes(fill = n))
범주형 변수가 순서가 지정되지 않은 경우 흥미로운 패턴을 보다 명확하게 나타내기 위해 직렬화 패키지(seriation package)를 사용하여 행과 열을 동시에 재정렬할 수 있습니다. 더 큰 플롯의 경우 대화형 플롯을 생성하는 d3heatmap 또는 heatmaply 패키지를 사용해 볼 수 있습니다.
2. 두 개의 연속형 변수
두 개의 연속 변수 간의 공변량을 시각화하는 좋은 방법은 이미 앞에서 살펴 보았습니다. geom_point()를 사용하여 산점도를 그리는 것입니다. 점에서 패턴으로 공변을 볼 수 있습니다. 예를 들어 다이아몬드의 캐럿 크기와 가격 사이의 기하급수적인 관계를 볼 수 있습니다.
ggplot(data = diamonds) +
____geom_point(mapping = aes(x = carat, y = price))
산점도는 데이터 세트의 크기가 커질수록 유용하지 않게 됩니다. 포인트가 오버플로팅되기 시작하고 (위와 같이) 균일한 검은색 영역에 쌓이기 때문입니다. 이는 알파 미학을 사용하여 투명도를 추가하면 어느 정도 해결할 수 있습니다.
ggplot(data = diamonds) +
____geom_point(mapping = aes(x = carat, y = price), alpha = 1 / 100)
투명성을 사용하는 것도 매우 큰 데이터 세트에 대해서는 어려울 수 있습니다. 또 다른 해결책은 bin을 사용하는 것입니다. 이전에는 geom_histogram() 및 geom_freqpoly()를 사용하여 한 차원에서 비닝 했습니다. 이제 geom_bin2d() 및 geom_hex()를 사용하여 2차원으로 비닝 하는 방법을 배웁니다.
geom_bin2d() 및 geom_hex()는 좌표 평면을 2d bin으로 나눈 다음 채우기 색상을 사용하여 각 bin에 속하는 포인트 수를 표시합니다. geom_bin2d()는 직사각형 빈을 생성합니다. geom_hex()는 육각형 빈을 생성합니다. geom_hex()를 사용하려면 hexbin 패키지를 설치해야 합니다.
ggplot(data = smaller) +
____geom_bin2d(mapping = aes(x = carat, y = price))
install.packages("hexbin") # hexbin 패키지 설치
library(hexbin) # hexbin 패키지 로딩
ggplot(data = smaller) +
____geom_hex(mapping = aes(x = carat, y = price))
또 다른 옵션은 하나의 연속 변수를 비닝하여 범주형 변수처럼 작동하도록 하는 것입니다. 그런 다음 배운 범주형 변수와 연속형 변수의 조합을 시각화하는 기술 중 하나를 사용할 수 있습니다. 예를 들어, 캐럿을 비닝 다음에 각 그룹에 대해 상자 그림을 표시할 수 있습니다.
ggplot(data = smaller, mapping = aes(x = carat, y = price)) +
____geom_boxplot(mapping = aes(group = cut_width(carat, 0.1)))
cut_width(x, width)는 위에서 사용된 것처럼 x를 너비의 빈으로 나눕니다. 기본적으로 상자 그림은 관측값의 수에 관계없이 (이상치 수를 제외하고) 거의 동일하게 보이므로 각 상자 그림을 그리는 데에 얼마나 많은 수의 값들이 포함되었는지 알 수 없습니다. 이를 보여주는 한 가지 방법은 varwidth = TRUE를 사용해서 데이터 관측치의 수에 비례하는 상자 그림의 너비를 만드는 것입니다.
ggplot(data = smaller, mapping = aes(x = carat, y = price)) +
____geom_boxplot(mapping = aes(group = cut_width(carat, 0.1)), varwidth = TRUE)
또 다른 방법은 cut_number()를 활용해서 각 빈에 거의 동일한 수의 포인트를 표시하는 것입니다.
ggplot(data = smaller, mapping = aes(x = carat, y = price)) +
____geom_boxplot(mapping = aes(group = cut_number(carat, 20)))
'R 프로그래밍 > R을 활용한 탐색적 자료 분석' 카테고리의 다른 글
탐색적 자료 분석(최종) (0) | 2021.10.01 |
---|---|
탐색적 자료 분석(공변량1) (0) | 2021.09.29 |
탐색적 자료 분석(결측치 처리) (0) | 2021.09.28 |
탐색적 자료 분석(일반적 값 VS 비정상적인 값) (0) | 2021.09.27 |
탐색적 자료 분석(변수 분포 탐색) (0) | 2021.09.26 |
댓글