brunch

You can make anything
by writing

C.S.Lewis

by 강원양 Nov 21. 2018

숫자는 계산을 위한 것! 차트에서도 예외는 아니다.

데이터 집산을 활용한 시각적 분석 2 : 수치형 변수 활용하기

지난 글 ‘데이터 하나로 몇 개의 차트를 만들 수 있을까요?’에서 데이터 집산(Data Aggregation)의 개념을 알아보았습니다. 시각화에서 데이터 집산은 그 기준이 되는 변수의 유형에 따라 두 가지(수치형, 범주형)로 나뉘는데요! 이번에는 수치형 변수를 활용해 데이터 집산을 해보고, 시각화했을 때의 효과까지 자세히 알아봅니다.





시각화 차트를 만드는 순간, 당신은 이미 데이터 집산을 했다!


먼저 수치형 변수의 개념을 간단히 알아봅시다! 수치형 변수(measure, value)란 계산이 가능한 숫자 형태의 값을 가진 변수를 의미합니다. 시각화 차트는 수치형 변수와 범주형 변수(dimension, 항목(category)으로 구분되는 값)의 조합으로 만들어집니다. 이때 범주형 변수 항목별로 수치형 변수의 값이 합산(SUM)되는 것이 일반적입니다.


시각화 차트를 만드는 과정을 통해 자세히 알아보겠습니다. 먼저 시각화를 하기 위해 필요한 데이터인 로우(raw) 데이터를 준비합니다. 로우 데이터는 하나의 열(column)에는 해당 열의 값만 포함하는 형태입니다.

서울시 열린데이터 광장, ‘서울시 지하철노선 역별 승하차 인원 정보(2018.09)’ 로우 데이터

위 데이터는 서울 열린 데이터 광장에서 공개한 ‘서울시 지하철 노선 역별 승하차 인원 정보’입니다. 파일 형태로 공개된 최근 데이터인 2018년 9월 데이터를 다운로드했습니다. 하나의 열에 해당 값만 포함하는 로우 데이터 형태입니다. 9월 한 달간 1일 단위로 데이터가 수집되었습니다. 각 변수를 유형별로 나눠보면, ‘사용일자’, ‘노선명’, ‘역ID’, ‘역명’, ‘등록일자’는 범주형 변수입니다. 계산할 수 있는 숫자 형태의 값을 가진 ‘승차 총 승객수’와 ‘하차 총 승객수’는 수치형 변수입니다.


그렇다면, 어떻게 시각화 차트를 만들 수 있을까요? 가장 먼저 우리에게 익숙한 표를 한번 만들어 봅시다. 지난 글에서 우리가 일반적으로 알고 있는 표는 피벗 테이블이며, 시각화 요소를 활용하지 않았을 뿐 시각화 차트 유형 중 하나로 볼 수 있다고 했었죠! 1호선 역별로 2018년 9월 한 달간 승차, 하차  총승객수를 피벗 테이블로 만들어 봅시다.

서울시 열린데이터 광장, 2018년 9월 1호선 역별 승차, 하차 승객수 현황

1호선 역별로 일간 승차, 하차 승객수를 각각 ‘더해서’ 정리합니다. 9월 한 달간 역별로 승차 총 승객수와 하차 총승객수를 알 수 있습니다. 여기서 잠깐! 수치형 변수의 데이터 집산(Aggregation)을 했다는 사실, 눈치를 채셨나요? 일간으로 집계된 승객수(수치형 변수)를 합산(sum)하였습니다. 이처럼 수치형 변수 데이터를 특정 기준으로 계산하는 것을 두고 데이터 집산이라고 합니다. 우리가 일반적으로 보는 다수의 차트는 합산을 기준으로 데이터를 집산합니다. (통계청이 제공하는 다수의 표가 그렇습니다.)

(좌) 1호선 역별 승차/하차 총 승객수(2018.09) / (우) 1호선 역별 승차 총 승객수(2018.09) (시각화 솔루션 DAISY 활용)

그리고 이 피벗 테이블을 그대로 시각화 요소로 표현하면 차트가 됩니다. 막대 차트를 만든다면, 역별로 막대를 그리되, 총승객수의 크기에 따라 막대의 길이를 다르게 표현합니다. 파이 차트를 만든다면, 역별 총 승객수 크기에 따라 조각의 크기를 달리해 표현합니다. 우리가 시각화 차트를 만드는 순간, 수치형 변수 데이터는 계산된 새로운 값이 되어 시각화 요소로 표현되고 있던 겁니다.

1호선 역별 승차 총 승객수를 비율로 계산 (엑셀, 피벗 테이블 기능 활용)

이쯤에서 한 가지 궁금증이 들 수 있는데요. ‘파이 차트는 전체 중 특정 항목이 차지하는 비중을 알고 싶은 경우에 사용하는데, 항목별 비중(%) 값을 알 수는 없을까?’하고 말이죠. 이 궁금증의 답을 먼저 이야기하면, 수치형 데이터의 집산을 합산(SUM)이 아니라 전체 중 차지하는 비중(%)을 기준으로 하면 됩니다. 엑셀에서 피벗 테이블을 만들어보신 분이라면 쉽게 이해하실 수 있으실 텐데요. 예를 들어 1호선 전체 역을 이용한 총 승차 승객수 중 역별 승차 승객수가 차지하는 비중을 계산하는 것입니다. 이 역시 수치형 변수의 계산 기준을 달리하여 새로운 값을 만들어 낸 것이므로 데이터 집산이라고 할 수 있습니다.

엑셀 피벗 테이블의 값 필드 설정 화면 – 합계 뿐만 아니라, 개수, 평균, 최대, 최소 등 다양한 기준으로 데이터를 집산할 수 있다.

정리하면, 수치형 변수의 데이터 집산은 합산뿐만 아니라, 평균, 중앙값, 최댓값, 최솟값(Minimum), 빈도수, 표준편차, 분산 등 여러 기준으로 할 수 있습니다. 물론 각각의 기준마다 계산 결괏값이 다른 피벗 테이블이 만들어집니다. 즉, 수치형 변수의 데이터 집산 기준을 무엇으로 하느냐에 따라 다양한 시각화 차트를 만들 수 있습니다.



수치형 데이터 집산과 시각화의 만남이 필요한 이유!


수치형 변수 데이터를 집산할 수 있는 기준(합산, 평균, 중앙값, 최댓값, 최솟값, 빈도수, 표준편차, 분산 등)들은 모두 데이터 분석 기초 단계에서 분석 대상 데이터를 한눈에 파악하기 위해 활용하는 것입니다. 예를 들어 볼까요? 우리가 학생 30명을 맡게 된 담임 선생님이 되었다고 생각해봅시다. 담임 선생님이 된 여러분은 가장 먼저 무엇을 할까요? 아마 30명 학생을 여러 기준으로 파악하여, 우리 반은 ‘이렇다!’ 할 특징을 찾아내고자 할 텐데요. 그 기준은 남녀 비율은 어떤지, 키는 다들 비슷한지, 개인별 학습 수준에 차이가 크게 나는지, 학교로부터 가장 먼 곳에 사는 학생은 누구인지 등을 예로 들 수 있습니다. 각 기준에 따라 학생들의 달라지는 분포를 확인하고, 이상치가 없는지 등을 확인하며 우리 반의 특징을 찾아냅니다.


이렇듯 수치형 데이터 집산의 기준은 분석 대상 데이터의 특징을 요약합니다. 수학적으로 평균, 중앙값, 표준편차, 분산 등은 ‘요약 통계’라 불리며, 데이터를 한눈에 파악하기 위해 활용합니다. 일반적으로 요약 통계는 데이터 분석 기초 단계에서 필수적으로 확인하는 정보입니다. 분석 대상 데이터에 대한 기본적인 정보를 전제로 할 때, 정확한 데이터 분석 결과 도출이 가능하기 때문입니다. 최댓값, 최솟값 역시 데이터를 파악하는 데 유용하게 활용됩니다. 지금까지의 이야기를 종합하면, ‘데이터의 특징을 한눈에 파악하고, 정확한 데이터 분석을 위해 수치형 변수 데이터를 여러 기준으로 집산해봐야 한다.’고 정리할 수 있습니다.


같은 맥락에서 데이터의 특징을 시각적으로 한눈에 파악할 수 있는 시각화에서도 수치형 변수 데이터의 집산 기준을 달리해볼 수 있어야 합니다. 더군다나 ‘요약 통계’가 데이터를 수치로 요약해서 보여준다면, ‘시각화’는 요약한 데이터 수치를 시각적으로 표현해 직관적인 해석을 가능하게 하므로, 데이터 분석에서 이 둘을 함께 활용할 때 그 효과가 극대화됩니다. 따라서 대다수의 데이터 시각화 솔루션은 수치형 변수의 데이터 집산을 손쉽게 할 수 있는 기능을 제공합니다. 간단히 클릭 한 번만으로도 차트를 만드는 데 사용한 수치형 변수의 데이터 집산 기준을 다르게 할 수 있습니다. 데이터 집산 기준을 다르게 하기 위해 매번 새로운 피벗 테이블을 만들고 시각화 차트로 표현하는 과정 없이, 바로 시각화 차트로 데이터의 변화를 확인할 수 있다는 것이 장점입니다.



수치형 변수의 데이터 집산과 시각화를 활용한 데이터 탐색, 사례로 알아보기!


그렇다면 시각화를 활용한 데이터 탐색 및 분석에서 수치형 변수의 데이터 집산을 어떻게 활용할 수 있을지, 또 어떤 인사이트를 찾을 수 있는지 사례를 통해 알아보겠습니다. 앞서 서울시 지하철 호선별 역별 승하차 인원 데이터를 잠깐 살펴보았는데요. 이번에는 2018년 1월부터 9월까지 월별 데이터를 수집 및 시각화하여, 올해 서울시 지하철역별 승객 현황의 특징을 찾아보겠습니다.


시각화 차트를 만들기에 앞서 먼저 데이터를 확인해봅시다. 각 열(column)의 데이터는 해당 열의 값만 가진 로우(raw) 데이터 형태입니다. 데이터는 일간으로 수집되었습니다. ‘사용일자’, ‘노선명’, ‘역ID’, ‘역명’은 범주형 변수이며, ‘승차 총 승객수’와 ‘하차 총 승객수’는 수치형 변수입니다.

서울시 열린데이터 광장, ‘서울시 지하철노선 역별 승하차 인원 정보(2018.01-09)’ 로우 데이터 일부

이제 시각화 차트를 활용해 데이터 인사이트를 찾아보겠습니다. 데이터 집산의 기준을 다르게 하면서 말이죠! 가장 먼저 2018년 1월부터 9월까지 서울시 지하철역 가운데 가장 많은 승차 승객수를 기록한 역을 찾아볼까요? 지하철역이 매우 많으니, 상위 10개 지하철역만 확인해봅니다.

서울시 지하철 역별 승차 총 승객수, 2018년 1월~9월 누적, 상위 10개역

지난 2018년 1월부터 9월까지 일간으로 수집된 승차 승객수를 모두 ‘합산’하여 상위 10개 지하철역을 막대 차트로 그려보았습니다. 가장 많은 누적 승차 승객수를 기록한 역은 잠실(송파구청) 역입니다. 그 뒤를 강남, 고속터미널, 홍대입구, 서울역이 이었습니다. 이들 역은 2018년 9월까지 누적 승차 승객수가 2천만 명이 넘습니다.


다음으로 하루 평균 승차 승객수가 많은 상위 10개 역을 찾아보도록 하겠습니다. 일간으로 수집된 승차 총 승객 수 데이터의 집산 기준을 ‘평균’으로 합니다. 같은 데이터지만 계산 방식을 달리하는 것이죠. ‘평균’ 값을 기준으로 상위 10개 지하철역을 찾아봅시다.

서울시 지하철 역별 일평균 승차 승객수(2018년 1월~9월) 상위 10개역

지난 9개월간 하루 평균 승차 승객수 상위 10개 지하철역은 누적 승차 총 승객수 기준 상위 10개 지하철역과 같은 순위로 나타났습니다. 하루 평균 승차 승객수가 많은 지하철역이 아무래도 누적 승차 승객수도 많겠죠? 자연스러운 결과인 것 같습니다.


그렇다면, 중앙값(Median)을 기준으로 했을 때는 어떤 변화가 있을까요? 서울시 지하철역별 승차 승객수를 시각화하되 이번에는 데이터 집산의 기준을 ‘중앙값’으로 해보겠습니다.

서울시 지하철 역별  일일 승차 승객수의 중앙값(2018년 1월~9월) 상위 10개역

이번에는 강남역이 1위를 차지했습니다. 중앙값이란 주어진 값들의 크기를 순서대로 나열했을 때 가장 중앙에 위치하는 값을 의미합니다. 데이터 집산 과정에서 평균과 달리 이상치의 영향을 받지 않는 특징을 갖고 있습니다. 하루 평균 승차 승객수 기준으로 1위를 차지했던 잠실(송파구청) 역은 2위로 내려가고, 강남역이 1위를 차지했습니다. 서울역, 선릉역, 구로디지털단지역의 경우도 이와 유사하게 평균보다 중앙값 기준의 순위가 상승했습니다. 중앙값의 개념 정의를 역으로 생각해보면, 이들 역의 경우 평균값 계산에 이상치의 영향을 크게 받았음을 알 수 있습니다. 일일 승차 승객수의 분포가 고르지 않을 것 같다는 추측을 해볼 수도 있습니다. 앞서 ‘합산’, ‘평균’ 기준의 데이터 집산 결과에서 상위 10위권에 포함되지 않았던, 가산디지털단지역의 중앙값이 높은 것도 눈에 띕니다.


이제 지난 9개월간 일일 최대 승차 승객수를 기준으로 한 상위 10개 지하철역을 알아봅시다. 또 일일 최소 승차 승객수를 기준으로 할 때 상위 10개 지하철역을 알아봅시다. 데이터 집산의 기준으로 각각 ‘최댓값’과 ‘최솟값’을 활용하는 것입니다.

서울시 지하철 역별  일일 최대 승차 승객수(2018년 1월~9월) 상위 10개역

먼저 일일 최대 승차 승객수를 기록한 지하철역 상위 10개를 살펴봅시다. 주로 앞선 데이터 집산 결과 상위권에 이름을 올리지 못했던 지하철역이 새롭게 등장했는데요! 바로 삼성역입니다. 삼성역은 누적 승차 승객수, 하루 평균 승차 승객수 기준 상위 10위권에 들지 못했지만, 일일 최대 승차 승객수 기준으로 상위 6위에 올랐습니다.

서울시 지하철 역별  일일 최소 승차 승객수(2018년 1월~9월) 상위 10개역

반면, 일일 최소 승차 승객수를 기준으로 상위 10개 지하철역을 살펴보니, 1위는 서울역(5만 5천557명)으로 나타났습니다. 서울역의 경우 누적 총 승차 승객수, 하루 평균 승차 승객수, 일일 최대 승차 승객수에 이어 일일 최소 승차 승객수까지도 여타의 지하철역에 비해 높은 수준임을 알 수 있습니다. 이와 비슷한 패턴을 보인 지하철역으로 고속터미널, 잠실(송파구청), 홍대입구, 신림역을 찾아볼 수 있습니다.




지금까지 수치형 변수(승차 승객수)의 데이터 집산 기준을 다르게 하면서, 시각적 데이터 탐색과 인사이트 도출을 하였습니다. 같은 데이터를 사용했고, 모두 막대 차트로 시각화했지만 이를 통해 얻을 수 있는 인사이트는 각기 달랐습니다. 사실 이번 글에서 활용한 데이터 집산 기준들은 데이터의 분포를 파악하는 데 기본적으로 활용하는 것입니다. 기준별로 막대 차트를 그려보았지만, 여러 기준의 데이터 집산 결과를 한 번에 시각화하는 방법도 있습니다. 바로 박스 플롯(box plot, box-and whisker plot)을 활용하는 방법인데, 이를 통해 데이터의 분포를 좀 더 직관적으로 알 수 있습니다. (물론 각 집산 기준별 상위 10개 지하철역을 따로 알긴 어렵지만요) 간단히 위에서 언급된 지하철역만 박스 플롯을 그려볼까요?

서울시 지하철 주요 역별  일일 최소 승차 승객수 분포 (2018년 1월~9월)

다소 낯선 시각화 유형이라 어렵게 느껴질 수도 있으나, 지하철역별 일일 승차 승객수의 분포와 이상치를 한눈에 파악할 수 있습니다. 간단히 살펴볼까요? ‘노란색 점’은 일일 승차 승객수를 의미합니다. 지하철역별로 점들이 몰려 있다면 일일 승차 승객수가 일별로 비슷한 수준인 것입니다. 반대로 점이 넓게 퍼져 있다면, 일일 승차 승객수의 변동이 큰 것이겠죠. ‘검은색 선’은 수염이라고 부르는데, 이 범위 밖의 점을 이상치(outlier)라고 보면 됩니다. 박스 플롯에 대한 기본적인 이해를 바탕으로 지하철역별 분포를 비교하여 인사이트를 도출할 수 있습니다.

서울시 지하철 주요 역별  일일 최소 하차 승객수 분포 (2018년 1월~9월)

그뿐만 아니라 분석 대상 데이터 범위에 있었으나, 우리가 살펴보지 않은 수치형 변수인 ‘하차 승객수’를 기준으로 데이터 집산의 기준을 달리하여 데이터 탐색 및 인사이트를 도출할 수 있습니다. 이 경우 ‘승차 승객수’ 기준의 데이터 인사이트와 종합적으로 비교하여, ‘서울시 지하철역별 승객 현황’에 대한 종합적인 인사이트를 도출해낼 수 있습니다.


여기서 좀 더 나아가 수치형 변수의 데이터 집산 기준을 데이터 분석을 하는 사람이 임의로 만들어 활용할 수도 있습니다. 사칙연산으로 수식을 만들어 계산하는 것입니다. 예로 승차 승객수와 하차 승객수를 ‘더해’ 총 승객수라는 새로운 수치형 변수를 만들 수 있습니다. 이 경우, 기존 변수를 활용해 파생변수를 만들었다고도 할 수 있는데요. 파생변수를 활용해 좀 더 다양한 데이터 탐색이 가능해집니다. 이처럼 수치형 변수의 데이터 집산을 통한 데이터 탐색은 무궁무진한데요. 다음 글에서는 범주형 변수를 활용한 데이터 집산과 적합한 시각화 유형은 무엇인지 자세히 알아보겠습니다.


[참고자료]

– 서울 열린 데이터 광장, 서울시 지하철 호선별 역별 승하차 인원 정보
– Flowing data, How to read and use a box-and-whisker plot


* 이 글의 원문 출처는 데이터 시각화 전문기업 뉴스젤리 블로그 '숫자는 계산하라고 있는 것! 차트 만들기에서도 예외는 아니다.'입니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari