[디블로터] ③‘ggplot2’로 데이터 시각화하기

가 +
가 -

디블로터 3주차 스터디에선 ‘지지플롯2’(ggplot2) 패키지를 이용해 시각화하는 방법을 공부했습니다. 데이터 정제 과정을 충분히 공부해서 시각화로 넘어간 것은 아닙니다. 일단 유용한 패키지들을 빠르게 공부하고, 실제로 데이터를 다루면서 배우기 위해 시각화 패키지를 공부했습니다.

dbloter1

지지플롯2 치트시트

얼마 배우지 않았지만, 배울수록 R의 패키지들은 사용법 자체가 어렵진 않은 것 같습니다. 함수의 기능을 이해하기도 쉽고요. 다만 패키지도 많고, 패키지 안에서도 굉장히 다양한 기능이 있습니다. 한 번에 모든 걸 알고 넘어가기보다는 개략적으로 공부하고 실습을 통해 익히는 게 나을 거란 생각이 들었습니다. 이번 주에도 이민호 님의 깃허브 ‘DATA AND VISUALIZATION‘과 R의 공식 치트시트를 참고했습니다.

install.pakages(‘ggplot2’)

library(‘ggplot2’)

R에서도 ‘plot()’ 등 기본적인 그래프를 지원합니다. 자료 특성을 확인하고 맞춰서 제공하기도 합니다. 간편하게 그릴 수 있지만 대충 어떤 형태인지 알아보기에 적합한 수준입니다. 제대로 분석을 하기 위해서는 지지플롯이라는, 그래프에 특화된 패키지를 이용할 필요가 있습니다. 지지플롯은 다양한 형태의 그래프를 지원합니다. 아래 치트시트를 보면 어떤 상황에서 어떤 그래프를 활용할 수 있는지 확인할 수 있습니다. 사용할 변수가 하나일 때와 둘, 셋일 때 사용하면 좋은 그래프를 구분해서 표시해 뒀습니다.

ggplot2_structure2

출처 : 이민호 님 깃 허브

지지플롯2의 그래프의 기본은 ‘레이어’입니다. 레이어는 5가지의 요소로 구성돼 있습니다.

  1. data
  2. mapping : 데이터의 요소와 그래프의 요소를 대응시키는 과정입니다. x축, y축 등을 정할 수 있습니다
  3. Geometric Object : 어떤 그래프를 그릴지 지정합니다. 지지플롯2에서는 이것을 줄여서 ‘geom’이라고 합니다.
  4. Position : 각 그래프에서 각 도형이 어떤 식으로 배치될지 결정합니다.
  5. Statistical Transformation : 값이 어떻게 그래프에 반영되는지 결정하는 옵션입니다 줄여서 ‘stat’으로 씁니다.

지지플롯2는 ‘하나 이상’의 레이어가 구성되면 그래프를 출력합니다. ‘하나 이상’이라는 말은 여러개의 레이어를 중첩할 수도 있다는 의미입니다. 레이어 이외에 그래프를 구성하는 요소는 데이터의 값이 그래프의 시각적 요소에 적용되는 과정을 조절하는 Scale, 좌표를 결정하는 시각적 요소가 어떻게 연결되는지 결정하는 Coordinate System, 데이터를 여러 개의 그래프로 표시할 수 있게 하는 Facet, 그래프의 시각적 속성이 어떻게 데이터와 연관되는지 안내하는 Guide가 있습니다. R에서 기본제공하는 iris 데이터로 그래프를 그려보면 다음과 같습니다.

 ggplot()+

layer(data = iris

mapping = aes(x = Sepal.Length, y = Sepal.Width, color = Species),

geom =’point’,

stat = ‘identity’,

position = ‘identity’)

dbloter2

하지만 구체적으로 각 요소를 조절할 게 아니라면 이런 식으로는 잘 사용하지 않습니다. 실제로 사용할 때는 자주 사용하는 요소를 묶어서 미리 만든 함수들을 활용합니다. 예컨대 위의 코드는 다음과 같이 바꿀 수 있습니다. 레이어는 ‘+’를 사용해 덧붙입니다.

ggplot()+

geom_point(data = iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species))

아까 지지플롯2는 레이어를 중첩할 수 있다고 말씀드린 바 있는데요. 미리 공통적인 요소를 ggplot() 안에 설정하고 레이어를 더하는 식으로 사용할 수 있습니다. 다음과 같습니다.

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species))+

geom_point()+

geom_smooth()

이번 주 실습은 황유덕 씨가 참여하고 있는 프로젝트인 ‘히스토리사인’의 자료를 이용해 진행했습니다. ‘히스토리사인’은 클릭 한 번으로 역사 교과서 국정화 반대 서명을 할 수 있는 웹사이트입니다. 히스토리사인의 데이터를 분석해 언제 서명한 사람이 늘어났는지 알아보고, 좀 더 참여를 끌어낼 수 있는 방법을 고민하기 위해서였습니다. 개인정보는 전혀 포함돼 있지 않고, 단순히 서명에 참여한 인원이 얼마나 늘었는지만 시간별로 측정한 자료입니다.

dbloter3

데이터 정제가 가장 큰 말썽이었는데요. 받아온 자료의 시간이 표기가 ‘2015-10-31 오후 8:25:22’ 형태라 오전·오후 구분을 없애고 24시간대로 변환하는 과정이 필요했습니다. 어떻게 변환해야 하나 고민했는데, 구글 스프레드시트로 간단히 처리할 수 있었습니다. 괜히 하나의 도구만 사용하려고 끙끙대지말고 기존의 도구를 이용하는 게 효율적일 수 있다는 것을 깨달았습니다. 지지플롯2의 산점도를 이용하고, facet을 통해 대학별로 나눠서 추세를 전반적인 흐름을 확인할 수 있었습니다.