# Windows, mac(intel, M1)
!pip install folium
# Windows
!pip install charset
!pip install charset-normalizer
import folium
import pandas as pd
import json
location: tuple or list, default None Latitude and Longitude of Map (Northing, Easting).
지도의 위도, 경도를 리스트나 튜플 형태
m = folium.Map(location=[37.5445690, 127.0559740], zoom_start=15) # zoom_start 0 - 18
m
웹으로 저장이 가능하다.
m.save("./folium.html")
지도가 나오는 스타일을 나타내는 옵션
m = folium.Map(
location=[37.5445690, 127.0559740],
zoom_start=15, # zoom_start 0 - 18
tiles="Stamen Toner",
)
m
m = folium.Map(
location=[37.5445690, 127.0559740],
zoom_start=15, # zoom_start 0 - 18
tiles="CartoDB positron",
)
m
m = folium.Map(
location=[37.5445690, 127.0559740],
zoom_start=15, # zoom_start 0 - 18
tiles="Stamen Watercolor",
)
m
지도에 마커 생성
m = folium.Map(
location=[37.5445690, 127.0559740], # 성수역
zoom_start=15, # zoom_start 0 - 18
tiles="OpenStreetMap",
)
# 뚝섬역
folium.Marker((37.547206, 127.047405)).add_to(m)
# 성수역
# popup - 클릭 시 글자가 나옴
folium.Marker(
location=[37.5445690, 127.0559740],
popup="<b>Subway</b>", # html 문법 적용가능
).add_to(m)
#tooltip - 마우스 가까이 다가가면 성수역 표시
folium.Marker(
location=[37.5445690, 127.0559740],
popup="<b>Subway</b>", # html 문법 적용가능
tooltip="<i>성수역</i>"
).add_to(m)
# html
folium.Marker(
location=[37.5447394, 127.0593341],
popup="<a href='https://zero-base.co.kr/' target=_'blick'>제로베이스</a>",
# html 문법 적용가능, target: 새 창 띄우기
tooltip="<i>Zerobase</i>" # 마우스 가까이 다가가면 성수역 표시
).add_to(m)
m
# 뚝섬역
# icon basic
folium.Marker(
(37.547206, 127.047405),
icon=folium.Icon(color="black", icon="info-sign")
).add_to(m)
# 성수역
# icon icon_color
folium.Marker(
location=[37.5445690, 127.0559740],
popup="<b>Subway</b>", # html 문법 적용가능
icon=folium.Icon(
color="red",
icon_color="blue",
icon="cloud",
)
).add_to(m)
# 건대입구역
# icon custom
folium.Marker(
location=[37.540372, 127.069276],
popup="건대입구역",
tooltip="Icon custom",
icon=folium.Icon(
color="purple",
icon_color="green",
icon="home",
angle=50, # 각도
prefix="fa",
# 두가지 타입이 있다. glyphicon, fa -> google에 사이트 검색하면 아이콘 이름 알 수 있따.
),
).add_to(m)
m = folium.Map(
location=[37.5445690, 127.0559740], # 성수역
zoom_start=15, # zoom_start 0 - 18
tiles="OpenStreetMap",
)
# 뚝섬역
# icon basic
folium.Marker(
(37.547206, 127.047405),
icon=folium.Icon(color="black", icon="info-sign")
).add_to(m)
# 성수역
# icon icon_color
folium.Marker(
location=[37.5445690, 127.0559740],
popup="<b>Subway</b>", # html 문법 적용가능
icon=folium.Icon(
color="red",
icon_color="blue",
icon="cloud",
)
).add_to(m)
# 건대입구역
# icon custom
folium.Marker(
location=[37.540372, 127.069276],
popup="건대입구역",
tooltip="Icon custom",
icon=folium.Icon(
color="purple",
icon_color="green",
icon="home",
angle=50,
prefix="fa", # glyphicon, fa
),
).add_to(m)
m
glyphicon type icon
fontawesome icon (*free 탭 안에)
지도위에 마우스로 클릭했을 때 마커를 생성해준다.
m = folium.Map(
location=[37.5445690, 127.0559740], # 성수역
zoom_start=15, # zoom_start 0 - 18
tiles="OpenStreetMap",
)
m.add_child(folium.ClickForMarker())
지도위에 마우스로 클릭했을 때 위도, 경도를 반환해준다.
m = folium.Map(
location=[37.5445690, 127.0559740], # 성수역
zoom_start=15, # zoom_start 0 - 18
tiles="OpenStreetMap",
)
m.add_child(folium.LatLngPopup())
지도에서 원형으로 표시해주는 기능
m = folium.Map(
location=[37.5445690, 127.0559740], # 성수역
zoom_start=15, # zoom_start 0 - 18
tiles="OpenStreetMap",
)
# Circle
folium.Circle(
location=[37.5555961, 127.0436859], # 한양대역
radius=100, # 반지름
fill=False, # 원 안에 채울 것인가?
).add_to(m)
m
fill=True
추가 옵션
m = folium.Map(
location=[37.5445690, 127.0559740], # 성수역
zoom_start=15, # zoom_start 0 - 18
tiles="OpenStreetMap",
)
# Circle
folium.Circle(
location=[37.5555961, 127.0436859], # 한양대역
radius=100, # 반지름
fill=True, # 원 안에 채울 것인가?
color="#eb9e34",
fill_color="red",
popup="Circle Popup",
tooltip="Circle Tooltip",
).add_to(m)
m
m = folium.Map(
location=[37.5508156, 127.0441579],
zoom_start=15, # zoom_start 0 - 18
tiles="OpenStreetMap",
)
# Circle
folium.Circle(
location=[37.5555961, 127.0436859], # 한양대역
radius=100, # 반지름
fill=True, # 원 안에 채울 것인가?
color="#eb9e34",
fill_color="red",
popup="Circle Popup",
tooltip="Circle Tooltip",
).add_to(m)
# CircleMarker
folium.CircleMarker(
location=[37.5508156, 127.0441579],
radius=30, # 반지름
fill=True, # 원 안에 채울 것인가?
color="#34ebc6",
fill_color="c634eb",
popup="CircleMarker Popup",
tooltip="CircleMarker Tooltip",
).add_to(m)
m
확대할수록 크기가 달라지는 것 같다.
import json
state_data = pd.read_csv("../data/02. US_Unemployment_Oct2012.csv")
state_data.tail(2)
m = folium.Map([43, -102], zoom_start=3)
folium.Choropleth(
geo_data="../data/02. us-states.json", # 경계선 좌표값이 담긴 데이터
data=state_data, # Series or DataFrame
columns=["State", "Unemployment"], # DataFrame columns
key_on="feature.id",
fill_color="BuPu",
fill_opacity=1, # 0-1 투명도
line_opacity=1, # 0-1
legend_name="Unemployment rate (%)",
).add_to(m)
m
주마다 경계선이 그려지고 범죄율 데이터에 따라 색이 달라진다.
import pandas as pd
df = pd.read_csv("../data/02. 서울특별시 동작구_주택유형별 위치 정보 및 세대수 현황_20210825.csv", encoding="cp949") # 한글 encoding
df.tail(2)
df.info()
# NaN 데이터 제거
df = df.dropna()
df.info()
df = df.reset_index(drop=True) # 인덱스를 컬럼으로 추가하지 않겠다.
df.tail(2)
del df["연번"]
연번 뒤에 띄어쓰기가 되어 있는 것을 알 수 있다.
df = df.rename(columns={"연번 ": "연번", "분류 ": "분류"})
df.연번[:10]
-> 이제 del df["연번"]
이 잘 적용되는 것을 볼 수 있다.
# folium
m = folium.Map(location=(37.4988794, 126.9516345), zoom_start=13)
for idx, rows in df.iterrows():
# location
lat, lng = rows.위도, rows.경도
# Marker
folium.Marker(
location=[lat, lng],
popup=rows.주소,
tooltip=rows.분류,
icon=folium.Icon(
icon="home",
color= "lightred" if rows.세대수 >= 199 else "lightblue",
icon_color="darkred" if rows.세대수 >= 199 else "darkblue",
),
).add_to(m)
# circle - 세대수가 많으면 pink, 적으면 green
folium.Circle(
location=[lat, lng],
radius=rows.세대수 * 0.5,
fill=True,
color = "pink" if rows.세대수 >= 518 else "green",
fill_color = "pink" if rows.세대수 >= 518 else "green",
).add_to(m)
m
"이 글은 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."