본문 바로가기
Python

[파이썬] 공공 데이터 포털 API 코로나19 감염 현황 조회

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

오늘은 공공데이터포털 여러분들이 많이 쓰시죠? 쓰게된 지 얼마 안 됐죠? 2018년도 즈음에 생겼겠지만 공공데이터포털 측의 api를 기준으로 코로나 감염 현황 조회를 한 번 알아보려고 합니다. 좋은 점이 여러 가지가 있습니다.대충 보시면 아시겠지만 하루마다 여기서 발표하는 곳이 여기가 어디였는지 보건복지부입니다.

 

[파이썬] 공공 데이터 포털 API 코로나19 감염 현황 조회

공공 데이터 포털 API 코로나19 감염 현황 조회 서비스 API 키 발급

그래서 오전마다 코로나19 확진자 수의 사망자 수가 어느 정도인지 그걸 오전 9시 기준으로 계속 발표를 합니다. 나오는 기준치를 보는데 그걸 파이톤으로 보는 방법에 대해서 설명해 놨어요. 첫째, 공공데이터포털 api 코로나19 감염상황과 관련하여 이 서비스를 보시려면 apik을 가장 먼저 발급하셔야 합니다. 밑에 사이트가 있으니까. 거기서 발행해 주셨으면 합니다.그리고 가장 중요한 아래에 감염 상황 조회를 볼 수 있는 파이톤 코딩이 아래에 있는데 이걸 보니까 제가 어떤 다른 분의 것을 클론코딩을 했습니다. 복잡한 부분이 많이는 없어요. 

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

 

공공데이터활용지원센터_보건복지부 코로나19 감염 현황

코로나19감염증으로 인한 일별 확진자,완치자,지료중인환자,사망자등에 대한 현황자료(이 제공자료는 관련 발생 상황에 대한 정보를 신속 투명하게 공개하기 위한 것으로, 추가적인 역학조사

www.data.go.kr

 

파이썬 공공 데이터 포털 API 코로나19 감염 현황 조회 

오늘 날짜와 어제 날짜를 기준으로 나왔고, 이를 바탕으로 최신 날짜 기준으로 확진자 수와 사망자 수를 볼 수 있도록 나온 코딩입니다. 보시면 그렇게 큰 데이터가 아닙니다. 거의 여러분이 네이버에서 검색해서 보는 수준의 데이터이기 때문에 완전히 실시간으로 보는 그런 데이터가 아니라 하루 날짜 기준으로 신규 확진자가 어느 정도인지 그걸 대충 추측해서 보는 데이터라고 보시면 될 것 같습니다. 아래쪽에 보시면 api키를 입력하는 곳이 있습니다. 그 안에 위 url에서 인증키만 발급받고 키만 입력하고 엔터만 입력하면 바로 데이터가 나오니까요. 도움이 되었으면 좋겠습니다. 이상이에요.

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 xmltodict # 결과가 xml 형식으로 반환된다. 이것을 dict 로 바꿔주는 라이브러리다


# 어제 날짜와 오늘날짜를 구하기 위해서  datetime과 timedelta를 사용
yester = datetime.today() - timedelta(1)
yseter =  yester.strftime("%Y%m%d")
now_today = datetime.today().strftime("%Y%m%d")


my_api_key = '' # API키 입력

# 서비스 url 주소
url = 'http://openapi.data.go.kr/openapi/service/rest/Covid19/getCovid19InfStateJson'

# 서비스에 필요한 파라미터 모음
queryParams = '?' + \
'ServiceKey=' + '{}'.format(my_api_key) + \
'&pageNo='+ '1' + \
'&numOfRows='+ '999' + \
'&startCreateDt={}&endCreateDt={}'.format(yseter,now_today)

#서비스url에 필요한 파라미터들을 붙여서 응답결과를 얻음.
result = requests.get(url + queryParams)

# 응답결과 파싱하기. ( 사용자가 원하는 형태로 변경)
# 응답 key 값이 영문화 되어 식별이 어려워 openAPI 문서를 참고하여
# replayce 를 통해 결과를 한글화 했다.

result = result.content 
jsonString = json.dumps(xmltodict.parse(result), indent = 4)
jsonString = jsonString.replace('resultCode', '결과코드').replace('resultMsg', '결과메세지').replace('numOfRows', '한 페이지 결과 수').replace('pageNo', '페이지 수').replace('totalCount', '전체 결과 수').replace('seq', '게시글번호(감염현황 고유값)').replace('stateDt', '기준일').replace('stateTime', '기준시간').replace('decideCnt', '확진자 수').replace('clearCnt', '격리해제 수').replace('examCnt', '검사진행 수').replace('deathCnt', '사망자 수').replace('careCnt', '치료중 환자 수').replace('resutlNegCnt', '결과 음성 수').replace('accExamCnt', '누적 검사 수').replace('accExamCompCnt', '누적 검사 완료 수').replace('accDefRate', '누적 환진률').replace('createDt', '등록일시분초').replace('updateDt', '수정일시분초')

js = json.loads(jsonString)
# 파싱한 전체 결과 보기.
#print(js)
#js_check_count = js["response"]['body']['items']['item'][0]['검사진행 수']
js = js["response"]['body']['items']['item']
pdata = pd.DataFrame(js)
pdata
반응형

댓글