데이터 인사이트

데이터 전문가 칼럼
데이터 전문가가 전하는 데이터 노하우

[빅데이터 분석] 파이썬으로 시계열 데이터의 시각화하기

작성자
관리자
작성일
2020-10-26 10:52
조회
4963

정광윤의 개발자를 위한 파이썬 데이터 분석(5회)

파이썬으로 시계열 데이터의 시각화하기

?
지금까지의 4회에 걸쳐 파이썬으로 데이터 분석을 최대한 쉽게 접근하려고 했다. 이번 연재에서는 간단한 예제를 통해 시계열(Time Series) 데이터를 그래프로 표현하는 방법을 소개하겠다. 다만 이번 연재에서도 그 이전과는 좀 더 색다른 방법으로 HTML 문서로 표현하는 방법까지 다뤄보겠다.
데이터 분석 툴로 가장 많이 사용하는 것은 IPython notebook이지만 이는 설치돼 있지 않으면 사용할 수 없는 불편함이 있다. 많은 사용자들이 쉽게 접근할 수 있기 위해서 웹 페이지(HTML)로 표현할 수 있는 방법까지 소개하겠다. 분명 더 친근하고 재미있게 다가올 수 있을 것이다.

이번 연재의 학습 목표는 아래와 같다.

● pandas로 데이터 다듬기
● bokeh로 시계열 그래프 그리기
● html 문서로 표현하기
?

? 설치

먼저 필요한 도구들을 설치해보자. 다음 도구만 있으면 가능하다. 이런 패키지를 설치할 때는 항상 가상환경에서 설치하는 습관을 들이도록 하자. 파이썬에서는 virtualenv나 pyenv 등의 도구로 쉽게 가상환경을 관리할 수 있다.

pip install pandas bokeh

- pandas를 설치하여 DataFrame 구조를 만들 것이다. 엑셀처럼 쉽고 간단하게 데이터를 관리할 수 있게 된다.
- pandas를 이용하여 데이터를 DataFrame 객체로 가져온 이후 이를 그래프로 표현할 때 Bokeh라는 것을 사용할 것이다. 이를 이용하여 html로도 만들 수 있다.

?

? 데이터

미국 LA시가 무료로 제공하는 데이터를 이용해보고자 한다. 일반적으로 데이터 분석을 공부할 때 많이 접할 수 있는 외국 서적에서는 이렇게 공공 데이터를 이용하는 사례를 심심치 않게 접할 수 있다. 오늘은 LA라는 미국의 낯선 도시의 공공 데이터를 이용해보겠지만, 서울시에서도 이미 많은 공공 데이터를 json 형식 등으로 공개하고 있으니 이를 이용해 연습해보는 것도 아주 좋을 것이다.

https://data.lacity.org/A-Safe-City/LAPD-Calls-for-Service-YTD-2014/mgue-vbsx

위의 사이트로 접속해보면 LA에서 일어난 경찰 신고 데이터가 담겨 있다. 마치 엑셀처럼 생겼기 때문에 위 사이트에 접속하는 것만으로도 데이터 분석을 할 수 있으나, 여기서는 파이썬으로 해보자. 이 데이터를 Export 메뉴를 통해 파일로도 가져올 수 있으나, JSON 형식의 데이터를 URL을 통해서 바로 가져오겠다. 아래 URL을 입력해 보자.

https://data.lacity.org/resource/mgue-vbsx.json?group=date&call_type_code=507P&select=date_trunc_ymd(dispatch_date)%20AS%20date%2C%20count(*)&$order=date

위 링크를 클릭하면 JSON 형식의 데이터가 출력된다. ‘?’ 전까지, 즉 https://data.lacity.org/resource/mgue-vbsx.json까지만 입력하면 모든 데이터를 가져오도록 되어 있고, 필터링해 가져오고 싶은 경우 해당 key값을 이용해 데이터를 필터링할 수 있다. 지금은 전화 신고 타입이 507P인 경우(파티의 시끄러운 소리로 인한 신고)만을 가져오겠다.



?

먼저 위와 같이 입력해보자. Raw data를 만드는 작업이다. 위에서 살펴봤던 JSON 데이터 형식을 읽어오는 작업(pd.read_json(query))이다. 이상하게 생긴 JSON 형태였으나 pandas의 read_json 함수를 이용해 데이터를 가져오면 DataFrame 객체로 바뀐다. 그래서 눈 앞에 엑셀처럼 깔끔하게 생긴 모양으로 나오게 된다.

이번에는 Raw Data를 조금 다듬어 보도록 하겠다. 첫 번째로는 컬럼을 삽입해보자. 즉 요일(day_of_week)과 주(week) 표시를 넣는 작업을 해보자.



다음으로 위 데이터의 주차별 데이터를 요일별로 개수를 세보겠다. 조금 어렵겠지만 우리에겐 pandas라는 훌륭한 도구가 있다. 여기에서 pivot을 사용하겠다.



이렇게 하니 이제 어느 정보 모양을 갖추게 되었다. 즉 날짜와 좀 더 정돈하고 건수에 따라 색깔을 다르게 표현해보겠다.



이제는 이 데이터를 기본으로 그래프(plotting)로 그려보는 작업을 해보자. 그리고 중요한 것은 이렇게 만들어진 것을 Bokeh 패키지로 html 문서를 만들 수 있다는 것이고, show 함수를 통해 바로 웹 브라우저에 나타낼 수 있다, 정말 간단하게.



이제 아래와 같은 그래프를 볼 수 있을 것이다.


[그림] LA의 파티의 소음으로 인한 신고 건수 현황


여기에서 우리는 Bokeh에 있는 hover라는 기능을 이용했다. 위 그래프는 단순히 정적인 그래프가 아니고 마우스를 그패프 위에 오버하게 되면 해당 데이터가 풍선말처럼 보이게 된다. 즉 Interactive Graph인 것이다. 이것을 가능하게 해주는 것이 바로 Bokeh의 HoverTool이라는 것이다. 우리도 위에서 type=HoverTool을 통해서 Hover를 사용하고 있다. 마우스 오버했을 경우 나오는 기능을 HoverTool에서는 tooltip이라고 한다.

?

? 마무리

시계열 데이터를 이용해 간단하게 그래프를 그려보았다. 중요한 것은 JSON 데이터라 할지라도 pandas의 read_json 함수를 이용하면, DataFrame 객체로 바뀐다는 점이다. 그리고 이 객체를 통해 편리하게 누락된 값을 입력한다든가 pivoting을 한다든가 할 수 있는 큰 장점을 보았다. 엑셀에서 마우스로 작업하던 것을 이렇게 파이썬을 이용해 프로그래밍할 수 있는 것이다. 또한 일반적으로 플로팅하기 위해 matplotlib 패키지를 많이 사용하지만, Bokeh 패키지를 이용하면 html 문서로도 만들 수 있음을 확인해보았다.

사람들이 대게 많이 묻는 질문은 R이냐 파이썬이냐 하는 것이다. 비개발자 혹은 IT 분야가 아닌 과학자들이 주로 R을 다루는 경향이 있다. 그리고 파이썬은 개발자들이 본인의 개발 역량을 최대한 발휘해 데이터를 분석할 때 많이 쓰이곤 한다.

필자도 파이썬을 대부분 이용한다. 이는 많은 의미가 있다. 단순히 데이터를 분석하는 데에 그치지 않고 이를 사용자들이 이용할 수 있는 상용화까지 하기 위함이다. 오늘 본 것이 상용화의 일부를 맛 본 것이라 할 수 있다. 사실상 데이터를 분석하는 것이 내 만족으로 그치지 않고 많은 사용자에게 널리 유익하게 하기 위해 서비스화하는 것 또한 중요하다. 이런 관점에서 볼 때 파이썬은 최상의 도구가 된다. 데이터 분석에 그치지 않고 Django과 같이 파이썬으로 만들어진 웹 프레임워크를 이용하면 쉽게 웹 서비스로 만들 수 있기 때문이다.

이렇게 파이썬으로 데이터를 분석한다는 것에는 단순히 분석을 넘어 다른 부가적인 혜택이 많다. 이게 파이썬이 높은 인기를 끄는 이유가 아닌가 한다. 이렇게 이번 달의 연재를 마무리한다. 독자들에게 조금이라도 도움이 되면 좋을 것 같다.

?

출처 : 한국데이터베이스진흥원

제공 : 데이터 전문가 지식포털 DBguide.net

?

?