[zerobase_데이터 취업스쿨_스터디노트] 18. Folium 지도 시각화

김소희·2023년 12월 5일
0

study_note

목록 보기
18/50

오늘은 지금까지 배워보지 않은 새로운 것을 배우는 날 이다.

Folium..!!

folium 이라는 모듈을 사용하려면 역시나 install 먼저 해야한다.

1. 설치

!pip install folium

# window 에러날 때
# !pip install charset
# !pip install charset-normalizer

mac , windows 상관없이 pip 로 설치해 주면 되는데, 간혹 windows 에러가 날 경우에는
아래 2줄을 먼저 실행해보고 설치해주면 될 것 이다.

설치가 완료가 되었다면 불러오자!

2. 모듈 불러오기

import folium
import pandas as pd
import json

folium.Map()

location : tuple or list, default None
    Latitude and Longitude or Map(Northing, Easting) 위도와 경도..

튜플 또는 리스트 형태로 Map() 안에 위도,경도 정보를 넣어주면 된다.

ex) 엠파이어스테이트 빌딩의 좌표

m = folium.Map(location=[40.753797889588434, -73.98436804980062], zoom_start=15) # 0 ~18
m

업로드중..

이런식으로 구글 지도가 불러와진다!

그 정보를 html 로 저장도 가능하다.

3. 저장

m.save("./folium.html")

업로드중..

이렇게 원하는 위치에 html 파일정보가 들어온다.

이제 옵션을 하나 추가하면서 지도의 디자인을 바꿔보겠다

4. option 추가

### tiles option

folium이 계속 업데이트 되면서 옵션사용법이 바뀌고 있기 때문에
늘 공식홈페이지를 참고해 주어야 한다.

https://python-visualization.github.io/folium/latest/reference.html

저는 우선 기본값 "OpenStreetMap" 으로 넣었습니다.

< tiles = option 으로 지도 스타일 지정 >

  • 'OpenStreeMap'(default)
  • 'Mapbox Bright' (Limited levels of zoom for free tiles)
  • 'Mapbox Control Room' (Limited levels of zoom for free tiles)
  • 'Stamen' (Must pass API key) -> 바로 사용 불가 / api 키 필요
  • 'Cloudmade' (Must pass API key)
  • 'Mapbox' (Must pass API key)
  • 'CartoDB' (positron and dark_marker)
  • 현재 Mapbox 와 Cloudmade 는 지원 중단한 듯

다양한 방법으로 해보자!

< 지도위에 marker 표시해보기 >

folium.Marker()

  • 지도에 마커 생성
m = folium.Map(
    location=[40.753797889588434, -73.98436804980062],
    zoom_start=15,
    tiles="OpenStreetMap"
)

#타임스퀘어
folium.Marker((40.75882370236671, -73.98554486420437)).add_to(m) #튜플형태

#파이브가이즈
folium.Marker(
    location=[40.707168453222536, -74.00753509028434],
    popup="berger"
).add_to(m)

m

타임스퀘어와 파이브가이즈 2곳을 찍고, 파이브가이즈에는 popup 이라는 옵션으로 berger 라는
것을 알 수 있도록 하였다.

업로드중..

물론 바로 뜨는 것은 아니고 클릭하면 berger 라고 뜬다. 훨씬 알기 쉽다.

html 형태로도 줄 수 있다.

'<b>' '<b>' 로 감싸주어 글씨를 두껍게 만들어 줘봤다.

업로드중..

tooltip="" 이라는 옵션을 주어 마커 옆에 가게 되면 하얀색 표시가 뜨게끔 해주었다.


[전체코드]

m = folium.Map(
    location=[40.753797889588434, -73.98436804980062],
    zoom_start=15,
    tiles="OpenStreetMap"
)

#타임스퀘어
folium.Marker((40.75882370236671, -73.98554486420437)).add_to(m) #튜플형태

#파이브가이즈
folium.Marker(
    location=[40.707168453222536, -74.00753509028434],
    popup="<b>berger<b>",
    tooltip=""   # <- 이부분!
).add_to(m)

m

업로드중..

(문자를 넣을 수 있다.)

m = folium.Map(
    location=[40.753797889588434, -73.98436804980062],
    zoom_start=15,
    tiles="OpenStreetMap"
)

#타임스퀘어
folium.Marker((40.75882370236671, -73.98554486420437)).add_to(m) #튜플형태

#파이브가이즈
folium.Marker(
    location=[40.707168453222536, -74.00753509028434],
    popup="<b>berger<b>",
    tooltip="파이브가이즈" # <-이부분!
).add_to(m)

m

업로드중..

당연히 html 지원도 된다. 이텔릭체로 해봐야겠다.

m = folium.Map(
    location=[40.753797889588434, -73.98436804980062],
    zoom_start=15,
    tiles="OpenStreetMap"
)

#타임스퀘어
folium.Marker((40.75882370236671, -73.98554486420437)).add_to(m) #튜플형태

#파이브가이즈
folium.Marker(
    location=[40.707168453222536, -74.00753509028434],
    popup="<b>berger<b>",
    tooltip="<i>파이브가이즈<i>" # <- 이부분!
).add_to(m)

m

업로드중..

신기하다.................

이번에는 하나를 더 만들어서 popup 을 클릭하면 해당 링크(홈페이지 등) 으로 넘어가게끔 해주겠다.

m = folium.Map(
    location=[40.753797889588434, -73.98436804980062],
    zoom_start=15,
    tiles="OpenStreetMap"
)

#타임스퀘어
folium.Marker((40.75882370236671, -73.98554486420437)).add_to(m) #튜플형태

#파이브가이즈
folium.Marker(
    location=[40.707168453222536, -74.00753509028434],
    popup="<b>berger<b>",
    tooltip="<i>파이브가이즈<i>"
).add_to(m)

#트리니티 교회
folium.Marker(
    location=[40.70800710289007, -74.01140001297648],
    popup='<a href= "https://maps.app.goo.gl/ofVBTZkR1ENb5GeH9" target=_"blink">트리니티교회</a>', #새창을 띄워주는 역할 : target=_
    tooltip="Trinity Church"
).add_to(m)

m

나는 트리니티 교회를 하나 더 찍어보았다.

업로드중..

marker 가 하나 더 생긴 것을 볼 수 있다.
저렇게 클릭할 수 있도록 밑줄이 쳐져있고, 실제로 클릭하면 내가 원했던 링크로 '새창' 을 띄워준다. 저기에 target=_"blink" 를 하지 않으면 내가 있는 창에서 이동하기 때문에 필수적으로 써주어야 한다.

folium.Icon()

m = folium.Map(
    location=[40.753797889588434, -73.98436804980062],
    zoom_start=15,
    tiles="OpenStreetMap"
)

#icon basic
folium.Marker((40.75882370236671, -73.98554486420437),
              icon=folium.Icon(color='black', Icon='info_sign')).add_to(m)

#icon icon_color
folium.Marker(
    location=[40.75882370236671, -73.98554486420437],
    popup="<b>타임스퀘어</b>",
    icon=folium.Icon(
        color="red",
        icon_color="pink",
        icon="cloud"
    )
).add_to(m)

# #타임스퀘어
# folium.Marker((40.75882370236671, -73.98554486420437)).add_to(m) #튜플형태

#파이브가이즈
folium.Marker(
    location=[40.707168453222536, -74.00753509028434],
    popup="<b>berger<b>",
    tooltip="<i>파이브가이즈<i>"
).add_to(m)

#트리니티 교회
folium.Marker(
    location=[40.70800710289007, -74.01140001297648],
    popup='<a href= "https://maps.app.goo.gl/ofVBTZkR1ENb5GeH9" target=_"blink">트리니티교회</a>', #새창을 띄워주는 역할 : target=_
    tooltip="Trinity Church"
).add_to(m)

m

업로드중..

이렇게 아이콘의 모양과 색상도 변화를 줄 수 있다.

위의 코드에서 icon_basic 부분과 icon icon_color 부분을 보면 된다.

이번에는 다른 아이콘도 한 번 추가해 보겠다.

# icon custom
folium.Marker(
    location=[40.707168453222536, -74.00753509028434], #파이브가이즈
    popup='파이브가이즈',
    tooltip='Icon custom',
    icon=folium.Icon(
        color="purple",
        icon_color="green",
        icon="bookmark"
    )
).add_to(m)

위에 코드에 이 코드만 추가해 보았다.

업로드중..

파이브가이즈쪽 지도를 보니 이렇게 예쁜 마커로 재탄생 한 것을 볼 수 있다!
뒤에 입체감이 보이는 건 원래 코드를 지우지 않고 같이 실행해서 그렇다.

  • icon 같은 경우는 font awesome 이라는 홈페이지에서 무료아이콘 사용도 가능하다.
  • icon="android",
    angle=50, #기울기
    prefix="fa" #default 값은 glyphicon 이다. fa로 해주어야 font awesome 무료아이콘 사용 가능. glyphicon 도 홈페이지가 있고, glyphicon 되어있다면 그 홈페이지 아이콘을 사용해야 함.
m = folium.Map(
    location=[40.753797889588434, -73.98436804980062],
    zoom_start=15,
    tiles="OpenStreetMap"
)

#icon basic
folium.Marker((40.75882370236671, -73.98554486420437),
              icon=folium.Icon(color='black', Icon='info_sign')).add_to(m)

#icon icon_color
folium.Marker(
    location=[40.75882370236671, -73.98554486420437],
    popup="<b>타임스퀘어</b>",
    icon=folium.Icon(
        color="red",
        icon_color="pink",
        icon="cloud"
    )
).add_to(m)

# #타임스퀘어
# folium.Marker((40.75882370236671, -73.98554486420437)).add_to(m) #튜플형태

#파이브가이즈
folium.Marker(
    location=[40.707168453222536, -74.00753509028434],
    popup="<b>berger<b>",
    tooltip="<i>파이브가이즈<i>"
).add_to(m)

#트리니티 교회
folium.Marker(
    location=[40.70800710289007, -74.01140001297648],
    popup='<a href= "https://maps.app.goo.gl/ofVBTZkR1ENb5GeH9" target=_"blink">트리니티교회</a>', #새창을 띄워주는 역할 : target=_
    tooltip="Trinity Church"
).add_to(m)

# icon custom
folium.Marker(
    location=[40.707168453222536, -74.00753509028434], #파이브가이즈
    popup='파이브가이즈',
    tooltip='Icon custom',
    icon=folium.Icon(
        color="purple",
        icon_color="white",
        icon="glyphicon glyphicon-cloud",
        angle=50, #기울기
        prefix="glyphicon" #default 값은 gliphycon "fa" 라는 값으로 해야 font awesome에서의 아이콘을 대부분 사용할 수 있다. 
)
).add_to(m)

m

업로드중..

마지막으로 파이브가이즈에 glyphicon 으로 icon 을 custom 하여 그려보았다.

profile
AI 개발자로 가는 길 두렵지 않아요

0개의 댓글