python을 활용하여 공공데이터 포털에 존재하는 Open API 형태의 데이터 불러오기
불러온 데이터를 테이블 데이터로 변환해주는 실습 진행 - !!
실습 데이터
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15028195
공공데이터 포털의 전국과속방지턱표준데이터를 활용해보았다
※ 일반 파일 데이터는 로그인 없이도 다운이 가능하지만, API 신청을 위해서는 로그인이 요구됨
실습전 API 활용신청을 해야하며, 개인마다 주어지는 API KEY값을 활용한다
공공데이터 포털에서 공개되는 API는 대부분 바로 자동 승인이 이루어진다!
활용신청
이렇게 승인처리된 데이터를 눌러주면 개인에게 주어진 인증키를 볼 수 있는 창으로 넘어가게 된다
그 안에서도 상세설명을 눌러주면 해당 데이터에 어떤 변수들이 존재하는지 확인할 수 있다
전국과속방지턱표준데이터에 존재하는 변수의 일부를 캡쳐해왔다
Python을 활용하여 Open API 불러오기
코드를 작성하기 앞서 불러올 형태에 따른 URL 형식을 알아보자
1) XML로 불러올 경우
http://api.data.go.kr/openapi/tn_pubr_public_ovrspd_prvn_manage_api?serviceKey=개인인증키&pageNo=1&numOfRows=100&type=xml
2) json으로 불러올 경우
http://api.data.go.kr/openapi/tn_pubr_public_ovrspd_prvn_manage_api?serviceKey=개인인증키&pageNo=1&numOfRows=100&type=json
End Point 주소 + 개인 인증키(serviceKey) + 페이지 시작(pageNo) + 한번에 출력되는 행 개수(numOfRows) + 불러올 타입(type) 의 순서로 url을 작성해준다
나는 json파일이 보다 익숙해서 아래의 url 형식으로 실습을 진행할 것이다
라이브러리 Import 및 url
## 필요한 라이브러리 임포트
import requests
import pprint
import json
url = "http://api.data.go.kr/openapi/tn_pubr_public_ovrspd_prvn_manage_api?serviceKey=개인인증키&pageNo=1&numOfRows=1000&type=json"
개인인증키에는 본인이 부여받은 인증키를 입력하면 된다
일반인증키 Encoding과 Decoding 두 가지가 주어지는데 보통은 두번째 인증키인 Decoding이 구동되는 것같다
하나씩 넣어보면 될 듯!
또한 총 1000개의 행을 출력하기 위해서 numOfRows=1000으로 입력했다
response = requests.get(url)
contents = response.text
## 보다 예쁘게 출력하기 위해..
## indent는 들여쓴다는 의미
pp = pprint.PrettyPrinter(indent=4)
print(pp.pprint(contents))
문자열 json파일로 변환
출력된 문자열을 json파일로 변환해주자
json_ob = json.loads(contents)
print(json_ob)
print(type(json_ob))
사진과 같이 데이터 타입이 dict 형태로 변환된 것을 볼 수 있다!
필요한 값만 가져오기
출력된 값을 자세히 살펴보면 response -> body -> body 속 items에 원하는 정보가 모두 포함된 것을 볼 수 있다
items의 내용만 출력해보자
body = json_ob['response']['body']['items']
print(body)
items에 있는 내용들만 추출되었다 !
추출된 값을 DataFrame으로
마지막으로 앞선 body함수에 저장된 내용을 pandas를 활용하여 DataFrame으로 만들어주자
import pandas as pd
from pandas.io.json import json_normalize
dataframe = json_normalize(body)
print(dataframe)
## dataframe으로 저장된 데이터 csv로 저장
dataframe.to_csv('과속방지턱.csv',index=False)
파일에 존재하는 전체 행 개수?
실습을 따라가다 numOfRows 를 활용하여 출력행 개수를 지정한다고 하는데,
그렇다면 파일 내에 존재하는 전체 행 개수는 어떻게 볼 수 있는지 궁금증이 생겼다
활용신청 상세기능정보의 미리보기를 통해서 해당 정보를 확인할 수 있다
해당 미리보기의 가장 아래 totalcount를 통해 내가 활용하는 과속방지턱은 총 19519행을 가지고 있음을 확인할 수 있었다 :)
이해만 제대로하면 생각보다 더 간단하고 쉽게, 또 짧은 코드로 불러올 수 있었던 Open API !!
'python > 파이썬 기초' 카테고리의 다른 글
[python 쌩기초] Numpy (0) | 2021.12.19 |
---|---|
[python 쌩기초] 함수 / 람다 (0) | 2021.12.17 |
[python 쌩기초] 조건문 / 반복문 (0) | 2021.12.17 |