미니프로젝트에 했던 나만 보고 버리기 아까운 내용을 기록하기 위해 정리한 내용입니다. 자세한 내용을 적을 수 없어 간단하게 정리하며 소감 위주로 적은 글임을 알립니다.
🧐미니프로젝트란?
미니프로젝트(일명 미프!)는 지난 섹션에서 배운 내용들을 복습하는 차원에서 조별로 함께 실습하는 시간입니다.
(KT 교육장에서 사람들과 함께 대면할 수 있는 시간이기도 합니다.)
5차에서는 데이터기반 DX솔루션 기획을 주제로 진행하였습니다.
사실상 STEP1 데이터 분석 DX 기획에서 배웠던 내용들을 종합적으로 진행해봤던 빅프로젝트 예행 연습이라고 할 수 있을 것 같습니다.
주제
119 구급대원이 응급 상황에서 환자의 상태에 맞는 병원을 실시간으로 선정할 수 있도록 돕는 DX 솔루션 기획.
최근 응급실 환자 수용 거부로 인한 이송 문제를 해소하기 위해, 병원의 실시간 응급실 및 수술실 현황 분석을 기반으로 병원 선정 및 이송 문제를 자동화함으로써 해결할 수 있다.
5차 미니프로젝트의 일정을 정리하자면 이렇습니다.
1일차) 데이터 수집 👈
2일차) 데이터 분석 및 모델링
3일차) 프로토타입 개발
4일차) 대시보드 개발
이번 프로젝트는 공공데이터포털에서 제공해주는 API로 데이터를 수집하였습니다.
수집에 사용한 API는 국립중앙의료원에서 제공하는 전국 응급의료기관 정보 조회 서비스입니다.
병원의 실시간 응급실 및 수술실 정보를 수집하기 위해서는
공공데이터포털에서 API를 사용하기 위해서는 활용신청
을 해야 합니다.
활용신청을 하면 아래와 같은 인증키를 받을 수 있습니다. 해당 API에서는 인코딩된 인증키를 사용하기 때문에 키를 복사해두어야 API를 사용할 수 있습니다.
API를 호출하여 데이터를 수집하기 위해서는 해당 API가 어떠한 파라미터를 필요로 하는지 확인해야 합니다.
관련 정보는 상세기능정보
의 요청변수를 보면 알 수 있습니다.
제공되는 파라미터를 본인이 얻고자 하는 값에 맞게 변형하게 요청하면 해당 데이터를 수집할 수 있는 것입니다. 그래서 파라미터 값이 어떤 것이 있고 어떻게 입력을 해야 데이터를 수집해야 하는지 알아야 합니다.
항목구분에 따라 필수(1)이면 반드시 넣어야하는 파라미터, 옵션(0)이면 필요에 따라 넣어야 하는 파라미터로 이해하면 됩니다.
데이터 수집을 위해 요청되는 URL은 API URL과 사용자 인증키, 파라미터로 구성됩니다.
URL과 사용자 인증키는
?
로 연결되고 키와 나머지 파라미터는&
로 연결됩니다.
이런식으로 URL을 생성하여 요청해주면 됩니다. 해당 코드는 예시코드입니다.
import requests
## url
# 응급의료기관 목록정보
url = 'https://apis.data.go.kr/B552657/ErmctInfoInqireService/getEgytListInfoInqire'
## 파라미터
params ={'serviceKey' : '서비스키',
'Q0' : '서울특별시',
'Q1' : '강남구',
'QT' : '1',
'QZ' : 'A',
'QD' : 'D000',
'QN' : '(사)삼성생명공익재단 삼성서울병원',
'ORD' : 'NAME',
'pageNo' : '1',
'numOfRows' : '10' }
# 요청
response = requests.get(url, params=params)
print(response.content)
본 API는 XML로 호출 결과를 제공하기 때문에 이를 사용하기 위해서는 데이터프레임으로 변환해주는 과정이 필요합니다.
파이썬에서는 pandas
의 read_xml()
을 사용하여 변환할 수 있습니다.
response에 응답받은 텍스트 데이터를 변환해주는 과정이라고 이해하면 쉬울 것 같습니다.
df = pd.read_xml(response.text, xpath='//item')
df.head()
이런식으로 필요한 데이터를 수집하여 가공하는 작업을 통해 분석에 필요한 데이터를 구성하였습니다.
* 하나의 API를 활용해 수집하는 방법을 알면 동일하게 적용해 다른 API로도 데이터를 쉽게 수집할 수 있습니다.
1일차는 지난 데이터 크롤링 시간에 배웠던 API를 활용하여 데이터를 수집하는 방법을 실습할 수 있었던 시간이었다.
사실 아직 XML 파일 형식이 어떻고 requests
패키지로 요청했을 때 응답결과가 어떻게 생겼는지를 잘 알지는 못하겠다. 그렇지만 API 를 활용해서 필요한 데이터를 수집하는 방법에 대해서는 확실하게 이해한 것 같다.😊