본문 바로가기
재미로 하는 코딩

open API를 통해 코로나 감염현황을 알아보자

by 헬푸밍 2022. 12. 27.

코로나는 언제 끝날까요...?

마스크 쓰는 것이 너무 답답합니다... 귀여운 고양이가 마스크를 안쓰는 것처럼요...ㅋㅋㅋㅋ

오늘은 공공데이터포털https://www.data.go.kr/index.do

공공데이터 포털

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

www.data.go.kr

에서 제공하는 open API를 통해 코로나 감염현황을 알아보고자 합니다...

저는 '코로나' 키워드로 검색을 해 open api 2페이지에 있는
보건복지부_코로나19 감염현황 총괄 통계 데이터를 이용하기로 했습니다!

우선 사이트에 가입하시고 데이터 활용신청을 합시다.

저는 활용 목적을 이렇게 적었습니다.

여기까지는 떡먹고 눕기네여 ㅎㅎ


그런데 신청승인까지 시간이 좀 걸리는...

기다리다가 드디어... 승인완료!

이렇게 마이페이지에 오픈API 개발계정에서 데이터에 대한 인증키를 얻을 수 있습니다.

여기 샘플코드가 제공됩니다 ㅎㅎ 그럼 일단 데이터를 불러오자구요!

import requests

url = 'http://apis.data.go.kr/1352000/ODMS_COVID_02/callCovid02Api'
params ={'serviceKey' : '#####################################', #인증키
         'pageNo' : '1'
         , 'numOfRows' : '500',
         'apiType' : 'xml',
         'status_dt' : '20221227' } #기준일자

response = requests.get(url, params=params)
print(response.text)
print(type(response.text)) #reponse.text의 타입 확인

주의할 점은 인증키 오류가 많이 난다는 것... 하지만 참고 몇 번 다시 실행해 보면 데이터가 불러와집니다...

저는 기준일자를 오늘인 2022년 12월 27일로 가져왔습니다.

결과는...?

주요 지표를 표로 한 번 살펴보면...

항목명(영문) 항목명(국문) 데이터
accDefRate 누적확진율 0
accExamCnt 누적검사수 22072870
accExamCompCnt 누적검사완료수 0
careCnt 치료중환자수 0
dPntCnt 격리해제수 0
gPntCnt 사망자수 31882
hPntCnt 확진자수 28772196
resutlNegCnt 결과음성수 0
statusDt 기준일자 20221227
statusTime 기준시간 00:00
uPntCnt 검사중수 0

이런 식 입니다!

0으로 나오는 데이터가 이상해서 결과가 나오는 데이터만 검색해봤더니...

누적검사수, 사망자수, 확진자수는 이상이 없었습니다.

그래서 예전 날짜를 기준일자로 해봤더니 모든 데이터가 잘 나오더라고요!

아마 이 오픈api에서는 0으로 나온 데이터 항목들은 어느 시점 이후로는 제공하지 않는 듯 합니다...

그래도 우리는 오늘 현황을 알고 싶으니까 오늘의 데이터를 이용해봐요!

이제 우리가 할 일은 예쁘게 데이터를 출력해보는 것이겠죠?

데이터 형식을 보니 str이므로 사용하기 편하게 json형식으로 변환해 값을 꺼내와 봅시다.

!pip install xmltodict #xmltodict모듈을 사용하기위해 xmltodict패키지 설치
import requests
import xmltodict #xmltodict모듈 설치
import json #json모듈 설치

url = 'http://apis.data.go.kr/1352000/ODMS_COVID_02/callCovid02Api'
params ={'serviceKey' : '###################################################', #인증키
         'pageNo' : '1'
         , 'numOfRows' : '500',
         'apiType' : 'xml',
         'status_dt' : '20221227' } #기준일자

response = requests.get(url, params=params)

data_xml = response.text #xml형식의 데이터
data_json = json.dumps(xmltodict.parse(data_xml))
#xml데이터를 json형식으로 변환하기 위한 코드(xmltodict.parse의 괄호 안에 xml데이터를 집어넣어 json으로 변환)
data_json_fin = json.loads(data_json)
#키 값으로 접근하기 위한 코드

print(data_json_fin)
print(type(data_json_fin)) #데이터 형식 확인

결과가 이렇게 딕셔너리 형식으로 출력됩니다ㅎㅎ

이제 딕셔너리의 키값을 이용해 예쁘게 출력해봅시다.

저는 기준일자, 확진자수, 사망자수를 꺼내와서 확인하려고 합니다!

코드를 완성 시켜보면...

!pip install xmltodict #xmltodict모듈을 설치하기위해 xmltodict패키지 설치
import requests
import xmltodict #xmltodict모듈 설치
import json #json모듈 설치

url = 'http://apis.data.go.kr/1352000/ODMS_COVID_02/callCovid02Api'
params ={'serviceKey' : '###########################################################################', #인증키
         'pageNo' : '1'
         , 'numOfRows' : '500',
         'apiType' : 'xml',
         'status_dt' : '20221227' } #기준일자

response = requests.get(url, params=params)

data_xml = response.text #xml형식의 데이터
data_json = json.dumps(xmltodict.parse(data_xml))
#xml데이터를 json형식으로 변환하기 위한 코드(xmltodict.parse의 괄호 안에 xml데이터를 집어넣어 json으로 변환)
data_json_fin = json.loads(data_json)
#키 값으로 접근하기 위한 코드

print(data_json_fin['response']['body']['items']['item']['statusDt'][0:4]+'년',
      data_json_fin['response']['body']['items']['item']['statusDt'][4:6]+'월',
      data_json_fin['response']['body']['items']['item']['statusDt'][6:]+'일 기준 확진자수는',
      data_json_fin['response']['body']['items']['item']['hPntCnt']+'명 이고 그 중',
      data_json_fin['response']['body']['items']['item']['gPntCnt']+'명이 사망했습니다.')

이렇게 코드가 완성!

많은 사람이 돌아가셨군요...ㅜ

어서 빨리 코로나 이전의 세상으로 돌아갔으면 하는 마음입니다...

그럼 다음에 봐요~

댓글