9.1 통계적 그래프

데이터 세트의 변수들과 기하학적 개체의 심미적 특성들을 대응시킵니다.

다음의 예는 이러한 데이터 시각화를 단계별로 살펴 보도록 하겠습니다.

먼저 ggplot2 패키지를 담고 있는 tidyverse 패키지와 Cars93 데이터 세트를 담고 있는 MASS 패키지를 불러옵니다.

library(tidyverse)
library(MASS)

앞의 ggplot() 함수 템플릿의 필수적인 부분을 중심으로 살펴보겠습니다.

  1. ggplot(data = 데이터세트명) : 시각화할 데이터 세트를 지정합니다. 여기서 data = 부분은 생략이 가능합니다.
  2. aes(x = 변수1, y = 변수2 , ...) : 사용할 변수를 지정합니다.
  3. geom_FUNCTION() : 시각화 개체 함수입니다.

이 요소들은 + 기호로 연결해야 합니다.

Cars93 데이터 세트에 수록된 차량의 무게(Weight) 와 고속도로 연비(MPG.highway) 의 관계를 나타내는 산포도geom_point() 함수를 이용하여 그려 보겠습니다.

# 1. 플롯을 위한 데이터 세트 지정 : ggplot() 함수
ggplot(data = Cars93) +  
  
# 2. 심미적 요소 1 : 그래프의 X축에 표시될 변수를 지정 : aes() 함수
  aes(x = Weight) +

# 3. 심미적 요소 2 : 그래프의 Y축에 표시될 변수를 지정 : aes() 함수
  aes(y = MPG.highway) +  
  
# 4. 기하학적 모양을 지정 - 산포도 : geom_point() 함수
  geom_point()
geom_point() 함수를 이용한 산포도

Figure 9.2: geom_point() 함수를 이용한 산포도

위의 예를 하나씩 살펴보기로 하겠습니다.

9.1.1 데이터 세트 선언 : ggplot() 함수 이용

시각화에 사용할 데이터 세트를 먼저 선언해 주어야 하는데, 다음은 기본적인 형식입니다.

`ggplot(data = 데이터세트명)`

데이터는 ’그래픽 문법’과 tidyverse 프레임워크의 “첫번째 요소”입니다. 따라서 플롯을 그리기 위한 첫 번째 단계는 데이터를 선언하는 것입니다.

ggplot(data = Cars93)
시각화를 위한 데이터 선언

Figure 9.3: 시각화를 위한 데이터 선언

그런데 이 단계에서는 데이터 시각화를 위한 그래프 영역이 마련되는 단계일 뿐 그래프가 시각적으로 표현되지는 않습니다.

ggplot() 함수로 데이터를 보내는 또 다른 방법은 다음과 같습니다.

데이터를 먼저 선언한 다음 tidyverse 패키지에서 제공하는 파이프 연산자 (%>%)를 이용하여 ggplot() 함수로 데이터를 보내는 방법입니다.

# 데이터를 선언하는 다른 방법 : %>% 연산자 이용
Cars93 %>%            # 파이트 연산자 생성 : Ctrl+Shift+M
    ggplot()
ggplot을 위한 데이터 선언 : 파이프 연산자 사용

Figure 9.4: ggplot을 위한 데이터 선언 : 파이프 연산자 사용

이 방법은 우리가 시각화에 사용할 데이터를 살펴볼 수 있게 해 줍니다.

9.1.2 심미적 매핑 : aes() 함수

데이터를 실제 시각화하기 위한 심미적 요소들은 aes() 함수로 정의됩니다.

  • 심미적 요소 : 위치, 색상 및 크기와 같은 심미적 요소들은 데이터 시각화에서 많은 작업을 수행하는 변수들의 지정으로 시작됩니다.

  • 값의 분포 : (숫자 또는 범주 표에서 “원시” 형태로 소화하기 어려울 수 있는) 위치, 색상, 크기 등으로 표현할 때 쉽게 전달됩니다.

  • ’심미적 매핑’에서 ’매핑’이라는 용어는 변수가 심미적 요소에 ’매핑’된다는 사실을 나타냅니다. 즉, 심미적 요소로 표현됩니다.

시각화에 사용될 수 있는 요소들은 다음의 그림 9.5 같습니다.

ggplot의 시각화 요소들

Figure 9.5: ggplot의 시각화 요소들

(출처 : Wilke’s Fundamentals of Data Visualization.)

앞에서 논의한 바와 같이 aes() 함수는 “심미적 매핑”을 표현해 줍니다.

aes() 함수 안에 있는 모수는 먼저 “심미적 (색상, x 위치, 모양 등)으로 표현해야 하는 변수가 무엇인가?”라는 질문을 제기하고, aes() 함수는 특정 심미적 요소가 우리에게 표현해야 할 내용을 지정하도록 정중하게 “요구”합니다.

예를 들어, aes(color = Type)는 영어로 번역될 수 있습니다. “색상 요소야, 나를 위해 자동차의 유형변수인 Type별로 색을 달리 표현해 다오.”라는 의미입니다.

또한 데이터로 소통할 수 있게 해 주는 것도 심미적 요소입니다. 우리가 궁금해 하는 변수 내의 분포를 빨리 알려 주기는 것도 심미적 매핑에 의한 것입니다.

따라서 aes() 함수를 보면 “질문”해야 하는 것을 생각하는데 도움이 될 수 있습니다.

ggplot() 함수를 이용하는 데이터 세트로 부터 하나의 변수를 나타내기 위해 심미적 요소에 어떻게 요구하는지 살펴보겠습니다.

먼저, x의 위치(수평 축)y의 위치(수직 축)를 살펴 보겠습니다.

Cars93 %>%         
    ggplot() +  
# X축 : Weight 변수
  aes(x = Weight) +  

# y축 : MPG.highway 변수
  aes(y = MPG.highway)
ggplot을 위한 심미적 요소 : X축과 Y축

Figure 9.6: ggplot을 위한 심미적 요소 : X축과 Y축

이제 시각화할 X축과 Y축이 설정되었으며, 그래프 영역에 X축과 Y축이 표시됨을 알 수 있습니다.

9.1.3 시각화 개체 : geom_funtion()

aes() 함수는 x 위치로 표시되는 Weight 변수와 y 위치로 표시되는 변수 MPG.highway를 원한다고 말합니다. x 축과 y 축에 표시되는 숫자(척도)들은 이 정보가 등록되었다는 단서를 제공합니다.

그러나 아직 데이터에 대한 통찰력을 얻을 수없습니다. 왜냐하면 기하학적 개체가 심미적으로 표현되어야 하기 때문입니다. 따라서 우리는 데이터가 어떤 기하학적 모양으로 표현되어야 할 것인지를 선언해야 합니다.

기하학적 객체로 “점”을 추가하기 위해 geom_point() 함수를 사용해보겠습니다. 그러면 Cars93 데이터 세트의 각 행에 대한 x와 y 위치에 해당 데이터가 으로 표시됩니다.

Cars93 %>%         
    ggplot() +  

# X축 : Weight 변수
  aes(x = Weight) +  

# y축 : MPG.highway 변수
  aes(y = MPG.highway) +

# 데이터 각 행의 X와 Y 위치에 점을 표시 : geom_point() 함수
  geom_point()
ggplot 시각화 객체 : geom_point() 함수

Figure 9.7: ggplot 시각화 객체 : geom_point() 함수

이제 그래프 영역X축과 Y축에 데이터들이 으로 시각화되어 표시가 됩니다. 이렇게 하여 기본적인 데이터의 시각화가 이루어 졌습니다.