โ๏ธ ์ง๊ณํจ์ -> 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']๋ก ์ ๋ ฅํด์ผํ๋ค.
์ด๋ ๊ฒ ์ ๋ ฅํ ์ฃผ์ ์ค์ฌ์ผ๋ก ๋ฌด๋ฃ ์์ดํ์ด๊ฐ ํ์๋๋ค.