PROJECT 27_전국의 대학교 위치 시각화하기

김리나·2023년 2월 17일
0

전국의 대학교 위치를 folium 라이브러리를 활용하여 지도에 표시해 시각화하기

  • folium 라이브러리 설치

    지도를 시각화할 수 있는 라이브러리

  • openpyxl 라이브러리 설치

    엑셀을 사용하기 위한 라이브러리

  • API란? (Application Programming Interface)

    응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

    (어플리케이션에서 데이터를 읽거나 쓰기 위해 사용하는 인터페이스)

  • 프라이빗 API

    기업, 개인이 가지고 있고 공개되지 않은 API

  • 퍼블릭(오픈) API

    누구나 사용 가능하도록 개방 -> 유튜브, 카카오, 네이버, 기상청 등

  • 공간 정보 오픈 API 이용 신청

    파이썬 코드에서는 발급받은 인증키를 복사하여 사용한다.
  • 주소를 좌표로 변환하는 코드

import requests

url = 'http://api.vworld.kr/req/address?'
params = 'service=address&request=getcoord&version=2.0&crs=epsg:4326&refine=true&simple=false&format=json&type='
road_type = 'ROAD'  # 도로명주소
road_type2 = 'PARCEL'  # 지번주소
address = '&address='
keys = '&key='
primary_key = '발급받은 인증키'


def request_geo(road):
    page = requests.get(url+params+road_type+address+road+keys+primary_key)
    json_data = page.json()
    if json_data['response']['status'] == 'OK':
        x = json_data['response']['result']['point']['x']
        y = json_data['response']['result']['point']['y']
        return x,y
    else:
        x = 0
        y = 0
        return x,y


x, y = request_geo("서울특별시 서대문구 이화여대길 52 (대현동, 이화여자대학교)")

print(f'x값: {x}')
print(f'y값: {y}')
  • 결과

    x, y 좌표가 출력된다

    x값: 126.944695670
    y값: 37.560311827

  • x,y 좌표로 변경하고 변경된 값을 엑셀 파일로 생성

import pandas as pd
import requests
from openpyxl import load_workbook
from openpyxl import Workbook
import re


filePath = r'27. 전국의 대학교 위치 시각화하기\고등교육기관 하반기 주소록(2022).xlsx'
df_from_excel = pd.read_excel(filePath, engine='openpyxl')
df_from_excel.columns = df_from_excel.loc[4].tolist()
df_from_excel = df_from_excel.drop(index=list(range(0,5)))


url = 'http://api.vworld.kr/req/address?'
params = 'service=address&request=getcoord&version=2.0&crs=epsg:4326&refine=true&simple=-false&format=json&type='
road_type = 'ROAD'
road_type2 = 'PARCEL'
address = '&address='
keys = '&key='
primary_key = '발급받은 인증키'

def request_geo(road):
    page=requests.get(url+params+road_type+address+road+keys+primary_key)
    json_data = page.json()
    if json_data['response']['status'] == 'OK':
        x = json_data['response']['result']['point']['x']
        y = json_data['response']['result']['point']['y']
        return x,y
    else:
        x = 0
        y = 0
        return x,y
    

try:
    wb = load_workbook(r"27. 전국의 대학교 위치 시각화하기\학교주소좌표.xlsx", data_only=True)
    sheet = wb.active
except:
    wb = Workbook()
    sheet = wb.active

university_list = df_from_excel['학교명'].to_list()
address_list = df_from_excel['주소'].to_list()

for num,value in enumerate(address_list):
    addr = re.sub(r'\([^)]*\)', '', value)
    print(addr)
    x,y = request_geo(addr)
    sheet.append([university_list[num],addr,x,y])

wb.save(r"27. 전국의 대학교 위치 시각화하기\학교주소좌표.xlsx")

다음 코드를 실행시키면 [학교주소좌표.xlsx] 엑셀 파일이 생성된다.

  • 특정 학교의 위치에 마커를 표시하는 코드

import folium

map = folium.Map(location=[37,126],zoom_start=7)

marker = folium.Marker([37.560311827, 126.944695670], 
                       popup='이화여자대학교', 
                       icon = folium.Icon(color='green'))

marker.add_to(map)

map.save(r'27. 전국의 대학교 위치 시각화하기\map_ewha.html')

[map_ewha.html] 파일을 크롬에서 열면 지도에 마커와 이름이 표시된 것을 확인할 수 있다.

  • 모든 대학교의 주소에 마커를 표시하는 코드

import pandas as pd
import folium

filePath = r'27. 전국의 대학교 위치 시각화하기\학교주소좌표.xlsx'
df_from_excel = pd.read_excel(filePath, engine='openpyxl', header=None)

df_from_excel.columns = ['학교이름','주소','x','y']

name_list = df_from_excel['학교이름'].to_list()
addr_list = df_from_excel['주소'].to_list()
position_x_list = df_from_excel['x'].to_list()
position_y_list = df_from_excel['y'].to_list()

map = folium.Map(location=[37,127],zoom_start=7)

for i in range(len(name_list)):
    if position_x_list[i] != 0:
        marker = folium.Market([position_y_list[i], position_x_list[i]],
                               popup=name_list[i],
                               icon = folium.Icon(color='green'))
        marker.add_to(map)

map.save(r'27. 전국의 대학교 위치 시각화하기/map_uni.html')

[map_uni.html] 파일을 크롬에서 열면 엑셀 파일에 있는 모든 대학교의 주소에 마커가 표시된 것을 확인할 수 있다.

0개의 댓글