[시각화 도구/Folium 라이브러리 - 지도 활용]
Folium 라이브러리는 지도 위에 시각화할 때 유용한 도구이다. 세계 지도를 기본 지원하고 다양한 스타일의 지도 이미지를 제공하고 있다.
목차
1. Folium 설치하기
2. 지도 만들기
3. 지도 스타일 적용하기
4. 지도에 마커 표시하기
5. 지도 영역에 단계구분(Choropleth Map) 표시하기
Folium 설치하기
아나콘다 프롬프트를 실행하고
conda install -c conda-forge folium
을 입력하고 엔터를 누르면 된다.
지도 만들기
Folium 라이브러리의 Map() 함수를 이용하면 간단하게 지도 객체를 만들 수 있다.
지도 화면은 고정된 것이 아니고 줌 기능과 화면 이동이 모두 가능하다.
단, 스파이더와 같은 IDE에서 예제 코드를 실행하면 지도가 표시되지 않는다.
Folium은 웹 기반 지도를 만들기 때문인데, 오직 웹 환경에서만 지도를 확인할 수 있다.
지도를 보려면 지도 객체에 save() 메소드를 적용하여 HTML 파일로 저장하고, 웹브라우저에서 파일을 열어 확인해야 한다.
Jupyter Notebook 등 웹 기반 IDE에서는 지도 객체를 바로 확인할 수 있다.
필자는 Jupyter Notebook으로 예제를 실행하기 때문에 따로 파일을 저장하지는 않는다.
# 예제 4-36
import folium
seoul_map = folium.Map(location=[37.55, 126.98], zoom_start=12)
지도 객체를 생성하는 Map() 함수의 location 옵션에 [위도, 경도] 수치를 입력하면 그 지점을 중심으로 지도를 보여준다.
zoom_start 옵션을 사용하면 화면 확대 비율 조절할 수 있다.
지도 스타일 적용하기
Map() 함수에 tiles 옵션을 적용하면 지도에 적용하는 스타일을 변경하여 저장할 수 있다.
# 예제 4-37
import folium
seoul_map1 = folium.Map(location=[37.55, 126.98], tiles='Stamen Terrain', zoom_start=12)
seoul_map2 = folium.Map(location=[37.55, 126.98], tiles='Stamen Toner', zoom_start=15)
'Stamen Terrain' 맵은 산악 지형 등의 지형이 보다 선명하게 드러나는 것을 볼 수 있다.
'Stamen Toner' 맵은 흑백 스타일로 도로망을 강조해서 보여준다.
지도에 마커 표시하기
마커 위치를 표시하려면 Marker() 함수에 위도, 경도 정보를 전달한다.
popup 옵션을 추가하면 마커를 클릭했을 때 팝업창에 표시해주는 텍스트를 넣을 수 있다.
# 예제 4-38
import pandas as pd
import folium
df = pd.read_excel('서울지역 대학교 위치.xlsx', engine='openpyxl')
seoul_map = folium.Map(location=[37.55, 126.98], tiles='Stamen Terrain', zoom_start=12)
for name, lat, lng in zip(df['Unnamed: 0'], df.위도, df.경도):
folium.Marker([lat, lng], popup=name).add_to(seoul_map)
서울 시내 주요 대학교의 위치 데이터를 데이터프레임으로 변환하고 Folium 지도에 위치를 표시해본다.
이번에는 원형 마커를 표시해 본다.
<예제 4-38>에서 Marker() 함수 대신에 CircleMarker() 함수를 사용한다.
원형 마커의 크기, 색상, 투명도 등을 설정할 수 있다.
# 예제 4-39
import pandas as pd
import folium
df = pd.read_excel('서울지역 대학교 위치.xlsx', engine='openpyxl')
seoul_map = folium.Map(location=[37.55, 126.98], tiles='Stamen Terrain', zoom_start=12)
for name, lat, lng in zip(df['Unnamed: 0'], df.위도, df.경도):
folium.CircleMarker([lat, lng], radius=10, color='brown', fill=True, fill_color='coral', fill_opacity=0.7, popup=name).add_to(seoul_map)
지도 영역에 단계구분도(Choropleth Map) 표시하기
행정구역과 같이 지도 상의 어떤 경계에 둘러싸인 영역에 색을 칠하거나 음영 등으로 정보를 나타내는 시각화 방법이다.
전달하려는 정보의 값이 커지면 영역에 칠해진 색이나 음영이 진해진다.
Choropleth() 함수를 이용한다.
# 예제 4-40
import pandas as pd
import folium
import json
df = pd.read_excel('경기도인구데이터.xlsx', index_col='구분', engine='openpyxl')
df.columns = df.columns.map(str)
print(df.head(5))
try:
geo_data = json.load(open('경기도행정구역경계.json', encoding='utf-8'))
except:
geo_data = json.load(open('경기도행정구역경계.json', encoding='utf-8-sig'))
g_map = folium.Map(location=[37.5502, 126.982], tiles='Stamen Terrain', zoom_start=9)
year = '2007'
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)
경기도 지역의 시군구별 인구 변화 데이터(2007-2017년), 경기도 행정구역 경계 지리 정보를 사용한 예제이다.
import pandas as pd
import folium
import json
df = pd.read_excel('경기도인구데이터.xlsx', index_col='구분', engine='openpyxl')
df.columns = df.columns.map(str)
try:
geo_data = json.load(open('경기도행정구역경계.json', encoding='utf-8'))
except:
geo_data = json.load(open('경기도행정구역경계.json', encoding='utf-8-sig'))
g_map = folium.Map(location=[37.5502, 126.982], tiles='Stamen Terrain', zoom_start=9)
year = '2017'
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)
2017년도 경기도 지역의 인구 수를 지도에 표시해본다.
<예제 4-40>과 year = '2017'을 제외하고는 모든 코드가 같다
2007년과 비교하면 남양주, 분당, 화성 지역의 신도시 개발과 인구 유입으로 인구가 집중되는 현상이 심화된 것을 볼 수 있다.
![]() |
|
'공부 > 파이썬 머신러닝 판다스 데이터 분석' 카테고리의 다른 글
[데이터 사전 처리/중복 데이터 처리] (0) | 2022.12.02 |
---|---|
[데이터 사전 처리/누락 데이터 처리] (0) | 2022.11.28 |
[시각화 도구/Seaborn 라이브러리 - 고급 그래프 도구] (0) | 2022.11.22 |
[시각화 도구/Matplotlib - 기본 그래프 도구] 박스 플롯 (0) | 2022.11.17 |
[시각화 도구/Matplotlib - 기본 그래프 도구] 파이 차트 (0) | 2022.11.17 |