나는야 데이터사이언티스트/PYTHON

[Python]지도 데이터 시각화 - Folium 기초 실습하기

우주먼지의하루 2020. 6. 17. 00:06
728x90

먼저 Folium은 Python data, leaflet.js 맵입니다.
Python에서 데이터를 조작한 다음 leaflet.js를 통해 데이터를 시각화합니다.

라이브러리에는 OpenStreetMap, Mapbox 및 Staten의 여러 타일 세트가 내장되어 있으며, Mapbox 또는 Cloudmade API 키를 사용하여 사용자 지정 타일 셋을 지원합니다. Folium은 이미지, 비디오, GeoJSON 및 TopoJ를 모두 지원합니다.

 

자세한 내용은 아래 주소 클릭

https://python-visualization.github.io/folium/

 

 

- 실습

 

 

먼저 실습할 데이터를 만들어줍니다.

from pandas import DataFrame

#예제 데이터 만들기

ex = {'경도' : [127.061026,127.047883,127.899220,128.980455,127.104071,127.102490,127.088387,126.809957,127.010861,126.836078
                ,127.014217,126.886859,127.031702,126.880898,127.028726,126.897710,126.910288,127.043189,127.071184,127.076812
                ,127.045022,126.982419,126.840285,127.115873,126.885320,127.078464,127.057100,127.020945,129.068324,129.059574
                ,126.927655,127.034302,129.106330,126.980242,126.945099,129.034599,127.054649,127.019556,127.053198,127.031005
                ,127.058560,127.078519,127.056141,129.034605,126.888485,129.070117,127.057746,126.929288,127.054163,129.060972],
     '위도' : [37.493922,37.505675,37.471711,35.159774,37.500249,37.515149,37.549245,37.562013,37.552153,37.538927,37.492388
              ,37.480390,37.588485,37.504067,37.608392,37.503693,37.579029,37.580073,37.552103,37.545461,37.580196,37.562274
              ,37.535419,37.527477,37.526139,37.648247,37.512939,37.517574,35.202902,35.144776,37.499229,35.150069,35.141176
              ,37.479403,37.512569,35.123196,37.546718,37.553668,37.488742,37.493653,37.498462,37.556602,37.544180,35.111532
              ,37.508058,35.085777,37.546103,37.483899,37.489299,35.143421],
     '구분' : ['음식','음식','음식','음식','생활서비스','음식','음식','음식','음식','음식','음식','음식','음식','음식','음식'
             ,'음식','음식','소매','음식','음식','음식','음식','소매','음식','소매','음식','음식','음식','음식','음식','음식'
             ,'음식','음식','음식','음식','소매','음식','음식','의료','음식','음식','음식','소매','음식','음식','음식','음식'
             ,'음식','음식','음식']}

ex=DataFrame(ex)
ex

 

 

Folium 라이브러리를 import하고 지도 띄우기

import folium

#지도의 중심을 지정하기 위해 위도와 경도의 평균 구하기
lat = ex['위도'].mean()
long = ex['경도'].mean()

#지도 띄우기
m = folium.Map([lat,long],zoom_start=9)
m

실행시키면 아래의 그림처럼 나오게 됩니다.

 

이제 지도 위에 데이터들을 표시해봅니다.

Folium 버전 문제로 한글 폰트가 jupyter 결과창에 안나오는데 이걸 해결하기 위해 html 파일로 저장시켜줍니다.

for i in ex.index:
    sub_lat =  ex.loc[i,'위도']
    sub_long = ex.loc[i,'경도']
    
    title = ex.loc[i,'구분']
    
    #지도에 데이터 찍어서 보여주기
    folium.Marker([sub_lat,sub_long],tooltip = title).add_to(m)

#한글이 안나오는 오류로 html로 trouble shooting 
m.save('example.html')
m

 

example.html 파일을 열어주면 데이터들이 찍혀있는 것을 확인할 수 있습니다.

 

 

찍히는 마커 모양을 다르게 변형할 수도 있습니다.

동그라미 모양으로 데이터를 표시하고 싶을 때는 CircleMarker을 사용합니다.

#지도 새로 띄우기
m = folium.Map([lat,long],zoom_start=9)

for i in ex.index:
    sub_lat =  ex.loc[i,'위도']
    sub_long = ex.loc[i,'경도']
    
    title = ex.loc[i,'구분']
  
    #구분이 소매면 빨간색으로 표시, default는 녹색
    
    color = 'green'
    if ex.loc[i,'구분'] == '소매':
        color = "red"
        
    #지도에 동그라미로 데이터 찍기    
    folium.CircleMarker([sub_lat,sub_long],color=color,radius = 5, tooltip=title).add_to(m)

#한글이 안나오는 오류로 html로 trouble shooting
m.save('example.html')
m

 

 

조금 더 심화된 내용은 Folium documentation에서 확인하실 수 있습니다.

 

https://python-visualization.github.io/folium/quickstart.html#Getting-Started

 

 

 

 

만약 색깔로 시각화를 하고 싶다면 아래의 URL을 참고 !

 

 

 

https://plotly.com/python/choropleth-maps/

 

Choropleth Maps

How to make choropleth maps in Python with Plotly.

plotly.com

 

 

반응형