이번 포스트에서는 데이터 수집부터 시각화까지 단계 별로 실 데이터를 활용하여 실 예제를 들어 설명하겠다.
스토리텔링
데이터 안에 숨겨진 정보를 찾기 위한 방법은 여러 가지이다. 통계적인 분석을 통해 수치적인 결과로 알아낼 수도 있고, 그래프를 통해 시각적으로 표현할 수도 있고, 마이닝과 같은 고급 분석 방법을 통해 새로운 정보를 만들어 낼 수도 있다.하지만 그 결과를 받은 사람의 입장으로서는 지루한 숫자들의 나열이고, 알 수 없는 도형들의 집합체일 뿐이다. 정말 데이터 안에 있는 의미, 진실을 정확히 알기 위해서는 명확한 목표를 가지고 올바른 질문을 할 수 있어야 한다.
네이선 야우저의 “비주얼라이즈 디스” 라는 책을 보면 데이터를 통해 이야기 하는 방법을 제시한다.
먼저 데이터를 수집하고, 무엇을 알고 싶은지 질문을 하고, 답을 얻기 위한 적절한 도구를 고른 후, 도구를 활용하여 데이터를 탐색한다.
트렌드를 찾고, 패턴을 찾고, 카테고리를 나누는 등 탐색 작업을 마치고 난 후 데이터가 말하는 이야기를 정리하고 이야기를 받아들일 사람을 위해 깊이 생각하고 단순하게 디자인한다. (참고 사이트 : http://book.flowingdata.com/)
아래의 내용부터 실데이터를 바탕으로 raw data 안에서 의미를 찾고 데이터를 시각화 해보도록 하겠다.
데이터 수집 및 가공
지난 4월달부터 서울시에서 공공 데이터를 일반 대중들에게 오픈 API를 제공하기 시작했다. 서울 열린 데이터 광장(http://data.seoul.go.kr) 으로 접속하면 버스운행정보, 물가정보, 인구정보, 부동산 정보들을 제공 받을 수 있다.
필자는 오픈API를 활용하여 서울시 개인 서비스 요금정보 데이터를 수집하였다. 데이터는 CSV, XML, JSON 형식으로 제공되는데 이번 데이터 수집은 XML 데이터 형식으로 데이터를 받아와 일차적으로 Java로 파싱 후 분석 가능한 데이터 형태로 변환 시켰다. (CSV 형식을 파일 형태로 바로 다운이 가능해 편하지만 실시간으로 업데이트가 되지 않는다.)
데이터는 총 53,919 건이 수집 되었으며, 서비스이름, 가격, 지역, 업종, 업체명 등의 필드로 구성되어 있다.
|
순번
|
출력명
|
출력 설명
|
|
1
|
BSSH_NM
|
업소명
|
|
2
|
BSSH_SEQ_NO
|
업소일련번호
|
|
3
|
INDUTY_CODE_SE
|
업종코드
|
|
4
|
INDUTY_DESC
|
업종
|
|
5
|
TLPHON_NO_CN
|
전화번호
|
|
6
|
AR
|
면적(㎡)
|
|
7
|
DONG_CODE_SE
|
동코드
|
|
8
|
LEGALDONG_NM
|
동명
|
|
9
|
ADRES_CN2
|
주소
|
|
10
|
PRDLST_CODE_SE
|
품목코드
|
|
11
|
PRDLST_DESC
|
품목
|
|
12
|
PC
|
가격
|
|
13
|
CHCK_MD
|
점검일자
|
|
14
|
PRGN_BSSH_YN
|
착한가게여부
|
물론 파싱하여 가져온
데이터를 바로 사용할 수 있는 것은 아니다. 결측값(missing
value)에 대한 처리와 이상치에 대한 처리를 해주어야 하고, 분석 목적에 맞게
테이블을 변경하고 데이터를 가공해야 데이터의 새로운 가치를 부여할 수 있다.
데이터 탐색 및 분석
데이터 탐색, 분석을 위한 도구는 목적과 기능에 맞게 사용자가 알맞게 선택하면 된다. 엑셀, 구글 스프레드시트, R, SAS, SPSS, 파이썬 등 도구는 굉장히
다양하다. 다만 각 데이터의 특성과 분석 목적에 따라 도구별로 특장점이 있으니 이를 잘 파악하여 선택하는
것이 중요하다.
필자는 수집한 데이터
건수가 빅데이터 수준은 아니기 때문에 엑셀과 R을 활용하여 탐색 및 분석을 하였다. 그리고 추가적으로 데이터의 시각화를 위해 전용 소프트웨어를 사용할 것이다.
나는 이 데이터를
활용하여 서울시의 지역별 물가 수준과 업종현황을 알고 싶었다. 이러한 현황은 쉽게 막대그래프를 통해
확인 할 수 있다. 동별 서비스 평균가를 막대그래프로 표현해봤다.
하지만 보다시피 주소가 동으로 표현되어 있어 그래프를 봐도 혼란스럽고, 정확한
특징을 잡기 어렵다.
그리고 지역과
가격정보 뿐만 아니라 업종별 가격현황과 업종 분포도 한눈에 보고 싶다. 그리고 주소가 동이 아닌 서울시
구별로 보고 싶다. 이 두가지의 요건을 만족하기 위해서는 그래프의 시각화와 데이터의 가공이 필요하다.
이를 위해
l 동으로 된
데이터를 구별로 그룹화 시킨다.
l 구조화된 3가지의 변수를 표현할 수 있는 treemap을 사용한다.
l GPS정보를 Merge 시켜 map 표현하여
좀더 쉽게 정보를 전달한다.
하기로 하고, 데이터를 시각화(Visualize) 시켜보기로 한다.
데이터 시각화
단순히 테이블에
적혀있는 데이터를 통해서는 전혀 인사이트나 정보를 얻을 수 없다. 위와 같이 선그래프나 막대그래프 등으로
데이터를 표현해야지 데이터에 대한 이해도가 높아진다. 하지만 기존의 막대 그래프나 선 그래프에는 한계가 있다. 기본 그래프 외에 다양한 데이터 표현 방법이
있다. 지도에 데이터를 표현 할 수도 있고, 트리맵이나 기하학적인
표현을 통해 좀더 데이터의 다이나믹한 면을 전달 할 수 있다.
TreeMap
그래서 위의 개인 서비스
정보를 R을 활용하여 데이터를 시각화 시켜보았다. 먼저 기존
데이터를 다음 소스 코드를 활용하여 각 동별 업종별 평균과와 점포개수를 계산하여 데이터를 가공하고, R
package중 고급 그래프를 지원해주는 라이브러리를 활용하여 treemap으로 표현해봤다.
위의 그래프를
살펴보면 여러 개의 Box와 색깔, 박스 크기로 데이터를
표현해 주고 있는데, 기존 트리 다이어그램에서 한단계 업그레이드된 표현 방법이다. 1990년 벤 슈나이더만이 처음 제시한 그래프인데 데이터가 트리 구조의 데이터를 가지고 있을 때 완벽하게 활용된다.
위의 그래프의
박스 size는 그 지역의 개인 서비스 가격, color는
해당 라벨의 업소 개수를 말해준다. 그리고 박스의 경계를 통해 각 지역별 업종의 비율을 나타내준다. 역삼동, 종암동, 여의도동, 삼성동 순으로 개인 서비스 가격이 비싸며, 상계동, 신월동 등에 업소 개수가 많다는 것을 알 수 있다.
특히 개인 서비스
가격이 높은 지역에서 가장 비싼 가격의 업종은 호텔업이며, 박스의 크기가 작아질수록 호텔업에서 여관업으로
변경되는 모습을 볼 수 있다.
위의 트리맵은
지역 중심이 아닌 개인 서비스 업종 중심으로 재구성한 그래프이다. 한식업이 가장 많이 있었으며, 한식 중 김치찌개 백반이 가장 많은 품목이고 가격이 싸다는 것을 쉽게 알 수 있다. 그리고 비싼 품목의 업종일수록 업종개수가 적다는 것을 한눈에 파악 가능하다.
그리고 골프연습장 이용료와 호텔숙박료가 개인 서비스 품목 중 상당히 비싸다는 것이 파악 가능하다.
공간시각화
이번에는 GPS정보와 우편번호 주소 DB를 수집하여 동으로 되어 있던 것을
구로 그룹핑 하여 각 구청의 GPS정보를 매칭 시켰다. 이
데이터를 통해 위의 treemap보다 좀더 이해가 쉽도록 타블로(Tableau) 프로그램을 사용하여 공간 시각화를 하였다.
각 구별로 개인 서비스업을 하는 업체의 개수를 공간화 시킨 것이다.
각 구별로 개인 서비스업을 하는 업체의 개수를 공간화 시킨 것이다.
송파구와 노원구에 가장 많이 개인서비스 업체가 많은 것을 한눈에 확인 할 수 있다.
이렇게 데이터를 가공하고 필요한 데이터를 merge시켜 사람들이 한눈에 데이터를 파악할 수 있게끔 만들어 주는 것이 데이터 시각화라고 할 수 있겠다.
지금까지 데이터의
수집과 가공, 탐색, 분석,
시각화를 실 데이터를 활용하여 작업해 보았다. 데이터의 시각화는 디자인적 요소도 중요한데 R 소프트웨어가 충분히 디자인적인 면은 충족시켜주지 못하는 면은 있다. 다음 포스트에는 데이터 가공과 시각화까지
완료된 그래프를 통해 어떠한 정보를 알아낼 수 있는지 스토리텔링 해보도록 하겠다.








댓글 없음:
댓글 쓰기