안녕하세요? 이번 글은 GitHub Pages로 Folium 웹 매핑하는 방법을 정리해 보겠습니다.
Folium(폴리움)
Python data, leaflet.js maps (Python 데이터, leaflet.js. 맵)
Folium은 Python 생태계의 데이터 랭글링(Data Wrangling)* 강점과 leaflet.js 라이브러리 매핑 강점을 기반으로 하는 파이썬 패키지입니다. Python으로 데이터를 처리한 다음, Folium을 통해 Leaflet 맵에서 지도를 시각화할 수 있습니다.
*데이터 랭글링(Data Wrangling)이란, 원 데이터(raw data)를 보다 쉽게 접근하고 분석할 수 있도록 데이터를 정리하고 통합하는 과정을 뜻합니다.
- [1] Python(파이썬): https://www.python.org/
- [2] Leaflet(리플릿): https://leafletjs.com/
Folium을 사용하면 코로플레스(choropleth, 등치) 시각화를 위해 맵에 데이터를 바인딩(binding, 묶음)할 수 있을 뿐만 아니라 풍부한 벡터/래스터/HTML 시각화를 맵의 마커로 전달할 수 있습니다.
라이브러리에는 OpenStreetMap, Mapbox 및 Stamen의 여러 내장 타일 셋이 있으며 Mapbox 또는 Cloudmade API 키로 사용자 정의 타일셋을 지원합니다.
- [1] OpenStreetMap(오픈스트리트맵): https://www.openstreetmap.org/
- [2] Mapbox(맵박스): https://www.mapbox.com/
- [3] Stamen Maps(스테이먼 맵스): http://maps.stamen.com/
- [4] Cloudmade(클라우드메이드): https://cloudmade.com/
Folium은 이미지, 비디오, GeoJSON 및 TopoJSON 오버레이를 모두 지원합니다.
- [1] GeoJSON: https://geojson.org/
- [2] TopoJSON: https://github.com/topojson/
Folium은 물리해양학자에서 연구 소프트웨어 엔지니어로 전향한 브라질의 Filipe Fernandes(필리페 페르난데스)님이 최초 개발하였으며 현재 GitHub에는 116명의 컨트리뷰터가 등록되어 있습니다. 최신 버전은 2021년 11월 20일 등록된 v0.12.1입니다. Leaflet이 2020년 9월 4일 v.1.7.1 이후로 최신 버전 출시가 없기 때문에 Folium 역시 릴리즈가 더딜 수 밖에 없겠다 싶습니다. 저도 Fork를 뜨고 소스코드를 틈틈이 들여다보려고 합니다. *대조해 보지는 않았지만, Folium 문서가 상당히 잘 되어 있는 걸로 봤을 때 Leaflet의 현재 기능은 대부분 반영하지 않았을까 추정해 봅니다.
pip을 통한 Folium 설치
pip은 파이썬용 패키지를 설치해 주는 프로그램(Package Installer for Python)입니다. 'pip install 패키지명'은 일종의 문법입니다. pip을 통해 설치되는 파이썬용 패키지들은 PyPI라는 저장소에 위치하고 있습니다. pip 명령어를 통해 원하는 패키지를 내 PC로 이관합니다. PyPI는 파이썬 프로그래밍언어용 소프트웨어 저장소(repository)로, Folium 해당 페이지는 다음과 같습니다: https://pypi.org/project/folium/
pip install folium
Folium 시작하기
기본 지도(base map)를 만들려면, 시작 좌표를 Folium에 전달하기만 하면 됩니다. 저는 Google 지도에서 '하이브 인사이트' 좌표를 확인해서 전달해 봤습니다. *참고로 저는 '아미'입니다. :)
import folium
m = folium.Map(location=[37.53319398622274, 126.96437069887519]) # 하이브 인사이트
주피터 노트북(Jupyter Notebook)에 표시하려면, 객체 표현을 요청하기만 하면 됩니다.
m
파일로 저장하려면,
import os
os.chdir('D:\\GEODATA')
m.save("index.html") # 파일로 저장
아래와 같이 index.html 파일이 생성되었습니다.
GitHub repository(깃허브 저장소) 생성
이번에는 'GitHub(깃허브)'*에 접속해 봅니다. *GitHub는 헙업형 버전 관리 툴인 Git(깃) 저장소 호스팅을 지원하는 웹 서비스입니다. GitHub 계정 로그인 후 아래와 같이 'New repository(새 저장소)'를 클릭해 줍니다.
'Create a new repository(새 저장소 생성)'에서 'Repository name(저장소 이름)'를 지정해 줍니다. 앞으로 Folium 사용법을 시리즈 글로 작성 예정인데요, 저는 'Bangtan Tour(방탄투어)' 지도를 컨셉으로 다뤄보고자 합니다. 그래서 저장소 이름을 'bangtantour'로 설정해 봤습니다. :)
초기화 체크 박스에서 'Add a README file(README 파일 추가)', 'Choose a license(라이선스 선택)'을 체크해 봅니다. 라이선스는 'GNU General Public License v3.0'를 선택해 봤습니다. 그리고 나서 아래 'Create repository(저장소 생성)' 버튼을 클릭합니다.
아래와 같이 저장소가 생성되었습니다.
GitHub Pages(깃허브 페이지) 설정
상단 메뉴 중 'Settings'를 체크합니다.
설정 중 'GitHub Pages(깃허브 페이지)'를 확인합니다. 페이지 설정은 현재 자체 전용 탭(its own dedicated tab)이 있다고 안내됩니다. 'Check it out here!(여기에서 확인하세요!)' 링크를 클릭합니다!
'GitHub Pages' 탭이 뜨는데요, Source(소스)를 보시면 현재 GitHub Pages가 비활성화되어 있다고 안내됩니다. 이 부분을 변경해 보겠습니다.
Source 아래 'Branch: main'을 선택한 후, 'Save' 버튼을 클릭하면,
아래와 같이 주소가 안내됩니다!
해당 사이트를 클릭해 보면, GitHub 설정 탭에서 Theme Chooser(테마 선택기)'를 생략했기 때문에 아래와 같이 빈 페이지가 표출됩니다.
GitHub Pages로 Folium 웹 매핑하기
자, 이제 GitHub 저장소에서 'Add file > Upload files'를 클릭하고,
앞서 저장한 index.html 파일을 업로드해 줍니다. *업로드 후 지도가 뜨기까지는 몇 분이 수요됩니다. 자, 이제 아래 링크를 클릭해 보면 Folium 웹 매핑 결과를 확인하실 수 있습니다!