Project27_대학교 위치 시각화

Song Chae Won·2023년 2월 17일
0
post-thumbnail

대학교 위치 시각화

원하는 대학교 위치를 folium이라는 지도시각화 라이브러리를 활용하여 지도에 표시하여 시각화

➕ 라이브러리 설치

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

pip install folium

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

pip install openxyl

📍판다스에서 학교명과 주소 찾는 코드 만들기

전국의 대학교 주소록 엑셀 파일 자료 받기

<고등교육기관 하반기 주소록(년도)>의 엑셀 파일을 열어보면 학교명 주소가 포함되어있음.

엑셀파일을 판다스에서 불러와 학교명과 주소를 찾는 코드

import pandas as pd

filePath = r'project27_University_Visualization\고등교육기관 하반기 주소록(2020).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)))

print(df_from_excel.head()) #데이터의 앞쪽만 몇 개 표시한다.

print(df_from_excel['학교명'].values) #학교명 데이터 출력

print(df_from_excel['주소'].values) # 주소 데이터 출력

모든 학교명과 주소가 출력된다!

📍 오픈API를 이용하여 주소를 좌표로 변환하는 코드 만들기

folium 라이브러리를 이용하여 지도에 표시하기 위해서는 주소가 아닌 좌표의 데이터가 필요하다. 우리는 주소 데이터만 가지고 있기에 주소를 좌표로 벼환해야 한다. 주소를 좌표로 변환하기 위해서는 나라에서 운영하는 오픈 API를 사용해야한다.

오픈 API 링크
https://www.vworld.kr/dev/v4dv_geocoderguide2_s001.do

여기서 인증키 발급받는 과정이 필요한데,
최대한 실제 서비스할 내용을 상세히 적는 것이 중요하다!
그럼 바로 인증키가 발급된다.

발급받은 인증키를 활용하여 주소를 좌표로 변환하는 코드

import requests

# API의 접속 내용
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 = 'F4A2453##############' # 발급받은 인증키


def request_geo(road): # 주소를 x,y 좌표로 반환해주는 함수, API에 접속하여 x,y부분만 분리하여 반환한다.
    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.945578678
y값 37.562650039

📍 [학교주소좌표.xlsx]의 엑셀 파일로 생성하는 코드

엑셀에서 읽은 학교명과 주소 데이터를 API를 통해 x,y 좌표로 변경된 값을 [학교주소좌표.xlsx]의 엑셀파일로 생성하는 코드

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


filePath = r'project27_University_Visualization\고등교육기관 하반기 주소록(2020).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"project27_University_Visualization\학교주소좌표.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"project27_University_Visualization\학교주소좌표.xlsx")

run 실행시키면, [학교주소좌표.xlsx] 엑셀 파일이 생성

📍 특정 학교의 위치에 마커를 표시하는 코드 만들기

folium을 이용하여 이화여자대학교의 위치에 마커를 표시하는 프로그램을 만들어보자.

import folium

map = folium.Map(location=[37, 127], zoom_start=7)
# zoom_start=7는 지도의 배율

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

marker.add_to(map)

map.save(r'project27_University_Visualization/uni_map.html')

[uni_map.html] 파일을 크롬 브라우저를 통해 열면 지도에 초록색 마커가 표시된 것을 확인할 수 있다.

profile
@chhaewxn

0개의 댓글