๋ฌ๋์คํผ์ฆ ์์ ์ ๋ฆฌ
< ์ด์ ๊ธ >
https://silvercoding.tistory.com/52
[python ์๊ฐํ] 1. seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ (distplot, relplot, jointplot, pairplot, boxplot, swarmplot, heatmap)
๋ฌ๋์คํผ ์์ ์ ๋ฆฌ ์์นํ x ์์นํ : scatterplot, lmplot, jointplot ์์นํ x ์นดํ ๊ณ ๋ฆฌํ : boxplot, violinplot, barplot, heatmap ์์นํ x ์์นํ : folium ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ ๋ณธ ํฌ์คํ ์์๋ seaborn ๋ผ์ด..
silvercoding.tistory.com
1. folium ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํด๋ณด๊ธฐ
folium ๋ผ์ด๋ธ๋ฌ๋ฆฌ
!pip install folium
folium ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํ๊ธฐ
import folium
folium ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํด์ค๋ค.
folium ์ง๋ ์๊ฐํ ์ฌ์ฉ ๋ฒ
์ง๋ ์๊ฐํ
- ์ง๋์์ฑํ๊ธฐ
- m = folium.Map(location = [์๋, ๊ฒฝ๋], zoom_start = ํ๋์ ๋)
- ์ ๋ณด ์ถ๊ฐํ๊ธฐ
- ๋ง์ปค ์ถ๊ฐํ๊ธฐ
- folium.Marker([์๋, ๊ฒฝ๋]).add_to(m)
- ์ ์ถ๊ฐํ๊ธฐ
- folium.CircleMarker([์๋, ๊ฒฝ๋], radius= ์ํฌ๊ธฐ).add_to(m)
- ์ถ๊ฐ์ต์
:
- tooltip="๋ง์ฐ์ค ์ฌ๋ฆฌ๋ฉด ๋ณด์ฌ์ง ์ ๋ณด"
- popup="ํด๋ฆญํ๋ฉด ๋ณด์ฌ์ง ์ ๋ณด"
- ๊ธฐํ) ClickForMarker('์ฒดํฌ').add_to(m) ์ง๋์์ ํด๋ฆญํ ๊ฒฝ์ฐ ๋ง์ปค ์ถ๊ฐํ๊ธฐ
- ๋ง์ปค ์ถ๊ฐํ๊ธฐ
์์ธ์ญ ์ง๋ ์๊ฐํ
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=12)
m
- ๋ง์ปค ์ถ๊ฐ
folium.Marker([37.5536067,126.9674308], # ์์ธ์ญ์์น
tooltip="์์ธ์ญ(๋ง์ฐ์ค์ฌ๋ฆฌ๋ฉด๋ณด์ฌ์ง)",
popup="์์ธ์ญ(ํด๋ฆญํ๋ฉด ๋ณด์ฌ์ง)",
).add_to(m)
m
tooltip๊ณผ popup์ ์ฌ์ฉํ์ฌ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ , ํด๋ฆญํ๋ฉด ๋ฉ์์ง๋ฅผ ๋์ธ ์ ์๋ค.
- ์ํด๋ง์ปค ์ถ๊ฐ
folium.CircleMarker([37.5536067,126.9674308],
radius=20,
tooltip = '๋ง์ฐ์ค์ฌ๋ฆด๊ฒฝ์ฐ'
).add_to(m)
m
- ๋ฏธ๋๋งต ์ถ๊ฐ MiniMap
from folium.plugins import MiniMap
# ์ง๋ ์์ฑํ๊ธฐ
m = folium.Map(location=[37.5536067,126.9674308], # ๊ธฐ์ค์ขํ: ์์ธ์ญ
zoom_start=12)
# ๋ฏธ๋๋งต ์ถ๊ฐํ๊ธฐ
minimap = MiniMap()
minimap.add_to(m)
# ๋ง์ปค ์ถ๊ฐํ๊ธฐ
folium.Marker([37.5536067,126.9674308], # ์์ธ์ญ์์น
tooltip="์์ธ์ญ(๋ง์ฐ์ค์ฌ๋ฆฌ๋ฉด๋ณด์ฌ์ง)",
popup="์์ธ์ญ(ํด๋ฆญํ๋ฉด ๋ณด์ฌ์ง)",
).add_to(m)
m
๋ฏธ๋๋งต์ ์์ฑํ๊ณ , add_to๋ก ์ถ๊ฐํด ์ค๋ค.
- ํด๋ฆญํด์ ๋งํฌ ์ถ๊ฐํ๊ธฐ
# ์ง๋ ์์ฑํ๊ธฐ
m = folium.Map(location=[37.5536067,126.9674308], # ๊ธฐ์ค์ขํ: ์์ธ์ญ
zoom_start=12)
# ์จํด๋ง์ปค ์ถ๊ฐํ๊ธฐ
folium.CircleMarker([37.5536067,126.9674308],
radius=20,
tooltip = '๋ง์ฐ์ค์ฌ๋ฆด๊ฒฝ์ฐ'
).add_to(m)
folium.ClickForMarker('์ฒดํฌ์ถ๊ฐ').add_to(m)
m
๋ง์ฐ์ค๋ก ํด๋ฆญํด์ ์ง์ ๋ง์ปค๋ฅผ ์ถ๊ฐํด์ค ์๋ ์๋ค. (ClickForMarker ์ฌ์ฉ)
2. ์์ฉ : ์์ธ ๋ํผ์ ํํฉ ์ง๋ ๋ง๋ค๊ธฐ
< ๋ฐ์ดํฐ ์ถ์ฒ >
http://data.seoul.go.kr/dataList/OA-2189/S/1/datasetView.do
์์ธ ์ด๋ฆฐ๋ฐ์ดํฐ๊ด์ฅ
๋ชจ๋ ์์ธ์๋ฏผ์ ์ํ ๊ณต๊ณต๋ฐ์ดํฐ ์ด๋ฆฐ๋ฐ์ดํฐ๊ด์ฅ์์ ์์ธ์์ ์ฐ๊ณ ๊ธฐ๊ด์ด ๊ณต๊ฐํ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค. ์์ธ์์ ๊ด๋ จ๋ ๋ค์ํ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ํ์ธํด ๋ณด์ธ์.
data.seoul.go.kr
import pandas as pd
DataFrame์ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ pandas๋ฅผ import ํด์ค๋ค.
file = './data/์์ธ์ ๋ํผ์ ๋ฐฉ์ฌ์์ค ํํฉ (์ขํ๊ณ_ WGS1984).csv'
raw = pd.read_csv(file, encoding = 'cp949') # encoding = 'cp949' : MS ํ๋ก๊ทธ๋จ ์ฌ์ฉ์, ๊ทธ์ธ์ ๊ฒฝ์ฐ encoding = 'utf-8' (๊ธฐ๋ณธ๊ฐ)
raw.head()
raw.info()
์์ ์์๋ ์๋, ๊ฒฝ๋๋ฅผ ์ค์ ํ์ฌ ๋ง์ปค๋ฅผ ์ถ๊ฐํ๊ณ , ๋ง์ฐ์ค๋ฅผ ๋ง์ปค ์์ ์ฌ๋ฆฌ๋ฉด ๋ํผ์ ๋ช ์นญ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ ๊น์ง ๋ฐฐ์ ๊ณ , ๊ฑฐ๊ธฐ์ ๋ํด์ ํด๋ฆญํ๋ฉด ์ต๋ ์์ฉ์ธ์์ด ๋์ค๋๋ก ํ๋ ์ง๋๋ฅผ ๋ง๋ค์ด ๋ณธ๋ค.
i = 7
lat = raw.loc[i, '์๋']
long = raw.loc[i, '๊ฒฝ๋']
name = raw.loc[i,'๋ํผ์๋ช
์นญ']
num = raw.loc[i, '์ต๋์์ฉ์ธ์']
print(lat, long, name, num)
37.5365343 126.9650202 ๋จ์ ์ด๋ฑํ๊ต 300
์ฐ์ ์ธ๋ฑ์ค๊ฐ 7์ผ ๋์ ํ์ํ ์ ๋ณด๋ฅผ ์ป์ด๋ณด๊ธฐ
for i in range(len(raw)):
lat = raw.loc[i, '์๋']
long = raw.loc[i, '๊ฒฝ๋']
name = raw.loc[i,'๋ํผ์๋ช
์นญ']
num = raw.loc[i, '์ต๋์์ฉ์ธ์']
print(name, lat, long, num)
์ด 694๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋์์ ๊ฒ์ด๋ค.
# ์ง๋ ์์ฑํ๊ธฐ
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=12)
m
# ๋ํผ์ ๋ง์ปค ์ถ๊ฐํ๊ธฐ
for i in range(len(raw)):
lat = raw.loc[i, '์๋']
long = raw.loc[i, '๊ฒฝ๋']
name = raw.loc[i,'๋ํผ์๋ช
์นญ']
num = raw.loc[i, '์ต๋์์ฉ์ธ์']
folium.Marker([lat, long],tooltip= name, popup='%d๋ช
'%num).add_to(m)
m
for๋ฌธ์ ์ด์ฉํ์ฌ ๋ํผ์ ๋ชจ๋ ๊ณณ์ ๋ง์ปค๋ฅผ ์ฐ์ด ์ค๋ค.
* ๋ฌธ์ ์ : ๋ง์ปค๊ฐ ๋๋ฌด ๋ง์์ ์ง๋๋ฅผ ์ดํด๋ณด๊ธฐ์ ์ด๋ ค์์ด ์๊ธด๋ค
* ํด๊ฒฐ : MarkerCluster ๋ฅผ ์ด์ฉํ์ฌ ๊ทผ์ฒ์ ์๋ ๋ง์ปค๋ค ๋ผ๋ฆฌ ๊ทธ๋ฃน์ผ๋ก ํํํ๋ค.
MarkerCluster ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน ์์ฑํ๊ธฐ
# ์ง๋ ์์ฑํ๊ธฐ
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=12)
marker_cluster = MarkerCluster().add_to(m) # ํด๋ฌ์คํฐ ์ถ๊ฐํ๊ธฐ
# ๋ํผ์ ๋ง์ปค ์ถ๊ฐํ๊ธฐ
for i in range(len(raw)):
lat = raw.loc[i, '์๋']
long = raw.loc[i, '๊ฒฝ๋']
name = raw.loc[i,'๋ํผ์๋ช
์นญ']
num = raw.loc[i, '์ต๋์์ฉ์ธ์']
folium.Marker([lat, long],tooltip= name, popup='%d๋ช
'%num).add_to(marker_cluster)
m
๊ทธ๋ฃน์ ํด๋ฆญํ์ฌ ์์ธํ ํ๋๊ฐ ๋๋ฉด, ๋ง์ปค๋ฅผ ๋ณผ ์ ์๋ค. ๋ณด๋ค ์ง๋๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ธํ ์ ์๊ฒ ๋์๋ค.
- ๋ฏธ๋๋งต ์ถ๊ฐ
from folium.plugins import MiniMap
# ์ง๋ ์์ฑํ๊ธฐ
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=12)
marker_cluster = MarkerCluster().add_to(m) # ํด๋ฌ์คํฐ ์ถ๊ฐํ๊ธฐ
# ๋ฏธ๋๋งต ์ถ๊ฐ
minimap = MiniMap()
m.add_child(minimap)
# ๋ํผ์ ๋ง์ปค ์ถ๊ฐํ๊ธฐ
for i in range(len(raw)):
lat = raw.loc[i, '์๋']
long = raw.loc[i, '๊ฒฝ๋']
name = raw.loc[i,'๋ํผ์๋ช
์นญ']
num = raw.loc[i, '์ต๋์์ฉ์ธ์']
folium.Marker([lat, long],tooltip= name, popup='%d๋ช
'%num).add_to(marker_cluster)
m
๋ง๋ฌด๋ฆฌ : ์ง๋ ์ ์ฅ (html)
m.save('./data/Sheltermap.html')
html๋ก ์ ์ฅํ์ฌ ํฐ ํ๋ฉด์ผ๋ก ์ธ์ ๋ ์ง๋๋ฅผ ๊บผ๋ด๋ณผ ์ ์๋ค.