ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R 기초] 데이터 시각화 기초 - Base R package vs. ggplot2
    Data Science/Data Science in R 2018. 10. 23. 14:16

    목표 : 베이스 R 그래픽과 ggplot2 package를 비교해보자


    베이스 R 그래픽이란? R에서 기본적으로 제공되는 그래픽 패키지로써 고차원의 산점도, 히스토그램 함수 뿐만 아니라 저차원으로 플롯의 점, 선, 제목, 축라벨, 범례 틱 위치 등을 조절할 수 있다. 많이 사용되는 함수들은 다음과 같다.


    plot(x,y) : 산점도

    hist(x) : 히스토그램

    mosaicplot() : 모자익 플롯

    points(x,y) : 저차원 점 그리는 함수

    line(x,y) : 저차원 선 그리는 함수


    먼저, 베이스 R 그래픽과 gapminder data를 용한 데이터 시각화 예제를 살펴보자.

    (gapminder data 분석에 대한 자료 링크 : https://kuklife.tistory.com/43?category=797850)


    > library(gapminder)

    > par(mfrow=c(1,2))         

    > boxplot(gapminder$lifeExp)   # 상자그림

    > plot(log(gapminder$gdpPercap),gapminder$lifeExp,cex=0.5) # 두 변수 사이의 산점도

    > lines(log(gapminder$gdpPercap),-9.1+log(gapminder$gdpPercap)*8.4,col="red",lwd=2) # 선형회귀직선을 겹쳐그림

    왼쪽의 시각화는 boxplot을 통해 평균 수명의 정도를 표시한 것이고, 오른쪽 시각화는 국가 평균 gdp와 평균 수명을 통해 산점도를 그려 선형 회귀 직선을 그린 것이다.('시각화가 이런 형태로 나오는 것이구나' 정도만 파악 할 것, 이에 대한 자세한 내용은 타 자료에서 세부적으로 분석할 예정)


    위에 그래프를 보다시피, 베이스 R 패키지의 경우 그래픽적으로 좋아보이지 않은 결과를 얻는다. 따라서, 현대 데이터 시각화의 실질적 표준인 ggplot2에 익숙해질 필요가 있으며 장점들을 알아보자.


    ggplot2 package란? R의 시각화 라이브러리로써, 'grammar of graphics'의 두 g를 따 ggplot라 한다. ggplot2는 다음 면에서 우수한 모습을 보인다.


    ㆍ많은 커스텀화 없이도 보기 좋은 그래프를 얻을 수 있다.
    ㆍ다양한 플롯 타입(히스토그램, 산점도, 박스플롯 등)을 하나의 통일된 개념으로 처리한다.
    ㆍ다변량 데이터 플롯에 특히 효율적이다.(특히 facet_* 함수가 효율적이다.)

    먼저, 간단하게 데이터를 생성하여 시각화해보자.

    1. 데이터 생성

    > df <- data.frame(gp = factor(rep(letters[1:3], each = 10)),y = rnorm(30))

    > glimpse(df)

    Observations: 30
    Variables: 2
    $ gp <fct> a, a, a, a, a, a, a, a, a, a, b, b, b, b, b, b, b, b, b, b, c, c, c, c, c, c, c, c, c, c
    $ y  <dbl> -1.165610071, 0.439909378, 0.615318715, -0.022660461, 0.391199013, -0.424382964, 1.145475...

    2. 데이터 요약 통계량

    > ds <- df %>% group_by(gp) %>% summarize(mean = mean(y), sd = sd(y)) # 각 그룹별 요약통계량(mean = 평균, sd = 표준 편차)

    > ds

    # A tibble: 3 x 3
      gp      mean    sd
      <fct>  <dbl> <dbl>
    1 a     -0.119 1.01 
    2 b     -0.212 1.32 
    3 c     -0.210 0.848

    3-1. 데이터 시각화1

    > ggplot(df, aes(x = gp, y = y)) + # 사용 데이터 세트 및 매핑 지정
    +   geom_point()  +               # 위에서 정의된 것에 대한 산점도 생성
    +   geom_point(data = ds, aes(y = mean), colour = 'red', size = 3)  # 다른 데이터 세트에 대한 산점도 생성 

    ggplot()과 처음 레이터 geom_point()는 공통된 데이터(df)와 매핑(gp, y)를 사용한다. geom_point()는 이처럼 data=와 aes = 가 없으면 ggplot()에서 정의된 것들을 사용한다.
    이에 반해, 두 번째 레이어 geom_point()는 새로운 데이터(ds)와 mean변수를 정의해서 사용하고 더 크고 다른 색깔의 점을 그려준다.

    * aes : Aesthetic의 약자. 데이터의 변수를 시각화 요소들에 어떻게 연결할 것인지를 묘사해 줌.

    3-2. 데이터 시각화2(위와 같은 결과 & 다른 방식)


    > ggplot(df) +                            # 사용 데이터 세트 지정

      geom_point(aes(x = gp, y = y))  +      # 위에서 정의된 데이터에 대한 매핑 및 산점도 생성

      geom_point(data = ds, aes(x = gp, y = mean), colour = 'red', size = 3)  # 다른 데이터 세트에 대한 산점도 생성


    '데이터 시각화1' 과의 차이점 : 매핑을 어떤 레이어에서 지정하는지의 차이만 존재


    3-3. 데이터 시각화3


    > ggplot() +      # 골격

      geom_point(data = df, aes(x = gp, y = y)) +     

      geom_point(data = ds, aes(x = gp, y = mean),

                 colour = 'red', size = 3) +

      geom_errorbar(data = ds, aes(x = gp,

                                   ymin = mean - sd, ymax = mean + sd),

                    colour = 'red', width = 0.4)


    ggplot()은 단순히 ggplot2 객체의 골격만 제공하고, 이후 각 레이어가 자체적으로 data=와 aes= 맵핌을 정의한다.

    또한, 앞의 '데이터 시각화1~2'에 추가적으로 에러막대를 그려준다.


    * 참고문헌 : 실리콘밸리 데이터 과학자가 알려주는 따라하며 배우는 데이터 과학(저자 : 권재명)

    댓글

by KUKLIFE