본문 바로가기
Python

[파이썬] 공공 데이터 포털 API 한국환경공단 에어코리아 대기 오염 정보

by 퍼포먼스마케팅코더 2022. 8. 13.
반응형

여러분 중에 대기 오염에 대해서 궁금하신 분이 있나요? 이것에 대해 설명하는 것은 공공 데이터 포털 쪽 api에서 대기오염에 관련된 정보를 파이썬 코딩으로 볼 수 있습니다. 공공기관에서 나온 건데 먼저 한국환경공단 에어코리아라는 게 거기 이름입니다. 그래서 대기오염에 대한 정보를 api에서 제공하지만 실제 내용은 그리 복잡하지 않습니다. 오늘 그것에 대해 설명하겠습니다. 

[파이썬] 공공 데이터 포털 API 한국환경공단 에어코리아 대기 오염 정보

 

공공 데이터 포털 API 한국환경공단 에어코리아 대기 오염 정보 API 키 발급

먼저 이것도 처음에 공공데이터포털 api에서 대기오염에 대한 정보를 보신다면 똑같습니다. api 키를 발급을 해주셔야 합니다. 사이트는 이전과 마찬가지로 아래에 있으며 자동 발행이므로 그렇게 오래 걸리지 않습니다. 주의사항으로는 한번 api키를 발급해서 바로 할 수 있는 것이 아닙니다. 거의 한두 시간 정도는 기다려야 해요. 이 점은 주의해 주십시오.그걸 넘어서자마자 본격적으로 아래 파이썬 코딩에 대한 설명을 하도록 하겠습니다.

 

https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073861 

 

한국환경공단_에어코리아_대기오염정보

각 측정소별 대기오염정보를 조회하기 위한 서비스로 기간별, 시도별 대기오염 정보와 통합대기환경지수 나쁨 이상 측정소 내역, 대기질(미세먼지/오존) 예보 통보 내역 등을 조회할 수 있다.

www.data.go.kr

 

파이썬 공공 데이터 포털 API 한국환경공단 에어코리아 대기 오염 정보

우선 첫째, 신고코드와 신고시간으로 예보정보와 발생원인정보를 조회하게 되어 있는데 주로 대기질이라고 해서 이는 미세먼지 오존 예보통지를 조회하는 것이라고 합니다. 나오긴 했는데 조금 이 데이터는 나오는데 글쎄요, 이건 해당 부분에 대해서 잘 아시는 분들이 사용하시면 될 것 같아요. 날짜와 인증키만 입력하면 바로 나오게 되어 있거든요. 참고해 주세요.

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import json
import pandas as pd
from datetime import datetime,timedelta
import warnings
import xmltodict # 결과가 xml 형식으로 반환된다. 이것을 dict 로 바꿔주는 라이브러리다

#https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15073861
#통보코드와 통보시간으로 예보정보와 발생 원인 정보를 조회하는 대기질(미세먼지/오존) 예보통보 조회

warnings.filterwarnings('ignore')

param = 'getMinuDustFrcstDspth' 

# getMinuDustFrcstDspth 통보코드와 통보시간으로 예보정보와 발생 원인 정보를 조회하는 대기질(미세먼지/오존) 예보통보 조회

serviceKey = '' #API 키 입력
returnType = 'json'
searchDate = '2022-08-10'

url = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/{}?serviceKey={}&returnType={}&searchDate={}'.format(param,serviceKey, returnType, searchDate)

#HTTPSConnectionPool(host='www.work.go.kr', port=443): Max retries exceeded with url 
# 오류 발견시 requests.get(url, verify=False) 로 넣어주면됨. 

response = requests.get(url, verify=False)
r_data = response.json()

#r_data


try :
    data = pd.DataFrame(r_data['response']['body']['items'])
except :
    data = pd.DataFrame(r_data['response']['body']['items'], index=[0])  #데이터프레임으로 보자 

data

 

두번째는 미세먼지입니다. 주간에 미세먼지가 어떤지 이에 대한 데이터가 나옵니다. 마찬가지로 이것도 apit만 넣으면 관련 정보를 찾을 수 있지만 저는 어떤 내용인지 모르기 때문에 자세히 아시는 분이 아래에 설명해 주시면 좋겠습니다.

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import json
import pandas as pd
from datetime import datetime,timedelta
import warnings
import xmltodict # 결과가 xml 형식으로 반환된다. 이것을 dict 로 바꿔주는 라이브러리다

warnings.filterwarnings('ignore')

param = 'getMinuDustWeekFrcstDspth' 

# getMinuDustWeekFrcstDspth 통보코드와 통보시간으로 대기질 전망과 주간예보 정보를 조회하는 초미세먼지 주간예보통보 조회

serviceKey = '' #API키 입력
returnType = 'json'
searchDate = '2022-08-10'

url = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/{}?serviceKey={}&returnType={}&searchDate={}'.format(param,serviceKey, returnType, searchDate)

#HTTPSConnectionPool(host='www.work.go.kr', port=443): Max retries exceeded with url 
# 오류 발견시 requests.get(url, verify=False) 로 넣어주면됨. 

response = requests.get(url, verify=False)
r_data = response.json()
r_data

try :
    data = pd.DataFrame(r_data['response']['body']['items'])
except :
    data = pd.DataFrame(r_data['response']['body']['items'], index=[0])  #데이터프레임으로 보자 

data

 

세 번째는 측정 소명과 측정 데이터 기간으로 해당 측정소에 일반 항목 측정 정보를 제공한다, 이런 것들을 조회한다는데 참고하시면 될 것 같습니다.이것도 마찬가지로 인증키만 넣으면 됩니다. 저도 자세한 내용이 뭔지는 모르겠어요. 

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import json
import pandas as pd
from datetime import datetime,timedelta
import warnings
import xmltodict # 결과가 xml 형식으로 반환된다. 이것을 dict 로 바꿔주는 라이브러리다

warnings.filterwarnings('ignore')

param = 'getMsrstnAcctoRltmMesureDnsty' 

# getMsrstnAcctoRltmMesureDnsty 측정소명과 측정데이터 기간(일,한달,3개월)으로 해당 측정소의 일반항목 측정정보를 제공하는 측정소별 실시간 측정정보조회

serviceKey = '' #API 키 입력
returnType = 'json'
stationName = '마포구' # 측정소 이름
dataTerm = 'MONTH'  #요청 데이터기간(1일: DAILY, 1개월: MONTH, 3개월: 3MONTH)
numOfRows = '100'  #한 페이지 결과수
#pageNo = 1 #페이지번호

url = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/{}?serviceKey={}&returnType={}&stationName={}&dataTerm={}&numOfRows={}'.format(param, serviceKey, returnType, stationName, dataTerm, numOfRows)

#HTTPSConnectionPool(host='www.work.go.kr', port=443): Max retries exceeded with url 
# 오류 발견시 requests.get(url, verify=False) 로 넣어주면됨. 

response = requests.get(url, verify=False)
r_data = response.json()

r_data


try :
    data = pd.DataFrame(r_data['response']['body']['items'])
except :
    data = pd.DataFrame(r_data['response']['body']['items'], index=[0])  #데이터프레임으로 보자 

data

 

그 다음에 네 번째도 그렇게 큰 내용이 아닌데 통합대기환경지수가 나쁜 등급인 게 있나 봐요. 등급 부분에 측정소명과 주소목록 정보를 제공한다고 되어 있는데 참고하시기 바랍니다.

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import json
import pandas as pd
from datetime import datetime,timedelta
import warnings
import xmltodict # 결과가 xml 형식으로 반환된다. 이것을 dict 로 바꿔주는 라이브러리다

warnings.filterwarnings('ignore')

param = 'getUnityAirEnvrnIdexSnstiveAboveMsrstnList' 

# getUnityAirEnvrnIdexSnstiveAboveMsrstnList 통합대기환경지수가 나쁨 등급 이상인 측정소명과 주소 목록 정보를 제공하는 통합대기환경지수 나쁨 이상 측정소 목록조회

serviceKey = '' #API 키 입력
returnType = 'json'
numOfRows = '100'  #한 페이지 결과수
pageNo = 1 #페이지번호

url = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/{}?serviceKey={}&returnType={}&numOfRows={}&pageNo={}'.format(param, serviceKey, returnType, numOfRows, pageNo)

#HTTPSConnectionPool(host='www.work.go.kr', port=443): Max retries exceeded with url 
# 오류 발견시 requests.get(url, verify=False) 로 넣어주면됨. 

response = requests.get(url, verify=False)
r_data = response.json()
r_data

try :
    data = pd.DataFrame(r_data['response']['body']['items'])
except :
    data = pd.DataFrame(r_data['response']['body']['items'], index=[0])  #데이터프레임으로 보자 

data

마지막부분이 내용이 어려운데 이것도 시도명으로 검색해서 나오긴 했지만 내용이 복잡합니다. 안에 있는 수치적인 부분도 제가 알려드린 사이트 안에 들어가 보시면 확인하실 수 있을 것 같은데, 응, 데이터 양이 많아요. 확인해야 할 부분이 많고, 이는 해당 분야를 잘 알고 있는 관련 전공을 하신 분들이 참고하기에는 좋은 내용인 것 같네요. 이것은 여기까지 입니다. 워낙 대기오염과 관련된 내용이기 때문에 우리가 판단했을 때 결과적으로는 처음 부분의 미세먼지가 어느 정도인지 그것만 파악했을 때만 참고할 것 같고 밑에 있는 내용은 복잡한 수치적인 부분이 있기 때문에 이와 관련해서 전공 분들이나 잘 아시는 분들이 참고하는 용도로 사용하시면 될 것 같습니다. 오늘은 여기까지입니다.

from urllib.request import urlopen
from urllib.parse import urlencode, unquote, quote_plus
import urllib
import requests
import json
import pandas as pd
from datetime import datetime,timedelta
import warnings
import xmltodict # 결과가 xml 형식으로 반환된다. 이것을 dict 로 바꿔주는 라이브러리다

warnings.filterwarnings('ignore')

param = 'getCtprvnRltmMesureDnsty' 

# getCtprvnRltmMesureDnsty 시도명을 검색조건으로 하여 시도별 측정소목록에 대한 일반 항목과 CAI최종 실시간 측정값과 지수 정보 조회 기능을 제공하는 시도별 실시간 측정정보 조회

serviceKey = '' #API 키 입력
returnType = 'json'
numOfRows = '100'  #한 페이지 결과수
pageNo = 1 #페이지번호
sidoName = '전국' #시도 이름(전국, 서울, 부산, 대구, 인천, 광주, 대전, 울산, 경기, 강원, 충북, 충남, 전북, 전남, 경북, 경남, 제주, 세종)

url = 'http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/{}?serviceKey={}&returnType={}&numOfRows={}&pageNo={}&sidoName={}'.format(param, serviceKey, returnType, numOfRows, pageNo, sidoName)

#HTTPSConnectionPool(host='www.work.go.kr', port=443): Max retries exceeded with url 
# 오류 발견시 requests.get(url, verify=False) 로 넣어주면됨. 

response = requests.get(url, verify=False)
r_data = response.json()
r_data

try :
    data = pd.DataFrame(r_data['response']['body']['items'])
except :
    data = pd.DataFrame(r_data['response']['body']['items'], index=[0])  #데이터프레임으로 보자 

data
반응형

댓글