beeimp
BeeImp
beeimp
전체 방문자
오늘
어제
  • 분류 전체보기 (110)
    • Program_Language (17)
      • Python (13)
      • Go (0)
      • JavaScript (4)
      • TypeScript (0)
      • Rust (0)
      • Solidity (0)
    • OS (8)
      • UNIX&LINUX (7)
      • Windows (0)
      • MacOS (1)
    • Front-End (19)
      • Svelte (19)
      • React (0)
    • Blockchain (6)
      • Bitcoin (0)
      • Ethereum (1)
      • Klaytn (0)
      • Project (5)
    • Data Structure&Algorithm (11)
      • Greedy (7)
      • Dynamic Programming (1)
      • Sort (0)
      • DFS & BFS (2)
      • Recursive (1)
    • Security (0)
      • SDP (0)
      • Authentication (0)
    • Network (3)
      • OpenWrt (0)
      • SDN&NFV (1)
    • Git (5)
    • IT_News (0)
    • 베타 학습단 (12)
      • SQL (12)
    • Project (1)
    • Issues (1)
    • Reviews (3)
    • I Learned (23)
      • TIL (23)
      • WIL (0)
    • Other (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • github
  • 기초
  • solidity
  • 탐욕법
  • mysql
  • 블록체인
  • blockchain
  • ubuntu
  • Docker
  • Git
  • sql
  • greedy
  • javascript
  • react
  • svelte
  • typescript
  • Nest.js
  • PYTHON
  • jenkins
  • Ethereum

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
beeimp

BeeImp

Program_Language/Python

공공데이터를 활용한 제주도 AED 설치위치 지도 표시

2022. 1. 20. 00:00

공공데이터를 활용한 제주도 AED 설치위치 지도 표시

필요 모듈 설치 및 가져오기

!pip install folium
!pip install requests
!pip install python-dotenv

import requests # 요청 모듈 - 설치 필요
import json, xmltodict # 형식 모듈
import pandas as pd # 데이터프레임(엑셀과 유사) 모듈
import folium # 지도 모듈 - 설치 필요
import time #시간 모듈
import os, dotenv

dotenv.load_dotenv()
Requirement already satisfied: folium in k:\programdata\anaconda3\lib\site-packages (0.12.1.post1)
Requirement already satisfied: jinja2>=2.9 in k:\programdata\anaconda3\lib\site-packages (from folium) (2.11.2)
Requirement already satisfied: branca>=0.3.0 in k:\programdata\anaconda3\lib\site-packages (from folium) (0.4.2)
Requirement already satisfied: numpy in k:\programdata\anaconda3\lib\site-packages (from folium) (1.19.5)
Requirement already satisfied: requests in k:\programdata\anaconda3\lib\site-packages (from folium) (2.24.0)
Requirement already satisfied: MarkupSafe>=0.23 in k:\programdata\anaconda3\lib\site-packages (from jinja2>=2.9->folium) (1.1.1)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in k:\programdata\anaconda3\lib\site-packages (from requests->folium) (1.25.9)
Requirement already satisfied: certifi>=2017.4.17 in k:\programdata\anaconda3\lib\site-packages (from requests->folium) (2020.6.20)
Requirement already satisfied: idna<3,>=2.5 in k:\programdata\anaconda3\lib\site-packages (from requests->folium) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in k:\programdata\anaconda3\lib\site-packages (from requests->folium) (3.0.4)
Requirement already satisfied: requests in k:\programdata\anaconda3\lib\site-packages (2.24.0)
Requirement already satisfied: certifi>=2017.4.17 in k:\programdata\anaconda3\lib\site-packages (from requests) (2020.6.20)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in k:\programdata\anaconda3\lib\site-packages (from requests) (1.25.9)
Requirement already satisfied: chardet<4,>=3.0.2 in k:\programdata\anaconda3\lib\site-packages (from requests) (3.0.4)
Requirement already satisfied: idna<3,>=2.5 in k:\programdata\anaconda3\lib\site-packages (from requests) (2.10)
Requirement already satisfied: python-dotenv in k:\programdata\anaconda3\lib\site-packages (0.19.2)

데이터 수집

url = "http://apis.data.go.kr/B552657/AEDInfoInqireService/getEgytAedManageInfoInqire"
key = os.environ.get("AED_DATA_KEY") # 공공데이터에서 발급받은 키

aed_data_list = []

start, data_length = 0, 1

province = '제주특별자치도'
# 데이터 요청
for city in ['서귀포시', '제주시']:
    flag = False
    for i in range(1, 11): # 100 * 10 개의 데이터 조회
        # 중복 제거
        while len(aed_data_list) > data_length:
            # 중복이 발생한다면 반복문 중지
            if aed_data_list[start]['buildAddress'] == aed_data_list[data_length]['buildAddress']:
                flag = True
                break
            data_length += 1
        if flag: # 중복에 대한 flag가 True일 경우 중복 없는 List를 반환 후 반복문 중지
            aed_data_list = aed_data_list[:data_length]
            break

        # 파라미터 설정
        params = {
            'servicekey' : key, 
            'Q0': province,
            'Q1': city,'pageNo':f'{i}',
            'numOfRows':'100'}
        # 데이터 GET 요청
        response = requests.get(url, params=params)
        time.sleep(0.5) # 0.5초 쉬었다가 다시 시작 (오류 방지)

        json_string = json.dumps(xmltodict.parse(response.content), ensure_ascii=False) # xml에서 json 문자열 형식으로 변환

        aed_data_dict = json.loads(json_string) # json 문자열에서 딕셔너리 형식으로 변환


        if 'response' in aed_data_dict.keys(): # 응답이 있다면
            if aed_data_dict['response']['body']['items'] is not None: # 아이템이 있다면
                aed_data_list += aed_data_dict['response']['body']['items']['item']


    # 다음 city의 비교를 위함
    start = data_length
    data_length = start + 1

aed_data = pd.DataFrame(aed_data_list) # 데이터를 데이터프레임으로 반환 후 저장

데이터 처리

# 컬럼명 변경
columns = {
"buildAddress"    :    "설치기관주소",
"buildPlace"    :    "설치위치",
"clerkTel"        :    "설치기관전화번호",
"manager"        :    "관리책임자명",
"managerTel"    :    "관리자연락처",
"mfg"            :    "제조사",
"model"            :    "AED모델명",
"org"            :    "설치기관명",
"wgs84Lat"        :    "위도",
"wgs84Lon"        :    "경도",
"zipcode1"        :    "우편번호(앞자리)",
"zipcode2"        :    "우편번호(뒷자리)"
}
aed_data.rename(columns=columns, inplace=True)


지도 표시

# 제주도 중앙 표시
g_map = folium.Map(location=[33.38800653178708, 126.55288068647766], zoom_start=10)

# AED 설치 위치에 마커 표시
for lat, lon, installation_location in zip(aed_data['위도'], aed_data['경도'], aed_data['설치위치']):
    marker = folium.Marker(location=[lat, lon], popup=installation_location, icon=folium.Icon('red'))
    marker.add_to(g_map)

# 해당 소스코드 위치에 html파일 저장
g_map.save('./map.html')

g_map
Make this Notebook Trusted to load map: File -> Trust Notebook

'Program_Language > Python' 카테고리의 다른 글

[Python Algorithm Interview] 02. 빅오, 자료형  (0) 2022.06.08
[Python Algorithm Interview] 01. 파이썬 언어  (0) 2022.06.07
[Python 기초] 08_파일  (0) 2021.08.17
[Python 기초] 07_딕셔너리  (0) 2021.08.16
[Python 기초] 06_함수  (0) 2021.08.15
    'Program_Language/Python' 카테고리의 다른 글
    • [Python Algorithm Interview] 02. 빅오, 자료형
    • [Python Algorithm Interview] 01. 파이썬 언어
    • [Python 기초] 08_파일
    • [Python 기초] 07_딕셔너리

    티스토리툴바