ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R] Bar Chart Race 재현 04
    Project/Bar Chart Race (with R) 2020. 7. 18. 13:10

    목차

     

    서론

     Bar Chart Race 재현 프로젝트의 마지막 단계로 지난 3번의 과정을 거쳐 데이터를 수집하고, 전처리 과정을 통해 데이터의 구조를 변경하는 작업을 진행하였다. 전처리 과정을 막대 그래프를 그리기 위한 과정이었으며, 이 과정에서는 melt()함수에 대한 이해가 필요했다. 데이터를 구조화 한 이후에 ggplot2를 이용하여 시각화를 한다.

     

     Bar Chart Race 재현의 마지막 과정으로 시각화 한 부분을 영상처리를 할 예정이다. 시각화 작업을 진행하기 위해서는 프레임 단위로 이미지가 생성이 되어야 가능하며, R에서는 gganimate를 활용하여 영상화를 진행 할 수 있다. 물론, 영상을 처리하는 과정에서 적절한 배경 음악이 있다면 함께 처리가 가능하며, 이를 위해 다른 프로젝트 과정인 AI기반 작곡 솔루션(AI MUSIC) 재현 시리즈를 참고 하면 좋을 것 같다.

     

    <그림 1> Bar Chart Race 재현 프로세스

    그래프에 생동감을 더하기

     기존에 그래프의 특징을 살펴보면 과거의 사진의 느낌이 강하다. 이 사진 속에는 다양한 정보가 담겨 있지만, 앞 뒤에 대한 정보가 없기 때문에 이 사진이 즐거운 상황인지 아니면 슬픈 상황이었는지 전혀 알 수 없다. 즉, 단편적인 상황에 대해 보여주는 느낌이 강하다면 이를 개선하기 위해서 흐름을 할 수 있도록 영상으로 제공하는 것이 데이터를 이해하는데 큰 도움을 준다.

    <그림 2> 애니메이션 처리 전 시각화 결과

     앞선, 그래프를 그리는 로직은 Bar Chart Race 재현 3에서 진행하였으며, 해당 내용을 p에 담아 두었고, 그 이후의 코딩을 공유한다. gganimate 라이브러리에서는 상태값의 변화에 따라 그래프가 바뀌도록 세팅할 수 있는데, 이때 사용하는 함수는 transition_states()이다. 이때, 부가 옵션에 따라 다양한 변화가 나타날 수 있는데, ease_aes() 함수는 상태값에 따라 그래프가 변화할 때 어떠한 효과를 줄지 설정하는 값이다. 하지만, 본 재현에서는 ease_aes()를 활용하지 않는다.

    result = p + 
      transition_states(year) +
      view_follow(fixed_y = TRUE)

     

    렌더링(Rendering)

     두산백과에 따르면 2차원이나 3차원 그래픽스 영상을 작성할 때 해당하는 단계로, 앞에서 생성한 시각화 모델을 영상으로 처리하는 과정을 의미한다. result에는 영상을 처리하기 위한 모델이 담겨 있으며, 이는 그대로 활용할 수 없다. 단, 바로 result를 실행할 경우 RStudio의 Plots 창에 자동으로 나타나는 것을 확인 할 수 있다.

     

     이 렌더링 과정을 수행하기 위해서 gganimate 라이브러리의 animate() 함수를 활용한다. 이 함수에는 앞에서 저장한 영상 처리 모델을 어떤 크기의 영상과 프레임속도, 총 프레임 수, 반복 재상 여부, 호출할 렌더링 함수 등을 설정할 수 있다.

    ###<gif rendering>
    for_gif = animate(result,
                      600,
                      fps = 24,
                      end_pause = 100,
                      width = 1280,
                      height = 720,
                      rewind = F,
                      renderer = gifski_renderer())
    
    anim_save(paste0("desktop/animation",format(Sys.time(), "%Y%m%d%H%M%S"),".gif"),
              animation = for_gif)
    
    ###<mp4 rendering>
    for_mp4 = animate(result,
                      2400,
                      fps = 24,
                      width = 1920,
                      height = 1080,
                      renderer = av_renderer())
    
    anim_save(paste0("desktop/animation",format(Sys.time(), "%Y%m%d%H%M%S"),".mp4"),
              animation = for_mp4) 
     

    Lesson Learned

     공공 데이터를 수집해서 시간의 흐름에 따라 어떠한 변화가 있는지 보기 위해 4단계로 분리하여 Bar Chart Race를 재현하였다. 첫번째 단계에서는 공공 데이터를 수집하는 과정에 대해서 설명하였고, 다음 단계에서는 수집한 데이터를 기반으로 자유롭게 처리하는 과정을 설명하였다. 세번째 단계에서는 수집한 데이터를 가공하면 ggplot2 라이브러리를 활용하여 막대 그래프를 그렸다. 그래프를 그리는 과정에서 다양한 형태로 구조를 변경해보았으며, <그림 2>와 같이 여러 그림이 누적해서 쌓인 모습의 그래프가 그려지는 것을 볼 수 있다. 마지막 단계에서는 겹친 그래프를 gganimat 라이브러리를 활용하여 영상으로 처리하는 과정을 소개하였다. 이는, 작년부터 유행했던 youtube 영상들 중에 Bar Chart Race라고 검색하면 다양한 영상들이 나타난다.

     

    그래프로 보는 일본 관광국 그래프로 보는 기대 수명 그래프로 보는 사망 원인

     초창기 Bar Chart Race는 결과 그 자체를 보여주는 영상들이 주를 이뤘다면, 최근에는 다양한 툴을 이용해서 작성하는 방법까지도 소개하고 있으며, 그의 일련의 과정으로 R을 이용한 Bar Chart Race를 재현하는 과정을 소개하였다. 본 재현에서는 막대 그래프에 한정하여 작업을 수행하였으나, 반드시 꼭 막대 그래프로만 보여줄 필요는 없다. 따라서 다른 형태의 시각화를 애니메이션으로 만들어서 배포할 필요가 있다.

     

    Reference

    1. Thomas Lin Pedersen, "gganimate", https://cran.r-project.org/web/packages/gganimate/gganimate.pdf
    2. 두산백과, "렌더링", https://terms.naver.com/entry.nhn?docId=1231713&cid=40942&categoryId=32828

     

     

     

     

    'Project > Bar Chart Race (with R)' 카테고리의 다른 글

    [R] Bar Chart Race 재현 03  (0) 2020.07.11
    [R] Bar Chart Race 재현 02  (0) 2020.07.05
    [R] Bar Chart Race 재현 01  (0) 2020.05.28

    댓글

Designed by Tistory.