Dev.log

Python 지도시각화 라이브러리: Folium 본문

Python

Python 지도시각화 라이브러리: Folium

포켓몬빵 2022. 4. 19. 23:23

본 포스팅에서는 지도위에 데이터를 표시할수 있는 Python 라이브러리 Folium에 대해 진행해보도록 하겠습니다.

Folium은 지리 공간 데이터를 시각화하는 데 사용되는 Python 라이브러리입니다. 또한 leaflet.js 기반으로 이루어졌으며, 시각화를 위해 OpenStreetMap, Mapbox, Stamen과 같은 지도 이미지들을 제공하기도 합니다. 자세한 내용은 아래 공식 도큐멘트에서 확인할 수 있습니다.

 

Folium — Folium 0.12.1 documentation

folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the leaflet.js library. Manipulate your data in Python, then visualize it in on a Leaflet map via folium. Concepts folium makes it easy to visualize data tha

python-visualization.github.io

Folium 설치

Folium의 경우 pip을 통한 설치와 anaconda 환경에서 conda를 통해 아래와 같이 설치할 수 있습니다.

! pip install folium
! conda install -c conda-forge folium

Folium을 통한 지도 시각화

먼저 간단한 지도를 그려보겠습니다. Folium은 Map()을 통해 지도를 생성할수 있습니다. 또한 location을 통해 지도의 중심으로 지정할 위도와 경도를 입력할 수 있으며, zoom_start를 통해 지도를 얼마나 확대 할지 결정할 수 있습니다.

import folium 

m = folium.Map(location = [37.544129, 127.054357],zoom_start = 14)
m

또한, 위에서 언급한거와 같이 Folium을 사용하면 Stamen Terrain, Stamen Toner, Stamen Water Color, CartoDB Positron 과 같은 다양한 타일로 지도를 만들 수 있습니다. 기본적으로 타일은 OpenStreetMap으로 설정됩니다. 각 타일셋은 지도의 다양한 기능을 보여주며 다양한 목적에 따라 시각화를 진행할 수 있습니다.

from branca.element import Figure

fig = Figure(width=550,height=350)
m=folium.Map(location=[37.544129, 127.054357],
             zoom_start = 14)
fig.add_child(m)
folium.TileLayer('Stamen Terrain').add_to(m)
folium.TileLayer('Stamen Toner').add_to(m)
folium.TileLayer('Stamen Water Color').add_to(m)
folium.TileLayer('cartodbpositron').add_to(m)
folium.TileLayer('cartodbdark_matter').add_to(m)
folium.LayerControl().add_to(m)
m

지도 내 마커 추가

지도내 마커를 추가하고 싶을 땐 아래와 같이 Maker()를 통해 추가해 줄 수 있습니다.

fig = Figure(width=550,height=350)
m = folium.Map(location=[37.53897093698831, 127.05461953077439], 
               zoom_start=14, 
               )
fig.add_child(m)
folium.Marker([37.54706945947954, 127.04740975332888]).add_to(m)
folium.Marker([37.54461957910074, 127.05590699103249],
              popup='<b>subway</b>').add_to(m)
folium.Marker([37.54041716624373, 127.06914637466906],
              popup='<b>subway</b>',
              tooltip='<i>건대입구역</i>').add_to(m)
m

지도 내  원 그리기

지도내 원과 같은 도형을 통해 범위에 대한 시각화를 진행하고 싶을 땐 CircleMaker()를 통해 시각화를 할 수 있습니다.

fig = Figure(width=550,height=350)
m = folium.Map(location=[37.53897093698831, 127.05461953077439], 
               zoom_start=13)
fig.add_child(m)

folium.CircleMarker(
    [37.54455152583346, 127.05564949938811],
    radius=100,
    fill=True,
    popup='popup',
    tooltip='tooltip'
).add_to(m)
m

지도 내  GPS 경로 표시 

먼저 데이터셋을 다운로드 해 줍니다. 본 데이터셋은 github의 tisljaricleo유저가 제공하였습니다. GPS경로와 같이 지도위에 선을 나타낼 때에는 polyline()을 사용해 주면 됩니다.

import pandas as pd
import requests
import io

url = "https://raw.githubusercontent.com/tisljaricleo/GPS-visualization-Python/main/data.csv" # Make sure the url is the raw version of the file on GitHub
download = requests.get(url).content
df = pd.read_csv(io.StringIO(download.decode('utf-8')),names=['LATITUDE', 'LONGITUDE'])
df.head(5)

list_ = df[['LATITUDE', 'LONGITUDE']].values.tolist()
fig = Figure(width=550,height=350)

center = list_[0]
m = folium.Map(location=center, 
               zoom_start=10)
fig.add_child(m)
folium.PolyLine(locations = list_,
               ).add_to(m)
m

Comments