[Python] - 공공 API 데이터 호출하고 엑셀파일로 만들기

공공 API 활용하기

 
  • 필요한 라이브러리 import
In [5]:
# import library
import requests, xmltodict, json
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
  • URL 작성 및 요청
In [7]:
url = 'http://openapi.data.go.kr/openapi/service/rest/Covid19/getCovid19SidoInfStateJson?serviceKey=YNeaX1XgA%2BRIzGp1lEkTr00tgeUPCaTqxgrpRVXFj8CmfK0w6u6sSLLuHkgk4qR2MjJc6CKYScJVbKgOU6PdbQ%3D%3D&pageNo=1&numOfRows=10&startCreateDt=20200110&endCreateDt=20200810&'
res = requests.get(url)
 
  • 파싱 및 변수명 재설정
In [11]:
dict_res = xmltodict.parse(res.content)
json_string = json.dumps(dict_res['response']['body']['items'], ensure_ascii=False)

jsonObj = json.loads(json_string)
df = pd.DataFrame(jsonObj['item'])
df.columns = ['등록일시분초', '사망자수','확진자수','시도명','시도명(중국)','시도명(영어)','전일대비증감수','격리해제수','격리중인환자수',
              '지역발생수','해외유입수','10만명당발생률','게시글번호','기준일시','수정일시분초']
df
Out[11]:
  등록일시분초 사망자수 확진자수 시도명 시도명(중국) 시도명(영어) 전일대비증감수 격리해제수 격리중인환자수 지역발생수 해외유입수 10만명당발생률 게시글번호 기준일시 수정일시분초
0 2020-08-10 10:50:13.898 0 1272 검역 隔離區 Lazaretto 6 1075 197 0 6 - 3636 2020년 08월 10일 00시 null
1 2020-08-10 10:50:13.898 0 26 제주 济州 Jeju 0 22 4 0 0 3.88 3635 2020년 08월 10일 00시 null
2 2020-08-10 10:50:13.898 0 166 경남 庆南 Gyeongsangnam-do 0 157 9 0 0 4.94 3634 2020년 08월 10일 00시 null
3 2020-08-10 10:50:13.897 54 1411 경북 庆北 Gyeongsangbuk-do 1 1342 15 0 1 53.00 3633 2020년 08월 10일 00시 null
4 2020-08-10 10:50:13.897 0 42 전남 全南 Jeollanam-do 1 27 15 0 1 2.25 3632 2020년 08월 10일 00시 null
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
3232 2020-03-02 19:27:57.57 0 NaN 인천 None None 0 NaN NaN NaN NaN None 5 2020년 3월 1일 16시 None
3233 2020-03-02 19:27:57.57 9 NaN 대구 None None 469 NaN NaN NaN NaN None 4 2020년 3월 1일 16시 None
3234 2020-03-02 19:27:57.57 0 NaN 부산 None None 3 NaN NaN NaN NaN None 3 2020년 3월 1일 16시 None
3235 2020-03-02 19:27:57.57 0 NaN 서울 None None 10 NaN NaN NaN NaN None 2 2020년 3월 1일 16시 None
3236 2020-03-02 19:27:57.57 18 NaN 합계 None None 586 NaN NaN NaN NaN None 1 2020년 3월 1일 16시 None

3237 rows × 15 columns

 
  • 엑셀파일(csv)로 내보내기
In [10]:
df.to_csv('코로나 공공데이터.csv', index= False)