9. Folium 라이브러리 - 지도 활용

김동웅·2021년 8월 24일
0

Pandas with python

목록 보기
9/23

Folium 라이브러리

  • Folium 라이브러리는 지도 위에 시각화할 때 유용한 도구이다.
    세계 지도를 기본 지원하고 다양한 스타일의 지도 이미지를 제공하고 있다.

1. 지도 만들기

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

  • 지도 객체를 생성하는 Map()함수의 location 옵션에 [위도,경도] 수치를 입력하면 그 지점을 중심으로 지도를 보여준다.

  • zoom_start 옵션을 사용하면 화면 확대 비율을 조절할 수 있다.


2. 지도 스타일 적용

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

# Stamen Terrain 스타일과 Stamen Toner 스타일을 적용
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(r'C:\Users\kjt63\OneDrive\바탕 화면\python\data_analysis\part4.visualization_tool\seoul2.html')
seoul_map3.save(r'C:\Users\kjt63\OneDrive\바탕 화면\python\data_analysis\part4.visualization_tool\seoul3.html')
  • tiles = 'Stamen Terrain'
  • tiles = 'Stamen Toner'

3. 지도에 마커 표시하기

  • Marker() 함수에 위도, 경도 정보를 전달한 후, popup옵션을 추가하면 마커를 클릭했을때 팝업창에 표시해주는 텍스트를 넣을 수 있다.
import pandas as pd
import folium


df = pd.read_excel(r'C:\Users\kjt63\OneDrive\바탕 화면\python\data_analysis\sample\part4\서울지역 대학교 위치.xlsx',engine='openpyxl')

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


df.set_index('이름',inplace=True)

for name, lat, lng in zip(df.index,df.위도,df.경도) :
        folium.Marker([lat,lng],popup=name).add_to(seoul_map)
    
seoul_map.save(r'C:\Users\kjt63\OneDrive\바탕 화면\python\data_analysis\part4.visualization_tool\seoul_map4_2.html')

이번에는 원형 마커를 표시해보자.

  • Marker() 함수대신 CircleMakrker() 함수를 사용한다.
  • 원형 마커의 크기, 색상, 투명도를 설정할 수 있다.
    - Folium.Circlemarker([위도,경도],
    radius=10, # 원의 반지름
    color='brown' # 원의 색상
    fill = True, # 원을 채울것인지
    fill_color = 'coral', # 채울 색상
    fill_opacity = 0.7, # 투명도
    popup=name, # popup옵션
    ).add_to(객체)

4. 지도 영역에 단계구분도(Choropleth Map) 표시하기

  • 행정구역과 같이 지도상의 어떤 경계에 둘러싸인 영역에 색을 칠하거나 음영 등으로 정보를 나타내는 시각화 방법.
  • Choropleth() 함수를 이용한다.
# -*- coding: utf-8 -*-

# 라이브러리 불러오기
import pandas as pd
import folium
import json

# 경기도 인구변화 데이터를 불러와서 데이터프레임으로 변환
file_path = r'C:\Users\kjt63\OneDrive\바탕 화면\python\data_analysis\sample\part4\경기도인구데이터.xlsx'
df = pd.read_excel(file_path, index_col='구분', engine= 'openpyxl')  
df.columns = df.columns.map(str)

# 경기도 시군구 경계 정보를 가진 geo-json 파일 불러오기
geo_path = r'C:\Users\kjt63\OneDrive\바탕 화면\python\data_analysis\sample\part4\경기도행정구역경계.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)

# 출력할 연도 선택 (2007 ~ 2017년 중에서 선택)
year = '2017'  

# 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)

# 지도를 HTML 파일로 저장하기

g_map.save(r'C:\Users\kjt63\OneDrive\바탕 화면\python\data_analysis\part4.visualization_tool\gyonggi_poplulation' + year +'.html')

  • 2017년 경기도 인구 분포

2개의 댓글

comment-user-thumbnail
2023년 11월 28일

안녕하세요 데이터 분석을 위해서 경기도 행정구역별 json code가 필요한데 혹시 얻을수 있을까요 ㅜㅜ 부탁드립니다 ㅜㅜ

1개의 답글