2022-09-05

jmยท2022๋…„ 9์›” 14์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
17/22

๐Ÿ“Œ ๊ณผ์ œ๋ฆฌ๋ทฐ

โœ๏ธ ์ง‘๊ณ„ํ•จ์ˆ˜ -> value_counts(), sum() ...

โœ๏ธ groupby -> ex. df.groupby(['๋ฐœ์ƒ์ง€์‹œ๋„'])['์‚ฌ๋ง์ž์ˆ˜'].sum()

โœ๏ธ ์ •๋ ฌ - sort ์‚ฌ์šฉ

ex1. df.groupby(['๋ฐœ์ƒ์ง€์‹œ๋„'])['์‚ฌ๋ง์ž์ˆ˜'].sum().sort_values(ascending=False)
ex2. group_df = df.groupby(['๋ฐœ์ƒ์ง€์‹œ๋„'])[['์‚ฌ๋ง์ž์ˆ˜','๋ถ€์ƒ์ž์ˆ˜','์‚ฌ์ƒ์ž์ˆ˜']].sum().sort_values(by='์‚ฌ๋ง์ž์ˆ˜',ascending=False)

-> '๋ฐœ์ƒ์ง€์‹œ๋„'๊ฐ€ ์ธ๋ฑ์Šค๊ฐ€ ๋จ, by=' '์„ ๊ธฐ์ค€์œผ๋กœ sort
(+) group_df.T -> ์ฐจํŠธ๊ฐ€ ์„ธ๋กœํ˜•ํƒœ์ธ ๊ฒƒ์„ ๊ฐ€๋กœ ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์–ด์คŒ

โœ๏ธ ๊ทธ๋ž˜ํ”„

import matplotlib.pyplot as plt

plt.rcParams['figure.figsize']
plt.style.use('ggplot')
group_df[].T.plot.bar()
plt.show()

๐Ÿ“Œ ๋‚ด ์ฃผ๋ณ€ ๋ฌด๋ฃŒ ์™€์ดํŒŒ์ด ์ง€๋„ ์‹œ๊ฐํ™”

(์œ„์— ์ ์€ ๊ฒƒ๋“ค์„ ํ™œ์šฉํ•ด์„œ .. )

โœ… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ ๋ฐ ๋ฐ์ดํ„ฐ ์ค€๋น„ํ•˜๊ธฐ

import folium
import pandas as pd
import plotly.express as px

data = pd.read_csv('/content/dataset.csv', encoding='EUC-KR')
data.isna().sum() # ๋ˆ„๋ฝ ํ™•์ธ -> ์„ค์น˜๋…„์›”์ผ ๋ˆ„๋ฝ์žˆ์Œ
data.์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„.unique() -> ์„œ๋ฏผยท๋ณต์ง€์‹œ์„ค, ์„œ๋ฏผ/๋ณต์ง€์‹œ์„ค,  ์„œ๋ฏผยท๋ณต์ง€์‹œ์„ค, ์„œ๋ฏผ๋ณต์ง€์‹œ์„ค ๋กœ ์ค‘๋ณต์žˆ์Œ-> ์„œ๋ฏผ๋ณต์ง€์‹œ์„ค(์ „์ฒ˜๋ฆฌ)
data.loc[data.์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„.str.contains('์„œ๋ฏผ'), '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„'] = '์„œ๋ฏผ๋ณต์ง€์‹œ์„ค'

โœ… ๋ฐ์ดํ„ฐ ๋ถ„์„ํ•˜๊ธฐ

# ์„ค์น˜์‹œ๋„๋ณ„ ๋ฌด๋ฃŒ WIFI ์„ค์น˜ ํ˜„ํ™ฉ ์ˆ˜
data['์„ค์น˜์‹œ๋„๋ช…'].value_counts()

# ์„ค์น˜์‹œ๋„๋ณ„, ์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„, ์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ช… ๋ฌด๋ฃŒ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
group_data = data.groupby(by=['์„ค์น˜์‹œ๋„๋ช…', '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„', '์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ช…']).size().reset_index(name='์ด์„ค์น˜์ˆ˜') 

size()๋Š” ์ด ๊ฐ’์„ ๊ณ„์‚ฐํ•ด์ฃผ์ง€๋งŒ ์‹œ๋ฆฌ์ฆˆํ˜•ํƒœ๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.(count๋Š” ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„)๊ทธ๋ž˜์„œ reset_index๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋Ÿผ์œผ๋กœ ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๊ณ  ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ํ˜•ํƒœ๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋˜ name=''์„ ํ†ตํ•ด ์ด ๊ฐ’ ์ปฌ๋Ÿผ์— ์ด๋ฆ„์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.


โœ… ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”ํ•˜๊ธฐ

# ์„ค์น˜์‹œ๋„๋ณ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
px.histogram(group_data, x='์„ค์น˜์‹œ๋„๋ช…', y='์ด์„ค์น˜์ˆ˜')

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์„ค์น˜์‹œ์„ค๋ณ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
px.histogram(group_data, x='์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„', y='์ด์„ค์น˜์ˆ˜')

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ณ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
px.histogram(group_data, x='์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ช…', y='์ด์„ค์น˜์ˆ˜')

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์‹œ๋„์— ๋”ฐ๋ฅธ ์„ค์น˜์‹œ์„ค๋ณ„ ์™€์ดํŒŒ์ด ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.histogram(data, x='์„ค์น˜์‹œ๋„๋ช…', color='์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์„ค์น˜์‹œ๋„๋ณ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.pie(group_data, names='์„ค์น˜์‹œ๋„๋ช…', values='์ด์„ค์น˜์ˆ˜')
fig.show()

์—ฌ๊ธฐ์—

colors = ['gold', 'mediumturquoise', 'darkorange', 'lightgreen']  # ์ƒ‰์ง€์ •
fig.update_traces(textposition='inside', textinfo='percent+label', hoverinfo='value', textfont_size=20,
                  marker=dict(colors=colors, line=dict(color = '#000000', width=2)))

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ปค์Šคํ…€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
(textposition์„ 'inside'๋กœ ์ง€์ •ํ•˜์—ฌ ํŒŒ์ด์ฐจํŠธ ๋‚ด๋ถ€์— ํผ์„ผํŠธ๋‚˜ ์ด ๊ฐ’์ด ๋ฌด์—‡์ธ์ง€ textinfo๋ฅผ ํ†ตํ•ด ๋ช…์‹œ๊ฐ€๋Šฅํ•˜๋‹ค. hover๋Š” ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๊ฐ€์ ธ๋‹ค๋Œ€์—ˆ์„๋•Œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.)

๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.


# ์„ค์น˜์‹œ์„ค๋ณ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.pie(group_data, names='์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„', values='์ด์„ค์น˜์ˆ˜')
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ

โœ”๏ธ ๋Œ€์ „์‹œ ๋ฌด๋ฃŒ ์™€์ดํŒŒ์ด ํ˜„ํ™ฉ ๋ถ„์„

dj_df = data.loc[data['์„ค์น˜์‹œ๋„๋ช…']=='๋Œ€์ „๊ด‘์—ญ์‹œ']
dj_df.info()

๋Œ€์ „์‹œ ๋ฐ์ดํ„ฐ๋งŒ ๋”ฐ๋กœ ์ถ”์ถœํ•˜์—ฌ ์ €์žฅ

# ์‹œ๊ตฐ๊ตฌ์— ๋”ฐ๋ฅธ ์„ค์น˜์‹œ์„ค๋ณ„ ์™€์ดํŒŒ์ด ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.histogram(dj_df, x='์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…', color='์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์‹œ๊ตฐ๊ตฌ์— ๋”ฐ๋ฅธ ๊ด€๋ฆฌ๊ธฐ๊ด€๋ณ„ ์™€์ดํŒŒ์ด ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.histogram(dj_df, x='์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…', color='๊ด€๋ฆฌ๊ธฐ๊ด€๋ช…')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์ง‘๊ณ„๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๋งŒ๋“ค ๋•Œ, ๊ธฐ์ค€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ปฌ๋Ÿผ์„ ๋ชจ๋‘ groupby ํ•˜์ž
# ํ•ฉ์ณ์„œ ์‹œ๊ฐํ™”๋Š” ์ฐจํŠธ์—์„œ ์ œ๊ณต ํ•ด์คŒ
group_dj = dj_df.groupby(by=['์„ค์น˜๋…„์›”', '์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…', '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„', '์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ช…', '๊ด€๋ฆฌ๊ธฐ๊ด€๋ช…']).size().reset_index(name='์ด์„ค์น˜์ˆ˜')

groupby ํ›„ ์‹œ๊ฐํ™”

# ์‹œ๊ตฐ๊ตฌ๋ณ„ WIFI ์„ค์น˜ ์ˆ˜์™€ ์„ค์น˜์‹œ์„ค ๊ตฌ๋ถ„
fig = px.histogram(group_dj, x='์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…', y='์ด์„ค์น˜์ˆ˜', color='์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ
์œ„์—์„œ groupby ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ธ์„ ๋•Œ์™€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.
(์•„๋งˆ groupby ํ•˜๋ฉด์„œ ๋„๊ฐ’๋“ค์ด ์žˆ๋˜ ํ–‰๋“ค์€ ๋‹ค ๋‚ ๋ผ๊ฐ€์„œ ๊ทธ๋Ÿฐ๊ฑฐ๊ฐ™๋‹ค)


# ์‹œ๊ตฐ๊ตฌ๋ณ„ WIFI ์„ค์น˜ ์ˆ˜์™€ ์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ช…
fig = px.histogram(group_dj, x='์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…', y='์ด์„ค์น˜์ˆ˜', color='์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ช…')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์‹œ๊ตฐ๊ตฌ๋ณ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.pie(group_dj, names='์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…', values='์ด์„ค์น˜์ˆ˜')
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.pie(group_dj, names='์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„', values='์ด์„ค์น˜์ˆ˜')
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ณ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.pie(group_dj, names='์„œ๋น„์Šค์ œ๊ณต์‚ฌ๋ช…', values='์ด์„ค์น˜์ˆ˜')
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ


# ๊ด€๋ฆฌ๊ธฐ๊ด€๋ณ„ WIFI ์„ค์น˜ ํ˜„ํ™ฉ
fig = px.pie(group_dj, names='๊ด€๋ฆฌ๊ธฐ๊ด€๋ช…', values='์ด์„ค์น˜์ˆ˜')
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

๐Ÿ”ผ ๊ฒฐ๊ณผ

โœ”๏ธ ๋‚ด ์œ„์น˜์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฌด๋ฃŒ ์™€์ดํŒŒ์ด ์ฐพ๊ธฐ - ์ง€๋„ ์‹œ๊ฐํ™”

# 1. ๋‚ด ์œ„์น˜ ์ขŒํ‘œ ์ฐพ๊ธฐ
# 1) folium ์ง€๋„์— clickํ•˜๋ฉด ์ขŒํ‘œ์ •๋ณด๊ฐ€ popup์œผ๋กœ ๋„์–ด์ฃผ๊ณ  ๊ทธ๊ฑธ ํ™•์ธํ•ด์„œ ๋‚ด ์œ„์น˜ ์ขŒํ‘œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
# ์ง€๋„์— ClickForMarker ํ•จ์ˆ˜์™€ LatLngPopup ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ์œ„์น˜๋ฅผ Marker ํ‘œ์ถœ

import folium

m = folium.Map(location=[36.3511, 127.3866], zoom_start=14)

# ClickForMarker ํ•จ์ˆ˜ ์ ์šฉ
m.add_child(folium.ClickForMarker(popup='point'))

# ์œ„๋„/๊ฒฝ๋„ ํŒ์—… ํ™œ์„ฑํ™” ์‹œํ‚ค๋„๋ก ์ ์šฉ -> ์ง€๋„๋ฅผ ํƒ์ƒ‰ํ•ด์„œ ์ขŒํ‘œ๊ฐ’ ์ฐพ๋Š”๋ฐ ๋„์›€
m.add_child(folium.LatLngPopup())

๐Ÿ”ผ ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณด๊ณ  ์‹ถ์€ ์œ„์น˜์˜ ๊ฒฝ๋„ ์œ„๋„ ์ขŒํ‘œ ์ •๋ณด๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.


# 2) ๋„๋กœ๋ช… ์ฃผ์†Œ -> ์ขŒํ‘œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜
from geopy.geocoders import Nominatim

def geocoding(address):
  geolocoder = Nominatim(user_agent = 'South Korea', timeout=None)
  geo = geolocoder.geocode(address)
  crd = {"lat":str(geo.latitude), "lng":str(geo.longitude)}

  return crd

crd = geocoding('์„œ์šธ ์ข…๋กœ๊ตฌ ์‚ฌ์ง๋กœ 161')
print(crd['lat'])
print(crd['lng'])

๐Ÿ”ผ ๊ฒฝ๋„์™€ ์œ„๋„๋ฅผ ์ถ”์ถœํ•ด๋‚ด๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ address๋ฅผ ์ž…๋ ฅํ•˜๋ฉด

์œ„์™€ ๊ฐ™์ด ์œ„๋„ ๊ฒฝ๋„ ์ •๋ณด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

myhome = folium.Map(location=[crd['lat'],crd['lng']], zoom_start=14)

folium.Marker([crd['lat'],crd['lng']], icon=folium.Icon(color='red', icon='glyphicon glyphicon-home')).add_to(myhome)
myhome

์œ„์˜ ๊ฒฝ๋„ ์œ„๋„ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ง€๋„ ์‹œ๊ฐํ™”๋ฅผ ํ•˜๋ฉด

์ด๋Ÿฐ ์‹์œผ๋กœ ๋งˆ์ปค ํ‘œ์‹œ ๊ฐ€๋Šฅ.


# 2. ๋‚˜๋ž‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด WIFI ์ฐพ๊ธฐ
from geopy.distance import geodesic

# 1) ๋ฌด๋ฃŒ WIFI ์œ„์น˜ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
my_wifi = pd.DataFrame(columns=['์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…', '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„', '์œ„๋„', '๊ฒฝ๋„', '๊ฑฐ๋ฆฌ'])

myhome = (37.5759183, 126.9768292702487)

for n in data.index:
  wifi_loc = (data.loc[n, '์œ„๋„'], data.loc[n, '๊ฒฝ๋„'])  # tuple ํ˜•ํƒœ
  print(type(wifi_loc))

  # 2) my_wifi dataframe์— ๋‹ด๊ธฐ
  my_wifi.loc[n] = [data.loc[n, '์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…'], data.loc[n, '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„'], data.loc[n, '์œ„๋„'], data.loc[n, '๊ฒฝ๋„'], geodesic(myhome, wifi_loc).kilometers]

์œ„์—์„œ ๊ตฌํ•œ ์ขŒํ‘œ ๋ฐ์ดํ„ฐ๋ฅผ ํ† ๋Œ€๋กœ ์ฃผ๋ณ€ ๋ฌด๋ฃŒ ์™€์ดํŒŒ์ด ์ง€๋„์‹œ๊ฐํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด๋ฃŒ ์™€์ดํŒŒ์ด ๋ฐ์ดํ„ฐ์˜ ์œ„๋„, ๊ฒฝ๋„ ์ •๋ณด๋ฅผ ํŠœํ”Œํ˜•ํƒœ๋กœ ์ €์žฅ.
๋˜, myhome(๋‚ด ์œ„์น˜)์™€ wifi_loc(์™€์ดํŒŒ์ด ์œ„์น˜)์˜ ๊ฑฐ๋ฆฌ ์ฐจ๋ฅผ ์ž„ํฌํŠธํ•œ geodesic์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ ๊ฑฐ๋ฆฌ ์ปฌ๋Ÿผ์— ์ €์žฅ.

# myhome๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด WIFI top5 ๋ฝ‘๊ธฐ
my_wifi = my_wifi.sort_values(by=['๊ฑฐ๋ฆฌ']).head(10)
my_wifi

๊ทธ ํ›„ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ทธ ์ค‘ ์ƒ์œ„ 10๊ฐœ๋งŒ ์ €์žฅํ•œ๋‹ค.

my_map = folium.Map(location=[37.5759183, 126.9768292702487], zoom_start=14)

for n in my_wifi.index:
  folium.Marker([my_wifi.loc[n, '์œ„๋„'], my_wifi.loc[n, '๊ฒฝ๋„']],
                popup='<pre>'+my_wifi.loc[n, '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„']+'</pre>',
                icon=folium.Icon(icon='wifi', prefix='fa')).add_to(my_map)

  folium.Marker([37.5759183, 126.9768292702487], icon=folium.Icon(color='red', icon='glyphicon glyphicon-home')).add_to(my_map)

my_map

์œ„์—์„œ ์ƒ์œ„ 10๊ฐœ๋ฅผ ๋ฝ‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ† ๋Œ€๋กœ ์ง€๋„ ์‹œ๊ฐํ™”ํ•œ ๊ฒฐ๊ณผ


โœ”๏ธ ๋„๋กœ๋ช… ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ•ด๋‹น ์œ„์น˜์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฌด๋ฃŒ ์™€์ดํŒŒ์ด ์ฐพ๊ธฐ

# 1) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ
import folium
import pandas as pd
import plotly.express as px

# 2) wifi ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ค€๋น„
data = pd.read_csv('/content/dataset.csv', encoding='EUC-KR')

# 3) ์ฃผ์†Œ๋ฅผ ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•  ํ•จ์ˆ˜ ์ค€๋น„
from geopy.geocoders import Nominatim

def geocoding(address):
  geolocoder = Nominatim(user_agent = 'South Korea', timeout=None)
  geo = geolocoder.geocode(address)
  crd = {"lat":float(geo.latitude), "lng":float(geo.longitude)}

  return crd

# 4) ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ
address = input("๋‹น์‹ ์˜ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์‹œ์˜ค.")
crd = geocoding(address)

# 5) ์ฃผ์†Œ ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ tuple ํ˜•ํƒœ๋กœ ๋ณ€์ˆ˜์— ๋‹ด๊ธฐ
from geopy.distance import geodesic

myhome = folium.Map(location=[crd['lat'],crd['lng']], zoom_start=14)
my_wifi = pd.DataFrame(columns=['์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…', '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„', '์œ„๋„', '๊ฒฝ๋„', '๊ฑฐ๋ฆฌ'])

myhome = (crd['lat'], crd['lng'])

keypoint = address.split(' ')[0]
data = data.loc[data.์„ค์น˜์‹œ๋„๋ช….str.contains(keypoint)]

# 6) my_wifi dataframe์— ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ๋‹ด๊ธฐ
for n in data.index:
  wifi_loc = (data.loc[n, '์œ„๋„'], data.loc[n, '๊ฒฝ๋„'])  # tuple ํ˜•ํƒœ

  # my_wifi dataframe์— ๋‹ด๊ธฐ
  my_wifi.loc[n] = [data.loc[n, '์„ค์น˜์‹œ๊ตฐ๊ตฌ๋ช…'], data.loc[n, '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„'], data.loc[n, '์œ„๋„'], data.loc[n, '๊ฒฝ๋„'], geodesic(myhome, wifi_loc).kilometers]

# 7) ๋‚ด ์œ„์น˜์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด wifi 10๊ฐœ ๋ฝ‘๊ธฐ
my_wifi = my_wifi.sort_values(by=['๊ฑฐ๋ฆฌ']).head(10)

# 8) ์ง€๋„ ์ค€๋น„
for n in my_wifi.index:
  folium.Marker([my_wifi.loc[n, '์œ„๋„'], my_wifi.loc[n, '๊ฒฝ๋„']],
                popup='<pre>'+my_wifi.loc[n, '์„ค์น˜์‹œ์„ค๊ตฌ๋ถ„']+'</pre>',
                icon=folium.Icon(icon='wifi', prefix='fa')).add_to(my_map)
  folium.Marker([crd['lat'], crd['lng']], icon=folium.Icon(color='red', icon='glyphicon glyphicon-home')).add_to(my_map)

my_map

์œ„์—์„œ ์ž…๋ ฅํ•œ ์ฝ”๋“œ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋„๋กœ๋ช… ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž…๋ ฅ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ๋ฐ›์€ ์ฃผ์†Œ๋ฅผ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์œ„๋„ ๊ฒฝ๋„๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•˜๊ธฐ๋•Œ๋ฌธ์— ์œ„๋„ ๊ฒฝ๋„ ์ž…๋ ฅ์‹œ crd['lat], crd['lng']๋กœ ์ž…๋ ฅํ•ด์•ผํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ž…๋ ฅํ•œ ์ฃผ์†Œ ์ค‘์‹ฌ์œผ๋กœ ๋ฌด๋ฃŒ ์™€์ดํŒŒ์ด๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€