[파이썬] 내가보려고 정리하는 파이썬 : Folium

2024. 4. 21. 19:06공부

Folium 파이썬에서 제공하는 지도를 다루는 라이브러리다. 지도를 생성하고 지도내에 Marker를 추가하거나 범위를 표기하고 그 지도를 html파일로 내보내는것을 수행할수있다.

 

folium을 사용하는 방법은 의외로 간단하다.  Map함수를 통해 위도 경도, 확대 수치를 적어주면 끝이다.

import folium

folium.Map(location = [위도, 경도], zoom_start = Number)

예시로 서울지도를 하나 만들어서 출력해보겠다.

seoul_map = folium.Map(location=[37.6, 127], zoom_start=12) # tiles='OpenStreetMap'
seoul_map

이번에는 이 지도에 반경 원을 표시해 보겠다.

이를 위해 서울시내에있는 중학교 엑셀 파일을 불러온다.

import pandas as pd

df = pd.read_excel('./2016_middle_shcool_graduates_report.xlsx', index_col=0)
df.loc[:, '학생수' ] = df.loc[:, '남학생수':'여학생수'].sum(axis=1)
df

서울시 내 중학교 데이터프레임

우리는 이 많은 columns중 위도와 경도를 사용해서 표현할것이다. 그 코드는 아래와 같다.

seoul_map = folium.Map(location=[37.55, 126.98], zoom_start=12) # 지도생성
size = 0;


# 위도, 경도에 따라 순차적으로 범위원를 생성함.
for name, lat, lng, num in zip(df.학교명, df.위도, df.경도, df.학생수):
  if num > 200 :
    size = 15
  elif num > 100 :
    size = 10
  else :
    size = 5
  folium.CircleMarker([lat, lng],
                radius=size,          #원의 반지름
                color='brown',      # 원둘레 색상
                fill=True,
                fill_color='coral', # 원을 채우는 색
                fill_opacity=0.7,   # 투명도
                popup=name
  ).add_to(seoul_map)

seoul_map

원의 크기는 학교내 학생수에따라 다르다.

이것외에 마커를 추가하고싶은경우 위에서는 folium.CircleMaker를 사용한것과 다르게, folium.Marker함수를 사용하여,  위도경도, 이름을 지정하여 표시하면된다. 기본적으로는 둘의 내부변수만 다를뿐 사용방식은 동일하다.  

 

그리고 코드를 확인하다보면, for문에 in zip이라는 코드를 확인할수있다. 이 zip()함수는 무엇이냐?

이것은 파이썬 내에서 기본적으로 제공하는 함수로, 여러그룹의 데이터를 하나로 묶어주는 역할을수행하게된다. 

위의 코드를 기준으로 하였을때는 데이터가 한그룹으로 묶여 

name, lat, lng, num에 순서대로 학교명, 위도, 경도, 학생수 에대한 값들이 들어가게되며 코드를 수행하게된다. 

 

이와같은 folium을 통해 실제 지도를 기반으로 다양한 시각화를 진행하여, 가독성을 높일수있다.