본문 바로가기
문송충의 코딩하기/파이썬 데이터 분석

[파이썬] - 공공데이터 API에서 시도별 미세먼지 PM10 데이터를 가져와서 Folium으로 시각화하기

by 동장군님 2020. 11. 28.
728x90
반응형

최근 중국에서 난방을 시작하면서 이제는 코로나에 이어서 미세먼지까지 한국으로 들어오고 있다. 현재 상황이 심각한 만큼 오늘 포스팅에서는 미세먼지 특히 PM10 관련 데이터를 공공데이터 API에서 가져와서 Folium으로 시각화하도록 하겠다. 대한민국 어느 지역에서의 미세먼지가 심각한지 지도로 확인해 볼 수 있는 기회가 됐으면 한다. 공공데이터 관련 정보는 아래 링크에서 확인하기 바란다.

 

data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15000581

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

공공데이터 Open Api에서 데이터 가져와서 전처리

 

하루치 미세먼지 데이터만을 가져오면 표본이 너무 적을 것 같아서 이번 포스팅에는 30일 치 평균 미세먼지 데이터를 가져와 다시 시도별로 평균 수치를 계산해 보도록 하겠다. API 키 값만 신청한 후 아래 코드 key 변수에 넣으면 무난히 돌아갈 것이다. 그리고 Folium에 시각화하기 위해서는 시도명은 한글로 변환해야 한다.

 

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import pandas as pd
import xmltodict
import json
from datetime import datetime
import requests

key=''
url=f'http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnMesureLIst?serviceKey={key}&'
queryParams =urlencode({quote_plus('numOfRows') : '31', quote_plus('pageNo') : '1',quote_plus('itemCode') : 'PM10',
                        quote_plus('dataGubun') : 'DAILY',quote_plus('searchCondition') : 'MONTH'})
url2 = url + queryParams
response = urlopen(url2) 
results = response.read().decode("utf-8")
results_to_json = xmltodict.parse(results)
data = json.loads(json.dumps(results_to_json))
rdata=data['response']['body']['items']['item']

df=pd.DataFrame(rdata)
df=df.drop(['itemCode','dataGubun'],axis=1)
df=df.set_index('dataTime')
df=df.astype(int)
region=pd.DataFrame(df.mean(axis=0),columns=['avg_pm10'])
region=region.reset_index()

kor=['서울특별시','부산광역시','대구광역시','인천광역시','광주광역시','대전광역시',
    '울산광역시','경기도','강원도','충청북도','충청남도','전라북도','전라남도','경상북도','경상남도',
                '제주특별자치도','세종특별자치시']
region['name']=kor
region.drop(['index'],axis=1,inplace=True)

region['avg_pm10']=region['avg_pm10'].astype(int)

 

 

Folium으로 시각화

 

그 다음으로 Folium 패키지를 통해서 지도에 그려보도록 하겠다. 굉장히 쉽운 코드라서 따로 설명을 드리지 않겠다.

 

import folium
geo_json='https://raw.githubusercontent.com/southkorea/southkorea-maps/master/kostat/2013/json/skorea_provinces_geo_simple.json'

m=folium.Map(
    location=[36.97884521132491, 127.86224884213675],
    tiles='Stamen Terrain'
)
folium.Choropleth(
    geo_data=geo_json,
    name='choropleth',
    data=region,
    columns=['name','avg_pm10'],
    key_on='feature.properties.name',
    fill_color='YlGn',
    fill_opacity=0.7,
    line_opacity=0.2
).add_to(m)

 

결과물

확실히 중국과 가장 근접한 경기도에서 최근 30일 평균 미세먼지 수치가 가장 높은 점을 확인할 수가 있다.

 

 

 

 

 

728x90
반응형

댓글