brunch

You can make anything
by writing

C.S.Lewis

by 마경근 Feb 04. 2020

데이터의 대푯값과 분포_2

Part2. 공공데이터 시각화 및 탐색

서울시의 열린데이터광장에서 제공하는 미세먼지 데이터를 활용하여 데이터의 대푯값과 분포를 설명한다. Python과 관련 라이브러리를 활용한다.



1. 미세먼지 데이터의 이해


 에어코리아(한국환경공단)는 대기오염 측정망 인프라를 기반으로 공기오염상태 관련 데이터를 제공한다.

에어코리아 홈페이지


일반 대기오염 측정망은 측정 목적과 위치에 따라  4가지로 구분된다. 

그중 도시대기 측정망은 거주 밀집 지역의 대기질 농도 측정을 목표로 하는데, 미세먼지와 초미세먼지 등 6가 지 항목을 대상으로 한다,


서울의 도시대기 측정망은 25개의 자치구별로 설치되어 있다.  

즉, 25개 자치구에 설치된 측정소에서 측정 데이터를 생성한다.  

서울의 도시대기 측정망


서울열린데이터광장에서 '대기환경'을 키워드로 검색하면 관련 데이터를 다운로드할 수 있다.

서울시 열린데이터 광장


필자의 깃허브 사이트에 올려놓은 2018년 서울의 대기환경 데이터를 활용한다.

데이터는 218,600행, 10열로 구성되어 있다.

정상이라면 219,000행(365일×24시간×25개 자치구)이 되어야 하나 400행이 부족하다. 즉,  400개의 결측값이 있다고 추정할 수 있다. 
측정일시, 측정장소, 미세먼지(pm10), 초미세먼지(pm25) 등 10개의 열이 있다. 각 열의 내용은 다음과 같다.

datetime : 일시(2018.1.1~2018.12.31(365)×00시~23시(24) =  8760, 실제는 8744), 범주형

msrrgn_nm : 도심권명(동북권, 서남권, 동남권, 도심권, 서북권), 범주형

msrste_nm : 자치구(중구, 종로구 등 25개), 범주형

pm10 : 미세먼지, 연속형

pm24 : ??

pm25 : 초미세먼지, 연속형

o3 : 오존, 연속형

no2 : 이산화질소, 연속형

co : 일산화탕소, 연속형

so : 이산화황, 연속형


시간대별 자치구의 대기환경 평균값을 산출한다.

시간대별 25개 자치구의 대기환경 평균값은 8,760(365일×24시간×자치구 평균값)행이 된다.


2. 데이터의 대푯값


2018년 서울의 시간대별 초미세먼지(pm25) 농도의 대푯값을 확인해 보자.

평균값 : 22.14

중위값 : 18.2

최빈값 : 17.32 

평균값이 중위값과 최빈값보다 크다. 소수의 매우 큰 값이 평균값을 끌어 올렸을 것으로 추정된다.  하지만 데이터의 전반적인 분포를 파악하기에 한계가 있다.

참고로 1년간의 시간대별 초미세먼지(pm25) 농도를 시각화하면 아래 그림과 같다.


3. 데이터의 분포


3.1 초미세먼지 농도값 범위

초미세먼지의 최소값은 1.36이고 최대값은 149.92이다. 따라서 범위는 148.56이다(149.92-1.36)


3.2 초미세먼지 농도값 표준편차

Pandas의 std() 메소드를 이용하면 데이터의 표준편차를 쉽게 구할 수 있다.  표준편차는 16.78이다.

만약 초미세먼지 농도의 값이 표준정규분포를 따른다면 평균값(22.14)의 ±16.78, 즉 5.36부터 38.92의 범위에 전체의 68%가 분포하게 된다.


3.3 히스토그램 시각화

초미세먼지 농도 값을 히스토그램으로 시각화하면 아래 그림과 같다. 평균값이 중위값보다 큰 양왜도(positive skew) 형태를 갖는다.


초미세먼지의 농도값 분포는 매월 조금씩 다른 형태를 띈다. 아래 그림은 월별 초미세먼지농도값 히스토그램이다. 3월은 분포가 널리 퍼져 있으며 9월은 특정 값에 집중되어 있다는 사실을 발견할 수 있다.


3.4 박스플롯

박스플롯을 이용하여 데이터를 시각화하면 보다 상세한 분포를 파악할 수 있다. 아래의 그림은 월별 초미세먼지 농도 값의 박스플롯 분포이다. 몇가지 유의미한 결과를 도출하면,

1월엔 초미세먼지의 농도값이 특이하게 높은 경우가 여러번 있었다.

3월은 초미세먼지의 농도값이 널리 분포되었으며 최대값이 가장 높다.

9월은 초미세먼지 농도의 중위값과 최대값이 가장 낮다.   


참고로, 박스플롯의 의미는 아래와 같다.



소스 코드는 아래의 github 페이지에서 확인할 수 있습니다. 


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