전국의 대학교 위치를 folium 라이브러리를 활용하여 지도에 표시해 시각화하기
지도를 시각화할 수 있는 라이브러리
엑셀을 사용하기 위한 라이브러리
응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
(어플리케이션에서 데이터를 읽거나 쓰기 위해 사용하는 인터페이스)
기업, 개인이 가지고 있고 공개되지 않은 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
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] 파일을 크롬에서 열면 엑셀 파일에 있는 모든 대학교의 주소에 마커가 표시된 것을 확인할 수 있다.