데이터 과학자가 바라본 20대 총선

여론조사 지지율 흐름 (Sankey diagram)

생키 도해

생키 도해(Sankey diagram)는 흐름도(flow diagram)의 일종으로 처음에 증기엔진의 에너지 효율성을 도식화하는데 사용되었고, 화살표의 너비로 흐름의 양을 비율적으로 보여준다. 이를 처음 발명한 Matthew Henry Phineas Riall Sankey를 따라 생키 도해(Sankey Diagram)로 부른다. 가장 유명한 사례로 나폴레옹의 러시아 공격을 도식화한 Charles Joseph Minard 생키도해가 있다.

생키 도해 사례 - 미나드

여론조사 지지율 흐름

구글 드라이브에 구글 스프레드쉬트에 데이터를 생성한다. 엑셀같은 설치형 소프트웨어가 갖는 한계를 클라우드 환경에서 데이터 작업을 할 경우 여러가지로 장점을 갖는다. 일단 데이터를 다음과 같은 형태로 작성하여 유권자를 투표참여층과 미투표층으로 나누고, 투표참여층과 투표미참여층에 대한 정당 지지도를 생키 도해를 통해 시각화한다.

origin to polls
유권자 투표참여 75.2%
유권자 미투표 23.9%
투표참여 새누리 76.1%
투표참여 더민주 77.9%
투표참여 국민의당 72.0%
투표참여 지지정당없음 74.7%
미투표 새누리 23.3%
미투표 더민주 21.4%
미투표 국민의당 23.9%
미투표 지지정당없음 25.3%

1. 데이터 가져오기 및 준비

최근에 발표된 googlesheets 팩키지를 설치하고 인증과정을 거치면 마치 로컬 컴퓨터에 스프레드쉬트 파일이 있는 것처럼 가져다가 바로 사용할 수 있다.

gs_ls()를 호출하면 구글 인증과정을 거치고 나서, 구글 스프레드쉬트 파일을 가져오고, 여기에 포함된 워크쉬트를 데이터프레임으로 불러오는 개념을 이해하면 쉽다.

#================================================================
# 1. 데이터 가져오기
#================================================================
library(googlesheets)
glist <- gs_ls()
Auto-refreshing stale OAuth token.
# glist %>% glimpse()

t.dat <- gs_title("sankeyplot-data")
Sheet successfully identified: "sankeyplot-data"
v.dat <- gs_read(t.dat, ws='sample')
Accessing worksheet titled 'sample'.
No encoding supplied: defaulting to UTF-8.

2. 생키 도해 시각화

googleVis에 포함된 생키 도해 함수 gvisSankey를 사용하여 시각화한다.

library(googleVis)

plot(
  gvisSankey(v.dat, from="origin", 
             to="to", weight="polls",
             options=list(
               height=250,
               sankey="{link:{color:{fill:'lightblue'}},
               node:{
               color:{fill:'#a61d4c'},
               label: { fontName: 'nanum',
               fontSize: 9,
               color: '#871b47',
               bold: true,
               italic: true }
               },
               
               }"
             ))
)