๋ฌ๋์คํผ์ฆ ์์ ์ ๋ฆฌ
< ์ด์ ๊ธ >
https://silvercoding.tistory.com/60?category=965020
[์๊ฐํ ๋ถ์ ํ๋ก์ ํธ] 3-1 open API ์ ์ฒญ & ํ์ฉ (์์ธ ์ด๋ฆฐ๋ฐ์ดํฐ ๊ด์ฅ)
๋ฌ๋์คํผ์ฆ ์์ ์ ๋ฆฌ < ์ด์ ๊ธ > https://silvercoding.tistory.com/59 https://silvercoding.tistory.com/58 https://silvercoding.tistory.com/57 https://silvercoding.tistory.com/56 https://silvercoding...
silvercoding.tistory.com
์ด๋ฒ ํฌ์คํ ์์๋ ์ด์ ๊ธ์์ ์์ฑํ ํ์ผ๊ณผ folium ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์์ธ์ ๋ฐ๋ฆ์ด ์ง๋๋ฅผ ์์ฑํ๋ค.
<folium ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ จ ํฌ์คํ >
https://silvercoding.tistory.com/53?category=965020
[python ์๊ฐํ] 2. ์์ธ์ ๋ํผ์ ํํฉ ์ง๋ ๋ง๋ค๊ธฐ , ์ง๋ ์๊ฐํ ( folium ๋ผ์ด๋ธ๋ฌ๋ฆฌ )
๋ฌ๋์คํผ์ฆ ์์ ์ ๋ฆฌ < ์ด์ ๊ธ > https://silvercoding.tistory.com/52 [python ์๊ฐํ] 1. seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ (distplot, relplot, jointplot, pairplot, boxplot, swarmplot, heatmap) ๋ฌ๋์คํผ ์์ ์ ๋ฆฌ..
silvercoding.tistory.com
๋ฐ์ดํฐ์ ๋ถ๋ฌ์ค๊ธฐ
import pandas as pd
data = pd.read_excel('./data/bicycle.xlsx')
data.head()
์์ธ์ ๋ฐ๋ฆ์ด ์ง๋ ์๊ฐํ
import folium
- ์ง๋ ์์ฑ
m = folium.Map(location = ['37.5536067','126.9674308'], zoom_start = 13) # ์์ธ์ญ ์ค์ฌ
m
์์ธ์ญ์ ์๋, ๊ฒฝ๋๋ฅผ ์ด์ฉํ์ฌ ์ง๋๋ฅผ ์์ฑํ๋ค. zoom_start ์ธ์๋ฅผ ์ด์ฉํ์ฌ ํ๋ ์ ๋๋ฅผ ์ค์ ํ ์ ์๋ค.
- ์ง๋์ ํ์ํ ๋ฐ์ดํฐ ํ์ธ
for i in range(len(data)):
name = data.loc[i, 'stationName']
available = data.loc[i, 'parkingBikeTotCnt']
total = data.loc[i, 'rackTotCnt']
lat = data.loc[i, 'stationLatitude']
long = data.loc[i, 'stationLongitude']
print(name, available, total, lat, long)
์ง๋์์ฑ์ ํ์ํ ์ปฌ๋ผ์ ๋ฐ์ดํฐ๋ง ์ถ์ถํ์ฌ ์ถ๋ ฅํ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ๋ง์ปค๋ฅผ ์ถ๊ฐํ์ฌ ์ง๋๋ฅผ ์์ฑํ๋ค.
# ์ง๋ ์์ฑํ๊ธฐ
m = folium.Map(location = ['37.5536067','126.9674308'], zoom_start = 13)
# ๋ง์ปค ์ถ๊ฐํ๊ธฐ
for i in range(len(data)):
lat = data.loc[i, 'stationLatitude']
long = data.loc[i, 'stationLongitude']
name = data.loc[i, 'stationName']
available = int(data.loc[i, 'parkingBikeTotCnt'])
total = int(data.loc[i, 'rackTotCnt'])
# ์์ ๊ฑฐ ์๋์ ๋ํด ์์์ผ๋ก ํ์
## ์์ ๊ฑฐ ๋ณด์ ์จ์ด 50% ์ด๊ณผ์ผ ๊ฒฝ์ฐ --> ํ๋์
## ํ์ฌ ์์ ๊ฑฐ๊ฐ 2๋ ๋ณด๋ค ์ ์ ๊ฒฝ์ฐ --> ๋นจ๊ฐ์
## ๊ทธ ์ธ์ ๊ฒฝ์ฐ(์์ ๊ฑฐ 2๋ ์ด์ ์ด๋ฉด์, ์์ ๊ฑฐ ๋ณด์ ์จ 50% ๋ฏธ๋ง) --> ์ด๋ก์
if available/total > 0.5:
color = 'blue'
elif available < 2 :
color = 'red'
else:
color = 'green'
icon=folium.Icon(color=color, icon='info-sign')
folium.Marker(location = [lat, long],
tooltip = f"{name} : {available}",
icon = icon
).add_to(m)
m
ํ์ฌ ์์ ๊ฑฐ ์ด์ฉ ํํฉ์ ๋ ์ง๊ด์ ์ผ๋ก ๋ณด๊ธฐ ์ํด ์๊น ์ค์ ์ ํด์ค๋ค. ํ๋์์ ๋์ฌ ๊ฐ๋ฅ ์์ ๊ฑฐ 50% ์ด์, ๋นจ๊ฐ์์ 2๊ฐ ๋ฏธ๋ง์ผ ๋, ์ด๋ก์์ ๊ทธ ์ด์ธ์ ์ค๊ฐ ์ํ๋ฅผ ๋ํ๋ธ๋ค. ๋ํ, tooltip์ ์ฌ์ฉํ์ฌ ๋ง์ฐ์ค๋ฅผ ๊ฐ๋ค๋๋ฉด ์์ ๊ฑฐ ๋์ฌ์ ์ด๋ฆ๊ณผ ์ด์ฉ๊ฐ๋ฅํ ์์ ๊ฑฐ ์๋ฅผ ๋ณด์ฌ์ค๋ค.
๋ฌธ์ ์ : ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง์ ์ง๋๋ฅผ ๋ณด๋ ๋ฐ ์ด๋ ค์์ด ์๋ค.
ํด๊ฒฐ๋ฐฉ์ : ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทผ์ ํ ๋ง์ปค๋ค๋ผ๋ฆฌ ์๋ก ๋ฌถ์ด์ค๋ค.
ํด๋ฌ์คํฐ & ๋ฏธ๋๋งต ์ถ๊ฐํ์ฌ ์ง๋ ์๊ฐํ
from folium.plugins import MiniMap, MarkerCluster
# ์ง๋ ์์ฑํ๊ธฐ
m_ver2 = folium.Map(location = ['37.5536067','126.9674308'], zoom_start = 13)
# ๋ฏธ๋๋งต ์ถ๊ฐํ๊ธฐ
minimap = MiniMap()
m_ver2.add_child(minimap)
# ๋ง์ปค ํด๋ฌ์คํฐ ๋ง๋ค๊ธฐ
marker_cluster_ver2 = MarkerCluster().add_to(m_ver2) # ํด๋ฌ์คํฐ ์ถ๊ฐํ๊ธฐ
# ๋ง์ปค ์ถ๊ฐํ๊ธฐ
for i in range(len(data)):
lat = data.loc[i, 'stationLatitude']
long = data.loc[i, 'stationLongitude']
name = data.loc[i, 'stationName']
available = int(data.loc[i, 'parkingBikeTotCnt'])
total = int(data.loc[i, 'rackTotCnt'])
# ์์ ๊ฑฐ ์๋์ ๋ํด ์์์ผ๋ก ํ์
## ์์ ๊ฑฐ ๋ณด์ ์จ์ด 50% ์ด๊ณผ์ผ ๊ฒฝ์ฐ --> ํ๋์
## ํ์ฌ ์์ ๊ฑฐ๊ฐ 2๋ ๋ณด๋ค ์ ์ ๊ฒฝ์ฐ --> ๋นจ๊ฐ์
## ๊ทธ ์ธ์ ๊ฒฝ์ฐ(์์ ๊ฑฐ 2๋ ์ด์ ์ด๋ฉด์, ์์ ๊ฑฐ ๋ณด์ ์จ 50% ๋ฏธ๋ง) --> ์ด๋ก์
if available/total > 0.5:
color = 'blue'
elif available < 2 :
color = 'red'
else:
color = 'green'
icon=folium.Icon(color=color, icon='info-sign')
# print(name, available, total, lat, long)
folium.Marker(location = [lat, long],
tooltip = f"{name} : {available}",
icon = icon
).add_to(marker_cluster_ver2)
m_ver2
ํด๋ฌ์คํฐ์ ๋ฏธ๋๋งต์ ์ถ๊ฐํ ์ง๋์ด๋ค. ์ซ์๋ฅผ ํด๋ฆญํ๋ฉด ํด๋น ์ง์ญ์ผ๋ก ํ๋๋์ด ๋ ํธ๋ฆฌํ๊ณ ์ง๊ด์ ์ธ ์ง๋๋ฅผ ๋ณผ ์ ์๋ค.
m_ver2.save('./map/bicycle_clustermap.html')
์ง๋๋ html๋ก ์ ์ฅํ์ฌ ์ธ์ ๋ ๊บผ๋ด๋ณผ ์ ์๋ค.