728x90
최근 중국에서 난방을 시작하면서 이제는 코로나에 이어서 미세먼지까지 한국으로 들어오고 있다. 현재 상황이 심각한 만큼 오늘 포스팅에서는 미세먼지 특히 PM10 관련 데이터를 공공데이터 API에서 가져와서 Folium으로 시각화하도록 하겠다. 대한민국 어느 지역에서의 미세먼지가 심각한지 지도로 확인해 볼 수 있는 기회가 됐으면 한다. 공공데이터 관련 정보는 아래 링크에서 확인하기 바란다.
data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15000581
공공데이터 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
반응형
'문송충의 코딩하기 > 파이썬 데이터 분석' 카테고리의 다른 글
공공데이터 Open API를 통해 국내 주요 은행 현황 분석#1 with Python (0) | 2021.03.20 |
---|---|
네이버에서 국내 ETF 종목 정보 가져와서 분석 with Python (0) | 2021.03.20 |
[파이썬] - 네이버 파이낸스에서 KT 주가 가져와서 Plotly 반응형 그래프 그리기 (0) | 2020.11.28 |
[파이썬] - 서울 2호선 지하철 역별 승하차 승객 수 Folium으로 시각화 (0) | 2020.11.27 |
[파이썬] - 넥슨 카트라이더 API를 활용해서 내 카트라이더 매치 정보 가져오기 #1 (1) | 2020.11.25 |
댓글