본문 바로가기
R 프로그래밍/R을 활용한 탐색적 자료 분석

탐색적 자료 분석(공변량2)

by 찐남 2021. 9. 30.
본 포스팅은 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)))

 

 



반응형

댓글