DevLog

파이썬으로 서울시 따릉이 지도 만들기 (3) - folium 라이브러리로 지도 시각화하기 본문

프로그래밍 언어/Python

파이썬으로 서울시 따릉이 지도 만들기 (3) - folium 라이브러리로 지도 시각화하기

김만콩 2023. 9. 1. 16:30
서울시 공공자전거 실시간 대여 정보를 확인할 수 있는 "따릉이 지도" 만들기
- 목적 : 파이썬 활용 데이터 분석 & 시각화 실습 미니 프로젝트
- 개발 환경 : Jupyter Notebook
- 사용 언어 : Python3 (pandas, folium)

 

본격적으로 지도를 제작해보자!

 

데이터 불러오기

먼저 `pandas` 라이브러리로 엑셀 파일을 불러온다.

다음으로 `folium` 라이브러리를 사용해서 자전거 정보를 기록할 서울시 지도를 만들어주자.

 

데이터 시각화 지도 제작하기

 

folium 라이브러리 간단 가이드

 

1. 지도 생성하기
- `m = folium.Map(location = [위도, 경도], zoom_start = 확대정도) // 지도 m 생성`

2. 정보 추가하기
- 마커 추가하기 `folium.Marker([위도, 경도]).add_to(m)`
- 원 추가하기 `folium.CircleMarker([위도, 경도], radius = 원 크기).add_to(m)`

- 지도에서 클릭할 경우 마커 추가 `ClickForMarker().add_to(m)`


- 추가옵션
    tooltip : "마우스 올리면 보이는 정보"
    popup : "클릭했을 때 보이는 정보"

    icon : 마커 아이콘 디자인, 색상 등 설정

 

# pip install folium
import folium

# 지도 만들기
# 기점: 서울역 [37.5536067, 126.9674308]

m = folium.Map(location = [37.5536067, 126.9674308], zoom_start = 12)

결과

 

다음으로 엑셀 파일을 읽어온 `data`에서 필요한 정보를 추출하여 지도에 마커를 추가해보자.

# 각 row의 위도, 경도, 대여소명, 자전거 수 추출해서 마커 추가

for i in range(len(data)):
    lat = data.loc[i, 'stationLatitude']     # 대여소 위치정보 (위도)
    long = data.loc[i, 'stationLongitude']   # 대여소 위치정보 (경도)
    name = data.loc[i, 'stationName']        # 대여소명
    bike = data.loc[i, 'parkingBikeTotCnt']  # 현재 사용 가능한 자전거 수
    total = data.loc[i, 'rackTotCnt']        # 전체 자전거 수

    folium.Marker([lat, long], tooltip = f'{name}: {bike}', popup = name).add_to(m)​

for 반복문으로 데이터프레임의 row를 하나씩 읽어와서 각 row에 있는 value들을 변수로 저장해줬다.

변수에 저장한 값을 사용해서 마커를 생성한 후, 최종적으로 지도에 add 해주면 끝!

 

결과

 

+) 색상으로 마커 구분하기

지도에 똑같이 생긴 마커가 너무 많으면 원하는 정보를 찾기 어려울 수밖에 없다.

이럴 때 조건문을 사용해서 마커 아이콘의 색상 정보를 변경해주면 시각적으로 정보를 구분하기 쉬워진다!

 

# 각 row의 위도, 경도, 대여소명, 자전거 수 추출해서 마커 추가

for i in range(len(data)):
    (...)
    
    # 자전거 보유율에 따라서 마커 색상을 다르게 표시
    # 50% 이상 보유 -> 파란색
    # 3개 미만 보유 -> 빨간색
    # 그 외 -> 초록색
    
    if bike < 3:
        color = 'red'
    elif bike / total >= 0.5:
        color = 'blue'
    else:
        color = 'green'

    icon = folium.Icon(color = color, icon = 'info-sign')
    folium.Marker([lat, long], tooltip = f'{name}: {bike}', icon = icon, popup = name).add_to(m)

앞선 코드에서 마커를 생성하기 전에 `folium.Icon()`으로 마커의 아이콘을 먼저 제작해주자.

 

이때, 아이콘의 색상을

현재 이용 가능한 자전거가 전체 자전거 수의 50% 이상이면 파란색으로,

자전거가 3대 미만이면 빨간색으로,

그 외의 경우에는 초록색으로 설정하여 아이콘을 생성해줄 것이다.

 

그렇게 만든 아이콘을 마커의 `icon` 옵션으로 넣어주면 최종적으로 아래와 같은 지도가 만들어진다.

 

folium 지도를 파일로 저장하기 (HTML)

만들어진 지도는 `save('경로')` 함수로 손쉽게 파일로 저장할 수 있다.

# html 파일로 저장

m.save('./bicycle_map.html')

bicycle_map.html

 

초간단 따릉이 지도 완성~

 

bicycle_map.html
4.46MB