본문 바로가기

대외활동/ABC 지역주도형 청년 취업역량강화 ESG 지원산업

[ABC 220906 - 16일차] 오전 실습 과제

반응형

<과제>

내 위치와 가장 가까운 의료기관 찾기, 단 영업중인 병원만 검색되도록 하자.

내 위치는 도로명 주소로 입력받고 가장 가까운 의료기관은 5개만 찾아서 지도에 시각화하자

내 위치 마커와 병원 마커를 표시하고 병원 마커를 클릭하면 병원명이 나오도록 시각화.

 

# 라이브러리 임포트
import folium
from geopy.geocoders import Nominatim
from geopy.distance import geodesic

# 데이터 준비하기
df = pd.read_csv('/content/data.csv', encoding='EUC-KR')
df = df.dropna(axis=0)

# 도로명주소를 좌표값을 변환하기 위한 함수 설정
def geocoding(address):
    geolocoder = Nominatim(user_agent = 'South Korea', timeout=None)
    geo = geolocoder.geocode(address)
    crd = {"lat": str(geo.latitude), "lng": str(geo.longitude)}

    return crd

# 도로명 주소를 입력받아 변수 선언
adress = input('도로명 주소를 입력하세요 : ')
crd = geocoding(adress)

# 우리 집을 기준으로 지도를 띄워보자.
myhome = folium.Map(location=[crd['lat'], crd['lng']], zoom_start=14)

# red Marker를 이용해 우리집을 표시
folium.Marker([crd['lat'],crd['lng']], icon=folium.Icon(color='red', icon='glyphicon glyphicon-home')).add_to(myhome)

# 나랑 가까운 의료기관 찾기
my_hosp = pd.DataFrame(columns=['도로명전체주소','사업장명', '위도', '경도', '거리'])
myhome = (crd['lat'], crd['lng'])

for n in df.index :
  if df['상세영업상태명'][n] == '영업중':
    hosp_loc = (df.loc[n, '위도'], df.loc[n, '경도']) # tuple형태로 구성
    # my_hosp에 담기
    my_hosp.loc[n] = [df.loc[n, '도로명전체주소'], df.loc[n, '사업장명'], df.loc[n, '위도'], df.loc[n, '경도'], geodesic(myhome, hosp_loc).kilometers]

# top 5 넣기
my_hosp = my_hosp.sort_values(by=['거리']).head(5)

# 지도 시각화
my_map = folium.Map(location=[crd['lat'], crd['lng']], zoom_start=14)

for n in my_hosp.index :
  folium.Marker([my_hosp.loc[n,'위도'], my_hosp.loc[n,'경도']], 
                popup='<pre>'+my_hosp.loc[n, '사업장명']+'</pre>',
                icon=folium.Icon(icon='wifi', prefix='fa')).add_to(my_map)

folium.Marker([crd['lat'], crd['lng']], icon=folium.Icon(color='red', icon='glyphicon glyphicon-home')).add_to(my_map)
my_map

 

LIST