📄 목차
- Folium
- 사용 가능한 기능
- folium.Map()
- folium.Marker()
- folium.ClickForMarker()
- folium.LatLngPopup()
- folium.Circle(), .CircleMarker()
- folium.Choropleth()
- 지도 시각화
- 장소별 분석
1. Folium
- 사용의 편의성, 활발한 기능 개선 등으로 만족도 높은 모듈
- 또한 크롬에서 동작이 가장 좋다고 알려져있음.
- conda install -c conda-forge folium
사용 가능한 기능
- 위도 경도를 입력하면 지도 이미지를 보여줌
- 지도를 html 형식으로 저장 가능
- 스타일을 tiles 옵션으로 지정 가능 (어떠한 형태로 지도를 보일 것인지...)
- 마커 추가 가능
- 다양한 아이콘 지원
- circle 마커 지원
- 클릭으로 해당 부분 위도, 경도 정보 반환
folium.Map()
Init signature:
folium.Map(
location=None,
width='100%',
height='100%',
left='0%',
top='0%',
position='relative',
tiles='OpenStreetMap',
attr=None,
min_zoom=0,
max_zoom=18,
zoom_start=10,
min_lat=-90,
max_lat=90,
min_lon=-180,
max_lon=180,
max_bounds=False,
crs='EPSG3857',
control_scale=False,
prefer_canvas=False,
no_touch=False,
disable_3d=False,
png_enabled=False,
zoom_control=True,
**kwargs,
)
- 굉장히 다양한 parameters 들을 사용할 수 있음
- location에 list 형식으로 위도, 경도를 넣어주면 됨
- zoom_start=정수 >> 초기 확대 정도를 결정하는 것
- tiles='' >> 보여지는 형식을 결정
folium.Marker()
Init signature:
folium.Marker(
location=None,
popup=None,
tooltip=None,
icon=None,
draggable=False,
**kwargs,
)
- 위 함수를 이용하여 Marker를 만들고, .add_to(지도)를 사용하면 해당 마커를 지도에 넣을 수 있음
- location >> marker로 표지할 부분
- popup = 클릭 했을 때 나타낼 내용 (html 문법 적용)
- html 문법이 적용되므로 링크를 추가하는 것도 가능
- tooltip = 커서가 올라가면 나타나는 내용
- icon = 마커 아이콘 모양, 색상 등 변경
- icon내에서 prefix 같은 추가적인 parameter들이 있고, 이를 이용하면 더 다양한 아이콘 표현 가능
- 지도함수.add_child(folium.ClickForMarker())
- 위와 같이 먼저 보일 지도함수를 만들어 놓고, 추가적으로 사용하면 됨
- 클릭하면 그 위치에 마커를 생성함
- 괄호 내에 popup=""을 넣으면 클릭 했을 때 내용 띄움
- 지도함수.add_child(folium.LatLngPopup())
- 클릭한 위치의 위도 경도 값 반환 (마커 생성 x)
folium.Circle(), folium.CircleMarker()
folium.Circle(
location=None,
radius=50,
popup=None,
tooltip=None,
**kwargs
)
folium.CircleMarker(
location=None,
radius=10,
popup=None,
tooltip=None,
**kwargs,
)
- fill=True, fill_color="색상" >> 원형 내부 색상이 채워짐
folium.Choropleth()
folium.Choropleth(
geo_data,
data=None,
columns=None,
key_on=None,
bins=6,
fill_color=None,
nan_fill_color='black',
fill_opacity=0.6,
nan_fill_opacity=None,
line_color='black',
line_weight=1,
line_opacity=1,
name=None,
legend_name='',
overlay=True,
control=True,
show=True,
topojson=None,
smooth_factor=None,
highlight=None,
use_jenks=False,
**kwargs,
)
- geo_data: 경계선 좌표 값이 담긴 데이터
- data: 표현할 내용이 담긴 데이터 (데이터 참조)
- columns: 해당 데이터에서 표현할 컬럼 (값 참조)
- column 1 = key, column 2 = values
- key_on: Variable in the
geo_data
GeoJSON file to bind the data to. Must
start with 'feature' and be in JavaScript objection notation.
Ex: 'feature.id' or 'feature.properties.statename'.
- fill 이나 line: 색상, 경계선 표현 등에 대한 내용
- 위에서 다룬 내용들을 이용하여 지역별 데이터에 따른 표시를 할 수 있음

- 데이터 다운로드 후,
- 변수로 지도를 받고 (df)
- 해당 변수의 위도 경도 데이터를 for문을 이용하여 위치 표시
- 해당 위치의 세대수 데이터를 받아 색깔 입힘
- folium.Marker()
- folium.Circle()
2. 지도 시각화
- 지금까지 다뤘던 서울시 범죄현황을 지도에 표시해보자


- folium.Choropleth()에서 geo_data는 서울 경계 관련 data를 geo_path로 불러서 geo_str이라는 변수에 저장하였음
(geo_str = json.load(open(geo_path, encoding="utf-8")))
- 경계선으로 나타나는 정보는 범죄 발생율
- 원형으로 나타나는 것은 경찰서 위치와 검거율에 비례하는 원의 넓이임.
3. 장소별 분석
- 추가적으로 서울시 범죄현황의 장소별 분석을 heatmap으로 표현



