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

 

 

< ์ด์ „ ๊ธ€ > 

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

 


 

+ Recent posts