Folium
Folium은 leaflet.js를 기반으로 지도를 그려주는 Python 시각화 패키지이다. 모바일에서도 쓸 수 있을만큼 가볍고, pandas와 쉽게 연동하여 간편하게 시각화할 수 있다는 장점이 있다. 위치 좌표계 값을 이용해 지도 위에 시각화 할 수 있다.
Map
Folium의 Map 클래스를 통해 지도의 범위를 지정하고 표시할 수 있다. location 속성으로 나타내려는 지도의 정중앙 좌표를 설정할 수 있고, zoom_start 속성으로 배율을 설정할 수 있다. folium.Map.save()를 통해 설정된 지도를 html형식으로 저장 가능하다.
import folium
m = folium.Map(
location=[37.4918346,127.0202431],
zoom_start=15
)
m.save('map.html')
Map 활용 예시
Google 지도 활용 : 구글 지도에서 검색 장고 검색 시, 주소창에 나오는 좌표계 값 활용
위 코드를 실행시키고 저장된 'map.html'을 열어보면 다음과 같은 지도 나타난다.
Marker
folium의 Marker 클래스를 이용해 특정 위치를 아이콘으로 강조할 수 있다. folium.Marker()로 마커의 속성을 설정 후 add_to()를 통해 정의한 Map에 추가하면 된다.
Glyphicons에서 제공하는 이미지를 이용해 지도위에 icon을 표시할 수 있음.
- https://getbootstrap.com/docs/3.3/components/ 사이트에서 사용 가능한 icon 확인 가능
popup 속성에 문자열을 지정하여 클릭 시 팝업되는 메세지를 설정할 수 있음.
m = folium.Map(
location=[37.4918346,127.0202431],
zoom_start=15
)
folium.Marker(
location=[37.4918346,127.0202431],
popup='Samsung Financial Campus',
icon=folium.Icon(color='red',icon='star')
).add_to(m)
m.save('map.html')
Circle
CircleMarker 클래스를 이용해 중심부터 일정 범위를 원형으로 표시할 수도 있다. hex code나, 색상 명을 직접 입력하여 원형 내부 색상을 지정 가능하다.
m = folium.Map(
location=[37.4918346,127.0202431],
zoom_start=15
)
folium.CircleMarker(
location=[37.4918346,127.0202431],
radius=100,
# color='#ffffgg', ### hex code
# fill_color='#fffggg', ### hex code
color='green',
fill_color='green',
popup='Samsung Financial Campus',
).add_to(m)
m.save('map.html')
MarkerCluster
MarkerCluster 클래스를 이용하면 가까운 거리의 Marker들을 군집시켜서 해당 건 수를 표현해준다. 특정 클러스털르 클릭하면 해당 위치를 확대시켜 자세히 들여다볼 수 있다.
예시) 로또 777회차 1등 당첨 정보를 바탕으로 MarkerCluster 생성
m = folium.Map(
location=[36.5053542,127.7043419],
zoom_start=8
)
lotto = [
{"store":"담배","loc":[37.62585944357624,127.01847823823798]},
{"store":"화곡본마트","loc":[37.54248103738589,126.84414659211494]},
{"store":"용꿈돼지꿈","loc":[37.5447438346992,126.95223862043447]},
{"store":"일이오마켓","loc":[37.47943673430032,126.98346178441342]},
{"store":"여명슈퍼마켓","loc":[37.61432815661055,127.0415039221072]},
{"store":"5가로또레드탑","loc":[37.570756251987575,127.00235901546226]},
{"store":"복권세상","loc":[35.91885025656432,128.55034430109828]},
{"store":"복권전문점","loc":[37.50384327747725,126.71513104367074]},
{"store":"인현동지하가판","loc":[37.47627910055104,126.63147671205866]},
{"store":"CU(광주서동점)","loc":[35.14814807640179,126.90555219336346]},
{"store":"지산로또방","loc":[35.148338888178,126.93203920504686]},
{"store":"천사로또방","loc":[37.63618838692431,127.21107884503209]},
{"store":"오렌지통신","loc":[37.42889361993242,127.10232604117991]},
{"store":"여수복권방","loc":[37.418353650942116,127.12640523182601]},
{"store":"둘리복권방","loc":[37.34532813934063,126.73627994929885]},
{"store":"금성24시편의점","loc":[37.84401249737699,127.06236893072152]},
{"store":"GS25(청주주은점)","loc":[36.60987111587086,127.49134026856717]},
{"store":"장미슈퍼","loc":[36.276304155315685,126.90940713047799]},
{"store":"아이24(수송점)","loc":[35.970108052787594,126.7189421934312]},
{"store":"탑로또","loc":[34.87844231008963,128.62803523643754]}
]
from folium.plugins import MarkerCluster
marker_cluster = MarkerCluster().add_to(m)
for i in range(len(lotto)):
folium.Marker(
location=lotto[i]['loc'],
popup=lotto[i]['store'],
icon=folium.Icon(color='red',icon='ok'),
).add_to(marker_cluster)
m.save('map.html')
GeoJson
geojson 클래스를 활용하면 다각형을 표현할 수 있다. 일반적으로 지역별 통계 데이터를 시각화하고자할 때 geojson 데이터는 필수이다. 행정구역같은 경계선이나 경로를 표현하는데 효과적이다. 시각화하고자 할 때 필요한 geojson 데이터는 구글링을 통해 쉽게 얻을 수 있다.
위 데이터에서는 features 속성에 각 구 별 다각형 꼭지점 좌표 정보를 담고 있다. geojson 데이터는 만든 사람마다 변수명을 다르게 지정해두기 때문에, 데이터를 먼저 확인하고 자료구조가 어떻게 되어있고, 어떤 변수에 좌표정보가 담겨있는지를 먼저 알아내야 한다.
m = folium.Map(
location=[37.4918346,127.0202431],
zoom_start=10
)
import json
with open('./seoul_municipalities_geo.json',mode='rt',encoding='utf-8') as f:
geo = json.loads(f.read())
f.close()
folium.GeoJson(
geo,
name='seoul_municipalities'
).add_to(m)
m.save('map.html')
'빅데이터분석👨💻' 카테고리의 다른 글
[Crawling] Colab 환경에서 셀레니움으로 크롤링하기 (WebDriver Exception 해결) (0) | 2024.05.07 |
---|---|
[Python] Feature Engineering 실습 - Titanic 예제 (0) | 2024.02.13 |
[Python] 다변수의 관계 확인 (2) - lmplot(), Heatmap() (0) | 2024.01.11 |
[Python] 다변수의 관계 확인 (1) - joinplot() (1) | 2024.01.10 |
[Python] 분포 확인 그래프 (3) - violinplot() (1) | 2024.01.02 |