반응형
<과제>
내 위치와 가장 가까운 의료기관 찾기, 단 영업중인 병원만 검색되도록 하자.
내 위치는 도로명 주소로 입력받고 가장 가까운 의료기관은 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
'대외활동 > ABC 지역주도형 청년 취업역량강화 ESG 지원산업' 카테고리의 다른 글
[ABC 220907 - 17일차(결석)] 유튜브 댓글 크롤링 및 워드 클라우드 (0) | 2022.09.11 |
---|---|
[ABC 220906 - 16일차] 오후 실습 과제 (1) | 2022.09.11 |
[ABC 220906 - 16일차] 나와 제일 가까운 의료 기관 찾기 (0) | 2022.09.11 |
[ABC 220905 15일차] - 과제 실습 (0) | 2022.09.11 |
[ABC 220905 15일차] - 나와 제일 가까운 무료 WIFI는 어디 있을까? (1) | 2022.09.10 |