๋Ÿฌ๋‹์Šคํ‘ผ์ฆˆ ์ˆ˜์—… ์ •๋ฆฌ 

 

 

< ์ด์ „ ๊ธ€ > 

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๋กœ ์ €์žฅํ•˜์—ฌ ์–ธ์ œ๋“  ๊บผ๋‚ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

+ Recent posts