본문 바로가기
Study/혼자 공부하는 판다스

혼자 공부하는 판다스 - Folium 라이브러리 (지도 활용)

by Wanooky 2022. 4. 21.

Folium 라이브러리는 지도 위에 시각화할 때 유용한 도구이다. 

 

Folium 라이브러리의 Map() 함수를 이용하면 간단하게 지도 객체를 만들 수 있다.

 

지도 화면은 고정된 것이 아니고 줌 기능과 화면 이동이 모두 가능하다.

 

Folium은 웹 기반 지도를 만들기 때문에 IDE 환경에서 실행해도 지도가 표시가 되지 않는다. 

 

지도를 보려면 지도 객체에 save() 메소드를 적용하여 HTML 파일로 저장하고, 웹 브라우저에서 파일을 열어서 확인해야 한다.

 

import folium

#서울 지도 만들기
seoul_map = folium.Map(location = [37.55, 126.98], zoom_start=12)

#지도를 HTML 파일로 저장하기
seoul_map.save('/seoul.html')

다음과 같은 지도가 만들어 진다.

 


지도 스타일 적용하기

 

Map() 함수에 tiles 옵션을 적용하면 지도에 적용하는 스타일을 변경하여 지정할 수 있다.

 

seoul_map2 = folium.Map(location=[37.55, 126.98], tiles='Stamen Terrain', zoom_start=12)
seoul_map3 = folium.Map(location=[37.55, 126.98], tiles='Stamen Toner', zoom_start=15)

seoul_map2.save('./seoul2.html')
seoul_map3.save('./seoul3.html')

 

seoul2
seoul3


지도에 마커 표시하기

마커 위치를 표시하려면 Marker() 함수에 위도, 경도 정보를 전달한다.

 

popup 옵션을 추가하면 마커를 클릭했을 때 팝업창에 표시해주는 텍스트를 넣을 수 있다.

 

df = pd.read_excel('/content/drive/MyDrive/part4/서울지역 대학교 위치.xlsx')


seoul_map = folium.Map(location=[37.55,126.98], tiles='Stamen Terrain', zoom_start=12)

for name, lat, lng in zip(df.index, df.위도, df.경도):
	folium.Marker([lat, lng], popup=name).add_to(seoul_map)
    
seoul_map.save('./seoul_colleges.html')

 

이번엔 원형 마커를 표시할 것이다. Marker() 대신 CircleMarker() 함수를 사용한다.

 

원형 마커의 크기, 색상, 투명도 등을 설정할 수 있다.

 

for name, lat, lng in zip(df.index, df.위도, df.경도):
	folium.CircleMarker([lat, lng],
    					radius=10,
                        color='brown',
                        fill=True,
                        fill_color='coral',
                        fill_opacity=0.7,
                        ).add_to(seoul_map)
                        
seoul_map.save('./seoul_colleges2.html')


 

지도 상의 어떤 경계에 둘러싸인 영역에 색을 칠하거나 음영 등으로 정보를 나타내는 시각화 방법이다.

 

이는 Choropleth() 함수를 이용한다.

 

import json

file_path = '/content/drive/MyDrive/part4/경기도인구데이터.xlsx'
df = pd.read_excel(file_path, index_col='구분')
df.columns = df.columns.map(str)

geo_path = '/content/drive/MyDrive/part4/경기도행정구역경계.json'

#경기도 시군구 경계 정보를 가진 geo-json 파일 불러오기
try:
	geo_data = json.load(open(geo_path, encoding='utf-8'))
except:
	geo_data = json.load(open(geo_path, encoding='utf-8-sig'))

#경기도 지도 만들기
g_map = folium.Map(location=[37.5502, 126.982], tiles='Stamen Terrain', zoom_start=9)

#출력할 연도 선택
year = '2007'

#Choropleth 클래스로 단계 구분도 표시하기
folium.Choropleth(geo_data = geo_data,           	#지도 경계
				  data = df[year],				 	#표시하려는 데이터
                  columns = [df.index, df[year]],	#열 지정
                  fill_color='YlOrRd', fill_opacity=0.7, line_opacity=0.3,
                  threshold_scale=[10000, 100000, 300000, 500000, 700000],
                  key_on = 'feature.properties.name',
                  ).add_to(g_map)
                  
g_map.save(g_map.save('./gyonggi_population_' + year + '.html')​

 

2017년으로 바꿔서 출력한 데이터는 다음과 같다.