데이터 수집 및 시각화

조용민·2024년 5월 30일
post-thumbnail

<경기데이터드림에서 제공하는 OpenAPI를 이용해서 데이터를 수집 및 시각화>

URL : https://data.gg.go.kr/
데이터셋 : 경기도 공공배달앱 배달특급 가맹점 [이동하기]
OpenAPI를 사용하기 위한 KEY발급 [KEY발급 방법]

Language : Python
Tool : Anaconda Spyder
Lib : cx_Oracle, requests, json, math, folium

#1 DB연결 및 API 설정

cx_Oracle : Oracle 데이터 베이스와의 연결 및 상호작용을 위한 라이브러리
requests : HTTP 요청을 보내기 위한 라이브러리
json : JSON 데이터를 파싱하고 생성하기 위한 라이브러리
math : 수학 함수들을 제공하는 라이브러리로, 페이지 수를 계산하는데 사용

*필자는 Python에 cx_Oracle 설치중에 아래와 같은 에러가 발생해 공유한다.
(ERROR: Failed building wheel for cx_oracle) Python cx_Oracle 설치 에러

#2 데이터 개수 확인 및 페이지 수 계산

API 요청을 보내고, API 응답의 binray_data를 가져오고 데이터를 JSON형식으로 변환한다. 전체 데이터 개수를 기반으로 최대 페이지 수를 계산한다. 한 페이지당 100개 항목을 가져온다.

#3-1 모든 페이지에 대한 데이터 요청 후 삽입

전체 페이지 수 만큼 반복. 각 페이지에 대해 API 요청을 보내고,
데이터를 받아 JSON 형식으로 파싱한다.
json_data 에서 각 레코드를 돌며 필요한 데이터를 추출한다.
SQL문을 실행하여 데이터베이스에 데이터를 삽입한다.
예외처리를 통해 DB에 삽입 중 오류가 발생하면 롤백하고, 오류 메세지 출력.

#3-2 파싱한 데이터를 DB에 삽입한 결과

#4 지도 마크업, HTML파일 저장

foulium.Map 을 사용하여 기본 지도를 생성. location 매개변수는 초기 지도의 중심
위치를 설정함. 생성된 지도를 HTML 파일로 저장한다.

사용자로부터 시군을 입력받고, 입력된 시군에 해당하는 가게 정보를 DB에서 가져온다.

쿼리 결과를 순회하며 각 가게의 위치를 지도에 마커로 표시함. 위도와 경도가 유효한지
확인하고, 유효할 경우 folium을 사용하여 해당 위치를 추가한다.

생성된 지도를 HTML 파일로 저장하고, 파일의 경로를 출력하여 사용자에게 알려준다.
DB연결을 닫으며 종료한다.

#5 결과 및 후기


중간에 어려움이 있었지만, 잘 해결하고, 잘 마무리해서 뿌듯하다.
이전에 학습했던 내용을 복습하고 미니 프로젝트까지 진행해보았다.
즐겁게 공부했지만, 아직 많~~이 부족하다 느낀다. 화이팅~

0개의 댓글