[미니프로젝트] 5번째 1일차 API로 공공데이터 수집하기

박선영·2023년 11월 3일
1

[KT AIVLE SCHOOL]

목록 보기
2/8
post-thumbnail

👋에필로그

미니프로젝트에 했던 나만 보고 버리기 아까운 내용을 기록하기 위해 정리한 내용입니다. 자세한 내용을 적을 수 없어 간단하게 정리하며 소감 위주로 적은 글임을 알립니다.

🧐미니프로젝트란?

미니프로젝트(일명 미프!)는 지난 섹션에서 배운 내용들을 복습하는 차원에서 조별로 함께 실습하는 시간입니다.
(KT 교육장에서 사람들과 함께 대면할 수 있는 시간이기도 합니다.)


📚5차 미니프로젝트

5차에서는 데이터기반 DX솔루션 기획을 주제로 진행하였습니다.
사실상 STEP1 데이터 분석 DX 기획에서 배웠던 내용들을 종합적으로 진행해봤던 빅프로젝트 예행 연습이라고 할 수 있을 것 같습니다.

  • DX 솔루션 개요서를 통해 고객의 문제에 대한 정의를 하고,
  • 데이터 분석을 통해 정보를 제공하고
  • DX 솔루션 프로토타입을 통해 고객 관점의 UI를 구성해 볼 수 있습니다.

주제

119 구급대원이 응급 상황에서 환자의 상태에 맞는 병원을 실시간으로 선정할 수 있도록 돕는 DX 솔루션 기획.

최근 응급실 환자 수용 거부로 인한 이송 문제를 해소하기 위해, 병원의 실시간 응급실 및 수술실 현황 분석을 기반으로 병원 선정 및 이송 문제를 자동화함으로써 해결할 수 있다.

5차 미니프로젝트의 일정을 정리하자면 이렇습니다.

1일차) 데이터 수집 👈
2일차) 데이터 분석 및 모델링
3일차) 프로토타입 개발
4일차) 대시보드 개발


DAY1 _ 데이터 수집

이번 프로젝트는 공공데이터포털에서 제공해주는 API로 데이터를 수집하였습니다.

📋공공데이터포털 API

수집에 사용한 API는 국립중앙의료원에서 제공하는 전국 응급의료기관 정보 조회 서비스입니다.

병원의 실시간 응급실 및 수술실 정보를 수집하기 위해서는

  • 응급의료기관 목록정보를 수집하고,
  • 응급의료기관 기본정보로 응급실, 수술실 정보를 수집하고,
  • 응급실 실시간 가용병상정보로 실시간 응급실, 수술실 정보를 수집하고,
  • 중증질환자 수용가능정보를 수집해야 합니다.

공공데이터포털에서 API를 사용하기 위해서는 활용신청을 해야 합니다.

활용신청을 하면 아래와 같은 인증키를 받을 수 있습니다. 해당 API에서는 인코딩된 인증키를 사용하기 때문에 키를 복사해두어야 API를 사용할 수 있습니다.

📋API 이해하기

API를 호출하여 데이터를 수집하기 위해서는 해당 API가 어떠한 파라미터를 필요로 하는지 확인해야 합니다.

관련 정보는 상세기능정보의 요청변수를 보면 알 수 있습니다.


제공되는 파라미터를 본인이 얻고자 하는 값에 맞게 변형하게 요청하면 해당 데이터를 수집할 수 있는 것입니다. 그래서 파라미터 값이 어떤 것이 있고 어떻게 입력을 해야 데이터를 수집해야 하는지 알아야 합니다.

항목구분에 따라 필수(1)이면 반드시 넣어야하는 파라미터, 옵션(0)이면 필요에 따라 넣어야 하는 파라미터로 이해하면 됩니다.

📋API 호출하기

데이터 수집을 위해 요청되는 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로 호출 결과를 제공하기 때문에 이를 사용하기 위해서는 데이터프레임으로 변환해주는 과정이 필요합니다.

파이썬에서는 pandasread_xml()을 사용하여 변환할 수 있습니다.
response에 응답받은 텍스트 데이터를 변환해주는 과정이라고 이해하면 쉬울 것 같습니다.

df = pd.read_xml(response.text, xpath='//item')
df.head()

이런식으로 필요한 데이터를 수집하여 가공하는 작업을 통해 분석에 필요한 데이터를 구성하였습니다.

* 하나의 API를 활용해 수집하는 방법을 알면 동일하게 적용해 다른 API로도 데이터를 쉽게 수집할 수 있습니다.


📝소감

1일차는 지난 데이터 크롤링 시간에 배웠던 API를 활용하여 데이터를 수집하는 방법을 실습할 수 있었던 시간이었다.

사실 아직 XML 파일 형식이 어떻고 requests 패키지로 요청했을 때 응답결과가 어떻게 생겼는지를 잘 알지는 못하겠다. 그렇지만 API 를 활용해서 필요한 데이터를 수집하는 방법에 대해서는 확실하게 이해한 것 같다.😊

profile
데이터를 만지는 사람

0개의 댓글