2022. 3. 26. 15:16ใ๐งช Data Science/Analytics
์ฃผ๊ฐ๋ณดํธ์ผํฐ๋?
์ฅ๊ธฐ์์ ๋ฑ๊ธ์ ๋ฐ์ ์ด๋ฅด์ ๋ค์ ๋ฎ ์๊ฐ ๋์์ ๋ณดํธํ๋ฉฐ, ๊ฑฐ๋์ด ๋ถํธํ ์ด๋ฅด์ ๋ค์๊ฒ ๊ธฐ๋ฅ ๊ฐํ, ์ ์์ง์, ๊ฑด๊ฐ์ฆ์ง, ์ฌํ์ฌํ ๋ฑ์ ์ ๋ฌธํ๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ณณ์ด๋ค.
๋ถ์์ ์ด์ฉํ ์๋ฃ๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ฐ๋ น๋ณ ์ธ๊ตฌํํฉ(ํ์ ์์ ๋ถ)
2. ์ฃผ๊ฐ๋ณดํธ์ผํฐ(๋ณด๊ฑด๋ณต์ง๋ถ)
3. ๋
ธ์ธ๋ณต์ง์์คํํฉ(e-๋๋ผ์งํ)
4. ์๋ฃ๊ธฐ๊ด ํํฉ(๋ณด๊ฑด๋ณต์ง๋ถ)
5. ๋
ผ๋ฌธ '๋
ธ์ธ์ฃผ๊ฐ๋ณดํธ์์ค์ ๋ํ ์ ์ฌ ์ด์ฉ์์ ์ด์ฉ์๊ตฌ ๋ฐ ๋ฐ์ ๋ฐฉํฅ, ์ ์ง๋, 2020'
6. ๋
ผ๋ฌธ '๋
ธ์ธ ์ฃผ๊ฐ๋ณดํธ์์ค์ ์ด์, ์ธ๋ ฅ, ์๋น์ค ํํฉ, ๋ฐ์ฐํ, 2007'
2. ์์น ๋ฐ์ดํฐ ๋ถ์
- ์ฃผ๊ฐ๋ณดํธ์ผํฐ(๋ณด๊ฑด๋ณต์ง๋ถ)
- ์๋ฃ๊ธฐ๊ด ํํฉ(๋ณด๊ฑด๋ณต์ง๋ถ)
์ ๊ตญ์ ๋ชจ๋ ์ฃผ๊ฐ๋ณดํธ์ผํฐ(2022.02)์ ๋ณ์(2022) ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์๋ค.
์ฅ๊ธฐ์์ ๋ฑ๊ธ ํ์ ์ ๋ฐ์ ๋
ธ์ธ๋ค์ ๋ชจ์๋ ์ฃผ๊ฐ๋ณดํธ์ผํฐ๋ ์ด๋ค ๊ณณ์ ์์นํด์ผ ํ ๊น?
ํน์ฌ ๋ณ์์ ์์น์ ์๊ด์ด ์์ง ์์๊น?
* ์ฌ๊ธฐ์ ๋ณ์์ด๋ผ ํจ์ ๋ณ์์๊ฐ 100๊ฐ ์ด์์ธ ๋ณ์์ ๋งํ๋ค.
์ฅ๊ธฐ์์ ๋ฑ๊ธ์ ๋ฐ์ ๋
ธ์ธ ํ์๋ ์ํ ๋ณ์๋ณด๋จ ์ค๋ํ ๋ณ์์ ๋ ๋ง์ด ์ด์ฉํ ๊ฒ์ด๋ผ ํ๋จํ๋ค.
์ด๋ฒ ๊ธ์
'์ฃผ๊ฐ๋ณดํธ์ผํฐ์ 80%๊ฐ ๋ณ์ 3km ์ด๋ด ์์นํ ๊ฒ์ด๋ค'
๋ผ๋ ๊ฐ์ค์ ์ธ์ฐ๊ณ ๋ถ์์ ์งํํ๋ค.
์ฃผ๊ฐ๋ณดํธ์ผํฐ(๋ณด๊ฑด๋ณต์ง๋ถ), ์๋ฃ๊ธฐ๊ด ํํฉ(๋ณด๊ฑด๋ณต์ง๋ถ) ๋ฐ์ดํฐ๋ ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ(https://www.data.go.kr/)์์ ๊ฐ์ ธ์๋ค. ์ฌ๊ธฐ์ ๋ฐ์ดํฐ ๋ฐ์์ฌ ๋๋ง๋ค ๋๋ผ๋ ๊ฑด๋ฐ, ๋ฐ์ดํฐ ํ์์ด ํต์ผ๋๊ณ ์๋ค๊ณ ํ๋ ์ฌ์ ํ ๋ฐ์ดํฐ๋ค์ด ๋ค์ฃฝ๋ฐ์ฃฝ์ด๋ค. ํ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ค... ๋ฐ์ดํฐ๋ค ์ค ํ์ ์๋ ์นผ๋ผ์ ์ ๊ฑฐํ๊ณ ์ขํ ๋ฐ์ดํฐ๋ฅผ ์๊ฒฝ๋ ๋ฐ์ดํฐ๋ก ๋ฐ๊ฟ์คฌ๋ค. ๋ค์์ ์ ์ฒ๋ฆฌ๋ฅผ ๋ชจ๋ ๋๋ธ ๋ฐ์ดํฐ๋ค์ด๋ค.
# ์ฃผ๊ฐ๋ณดํธ์ผํฐ ๋ฐ์ดํฐ -------------------------------------------------------------------------------------------------------------------------------------------------------
df_center = pd.read_csv("/content/์ฃผ๊ฐ๋ณดํธ์ผํฐ/df_center.csv")
df_c = df_center.drop('Unnamed: 0', axis=1)
print(df_c.info(null_counts = True))
df_c.head()
# ์๋ฃ์์ค ๋ฐ์ดํฐ -------------------------------------------------------------------------------------------------------------------------------------------------------
df_hospital = pd.read_csv("/content/์ฃผ๊ฐ๋ณดํธ์ผํฐ/df_hospital.csv")
df_hospital = df_hospital.dropna(axis=0)
df_hospital = df_hospital.drop(['Unnamed: 0','latitude', 'longitude'], axis=1)
df_hospital = df_hospital[df_hospital['๋ณ์์'] > 100].copy()
# ์ขํ -> ๊ฒฝ์๋ ๋ณํ
epsg2097 = Proj(init='epsg:2097')
wgs84=Proj(init='epsg:4326')
longitude, latitude = transform(epsg2097, wgs84, df_hospital['์ขํ์ ๋ณด(x)'], df_hospital['์ขํ์ ๋ณด(y)'])
df_hospital['longitude'] = longitude
df_hospital['latitude'] = latitude
display(df_hospital.head())
print(df_hospital.info(null_counts=True))
ํ๋ณด๋ ๋ฐ์ดํฐ๋ก ์ง๋๋ฅผ ๊ทธ๋ ค๋ณด์.
์ง๋๋ Python์ Folium์ผ๋ก ๊ทธ๋ ธ๋ค.
๋นจ๊ฐ์ ๋๊ทธ๋ผ๋ฏธ : ๋ณ์
ํ๋์ ๋๊ทธ๋ผ๋ฏธ : ์ฃผ๊ฐ๋ณดํธ์ผํฐ
import folium
center = [37.541, 126.986]
m = folium.Map(location=center, zoom_start=10)
df_c = df_center[['๊ธฐ๊ด๋ช
', 'latitude', 'longitude']].copy()
df_h = df_hospital[['๋ณ์์', 'latitude', 'longitude', '์ฌ์
์ฅ๋ช
']].copy()
# ์ฃผ๊ฐ๋ณดํธ์ผํฐ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ ค๋
๋๋ค.
for i in df_c.index[:2266]:
folium.Circle(
location = df_c.loc[i, ['latitude', 'longitude']],
tooltip = df_c.loc[i, '๊ธฐ๊ด๋ช
'],
radius = 100
).add_to(m)
# ์๋ฃ์์ค ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ ค๋
๋๋ค. -> ์ขํ์ ๋ณด๋ฅผ ์๊ฒฝ๋๋ก ๋ฐ๊ฟ๋ํ๋ผ ๊ฒ
for i in df_h.index[:4364]:
folium.Circle(
location = df_h.loc[i, ['latitude', 'longitude']],
tooltip = df_h.loc[i, '์ฌ์
์ฅ๋ช
'],
radius = 150,
color='red',
).add_to(m)
m
์ ์ฒด์ ์ผ๋ก ๋ดค์ ๋, ์ฃผ๊ฐ๋ณดํธ์ผํฐ์ ๋ณ์์ ์ธ๊ณฝ ์ง์ญ๋ณด๋จ ์ฌ๋๋ค์ด ๋ชจ์ฌ์ฌ๋ ์ง์ญ์ ๋ง์ด ๋ถํฌํ๊ณ ์๋ค. ๋ ๊ณณ ๋ชจ๋ ์ฃผ ๊ณ ๊ฐ์ด ์ผ๋ฐ ์๋ฏผ์ด๊ธฐ์ ๋น์ฐํ ๊ฒฐ๊ณผ๋ผ๊ณ ํ ์ ์๋ค. ๋ํ์ฌ ์ผํ ๋ณด๋ฉด ์ฃผ๊ฐ๋ณดํธ์ผํฐ์ ๋ณ์์ ๊ฑฐ๋ฆฌ๋ค์ด ๊ฐ๊น์ ๋ณด์ธ๋ค. ์ง์ญ๋ณ๋ก ํ๋ํ์ ๋๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์๊น? ์ด๋ ์ง์ญ ๋ณ๋ก ํ๋ํ์ฌ ์์๋ณด๋๋ก ํ์.
[์์ธ๊ด์ญ์]
๊ฐ๋จ, ์ข
๋ก ๊ฐ์ ์์ธ ์ค์ฌ๋ถ๋ฅผ ๋ณด๋ฉด, ๋ณ์์ ๋ง์ด ์์นํด ์์ง๋ง ์ฃผ๊ฐ๋ณดํธ์ผํฐ๋ ์ผ๋ง ์์์ ์ ์ ์๋ค.
ํ์ง๋ง ์กฐ๊ธ ๋ ์ธ๊ณฝ์ง(์ฃผ๊ฑฐ์ง์ญ)๋ก ์์ ์ ์ฎ๊ธฐ๋ฉด ์ฃผ๊ฐ๋ณดํธ์ผํฐ์ ์๊ฐ ๋ง์์ง๋ค.
[์ธ์ฒ๊ด์ญ์]
์ธ์ฒ์ ์๋ ๋ํ๋ณ์๋ ์ค์ฌ์ง์ ๋ง์ด ๋ถํฌํด์๋ค. ํ์ง๋ง ์์ธ๊ณผ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด,
์ฃผ๊ฐ๋ณดํธ์ผํฐ๋ ์ค์ฌ์ง์ ์กด์ฌํ๋ค. ์ด๋ ์์ธ์ ์ค์ฌ์ง์ ์ฃผ๊ฑฐ์ง์ญ์ด ๊ฑฐ์ ์๋ ๋ฐ๋ฉด,
์ธ์ฒ์ ์ค์ฌ์ง์ ์ฃผ๊ฑฐ์ง์ญ๋ ์์ฌ์๊ธฐ ๋๋ฌธ์ผ๋ก ๋ณด์ธ๋ค.
[๊ฒฝ๊ธฐ๋]
์ฃผ๊ฐ๋ณดํธ์ผํฐ๊ฐ ์ฃผ๊ฑฐ์ง์ญ๊ณผ ๊ฐ๊น๊ฒ ์์นํ๋ค๋ ์ ์ ์ ์ง๋๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
์์
์ง์ญ, ๊ธฐ์
์ฒด๊ฐ ๋ง์ด ์์นํ ์์ธ๊ณผ ๋ฌ๋ฆฌ, ์ฃผ๊ฑฐ ์ง์ญ์ด ๋ชฐ๋ ค์๋ ๊ฒฝ๊ธฐ๋์ ์ฃผ๊ฐ๋ณดํธ์ผํฐ๊ฐ
๋ง์ด ์์นํด์๋ค. ์ด์ ๋ฐ๋ผ ์ฃผ๊ฑฐ ์ง์ญ์ด ์๋ ์์
์ง์ญ์๋ ์์นํ๋ ๋ณ์๊ณผ ๋ฌ๋ฆฌ,
์ฃผ๊ฐ๋ณดํธ์ผํฐ๋ ์ฃผ๊ฑฐ ์ง์ญ์ ์ฃผ๋ก ์์นํ๋ ค ํ๋ค๋ ์ ์ ํ์ธํ ์ ์๋ค.
[๋๊ตฌ๊ด์ญ์]
๋๊ตฌ๋ฅผ ๋ณผ ๋๋, ์ฃผ๊ฐ๋ณดํธ์ผํฐ๋ ๋ฏธ๋ฌํ๊ฒ ์ค์ฌ์ง๋ฅผ ๋ฒ์ด๋ ์์นํด ์๋ค.
๋ค๋ง, ๋ณ์๋ ์ฃผ๊ฑฐ ์ง์ญ๊ณผ ์์
์ง์ญ ์ฌ์ด์ ์์นํด ์๋ค ๋ณด๋ ์ ๋ฐ์ ์ผ๋ก
๋ณ์๊ณผ ์ฃผ๊ฐ๋ณดํธ์ผํฐ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ธ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
์ง๋๋ฅผ ํตํด ๋ณธ ๊ฒฐ๊ณผ, ์ฃผ๊ฐ๋ณดํธ์ผํฐ๋ ์ฃผ๋ก ์ฃผ๊ฑฐ ์ง์ญ์ ์์นํด ์์๋ค. ๋ณ์์ด ์๋ ์ง์ญ์๋ ๋ง์ ์ผํฐ๋ค์ด ์กด์ฌํ๋ค. ์ฃผ๊ฐ๋ณดํธ์ผํฐ์ ํ์ ์
์ง์กฐ๊ฑด์ ๊ณผ์ฐ '๋ณ์'์ด ์๋๊ฐ๋ผ๋ ์๋ฌธ์ด ๋ ๋ค. ์ ๋ฐ์ ์ผ๋ก ์ฃผ๊ฐ๋ณดํธ์ผํฐ์ ๋ณ์์ ๊ฑฐ๋ฆฌ๋ ๊ฐ๊น์ ๋ณด์๋ค. ์ข ๋ ํ์คํ๊ฒ ์ฃผ๊ฐ๋ณดํธ์ผํฐ์ ๋ฐ๊ฒฝ 3km์ ๋ณ์์ ์กด์ฌ ์ ๋ฌด๋ฅผ ํ์ธํ์ฌ ๊ฐ์ค์ ๊ฒ์ฆํ๋๋ก ํ๊ฒ ๋ค.
๊ฐ์ค '์ฃผ๊ฐ๋ณดํธ์ผํฐ์ 80%๊ฐ ๋ณ์ 3km ์ด๋ด ์์นํ ๊ฒ์ด๋ค'
* ์ฌ๊ธฐ์ ๋ณ์์ด๋, ๋ณ์์ 100์ ์ด์์ธ ์ค๋ํ ๋ณ์์ ๋งํ๋ค.
๊ฐ์ค์ ์ผํฐ์ ์๊ฒฝ๋ ๋ฐ์ดํฐ, ๋ณ์์ ์๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ๊ฒ์ฆํ๋ค. ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ฒ ์ฌ์ธ(haversine) ๊ณต์์ ์ฑํํ๋ค. ํ๋ฉด์ด ์๋ ๋ฅ๊ทผ ์ง๊ตฌ ํ๋ฉด์ ์๋ ๋ ์ง์ ์ฌ์์ ์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฝค ๋๋ฆฌ ์ฐ์ด๋ ๊ณต์์ด๋ค.
# ๋ฐ๊ฒฝ 3km ์ด๋ด ๋ณ์ ์กด์ฌ์ฌ๋ถ ํ์ธ
from haversine import haversine, Unit
c_lat_list = df_c['latitude'].copy()
c_lon_list = df_c['longitude'].copy()
h_lat_list = df_h['latitude'].copy()
h_lon_list = df_h['longitude'].copy()
num = 0
for i in range(0,2266) :
c = (c_lat_list[i], c_lon_list[i])
for a in range(0,2461):
h = (h_lat_list[a], h_lon_list[a])
distance = haversine(c, h, unit = 'km')
if distance <= 3:
print(f'{c} / {h}')
num += 1
break
๋ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ 3km๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ ์ง์ ์ ์๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋๋ก ํ๋ค. ์์ธํ ๋ณด๋ ์ผํฐ์ ์๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ ๊ฒน์น๋ ๋ถ๋ถ์ด ์์ด์ ์ฝ๋๋ฅผ ์๋ชป ์งฐ๋ ์๊ฐํ๋๋ฐ, ํ์ธํด๋ณด๋ ๋ฐ์ดํฐ ์ค๋ฅ์๋ค. ๋ ์ผํฐ๊ฐ ๋น์ทํ ๊ณณ์ ์์ผ๋ ์๊ฒฝ๋ ๋ฐ์ดํฐ๋ ๋๊ฐ์ด ์
๋ ฅํ ๊ฒ ๊ฐ๋ค. (์ผ ๋๋ฐ๋ก ์ ํ์ง...)
์ฃผ๊ฐ๋ณดํธ์ผํฐ ๊ฒฝ์ฐ, ์๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ '0.0'์ธ ๊ณณ์ด 2241๊ณณ ์ค์ 712๊ณณ์ด์๋ค. ์ด์ ๋ฐ๋ผ ๋น์จ ๊ณ์ฐํ ๋๋ 2266-712 = 1554 ๊ณณ์ผ๋ก ์ค์ ํ์ฌ ๊ณ์ฐํ๋ค.
print(f"Center Ratio in hospital's 3km is {num/1554}")
๋ณ์์ ๋ฐ๊ฒฝ 3km ์์ ์๋ ์ผํฐ ๋น์จ์ด 87.7%๋ก ๋์๋ค. ๊ฐ์ค์ ์ฑํ๋์๋ค. ์๊ฐ๋ณด๋ค ๋ง์ ์ผํฐ๋ค์ด ๋ณ์ ์ฃผ๋ณ์ ์์ด ๋๋ผ์ ๋ค. ์๋ง๋ ์ค์๋ณ์๊น์ง ํฉ์น๋ฉด ๋น์จ์ ๋ ์ปค์ง ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ์ง๋๋ก๋ง ๋ณด์์ ๋๋ ์ผํฐ์ ๋ณ์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์๋ ์ฐ์ฐ์ด ์๋๊น๋ผ๋ ์๊ฐ์ ํ๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์์น๋ก ๋ณด๋ ์ฐ์ฐ์ผ ์๊ฐ ์๋ค. ์ฃผ๊ฐ๋ณดํธ์ผํฐ๋ ๊ตญ๊ฐ ๋ณต์ง ์๋น์ค์ ๊ฐ๊น์ง๋ง ํํธ์ผ๋ก ๋
ธ์ธ๋ค์, ๋ถ์๊ฐ์กฑ๋ค์ ์์
ํด์ผ ํ๋ ๊ณณ์ด๊ธฐ๋ ํ๋ค. ๊ฒฝ์์ ํ์ง ์์ผ๋ฉด ์ฌ๋๋ค์ ๋ชจ์ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๋ค ๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ ๋ณ์, ๊ทธ ์ฃผ๋ณ ์๋ฃ๊ธฐ๊ธฐ ์์ , ์ฝ๊ตญ ๋ฑ๊ณผ ์ปค๋ฎค๋ํฐ๋ฅผ ์์ผ๋ ค ๋
ธ๋ ฅํ๋ ๊ฒ์ด ์๋๊น? ์ปค๋ฎค๋ํฐ์ ๊ทผ๋ณธ์ ์ ๋๊ฐ์ด ์์ด๊ณ ๊ฐ๊น์์ผ ํ๋ ์ผํฐ๋ ์์ฐ์ค๋ฝ๊ฒ ์ฃผ๊ฑฐ ์ง์ญ + ๋ณ์ ์ฃผ๋ณ์ผ๋ก ๋ชจ์ธ ๊ฒ์ ์๋๊น ๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
์ด๋ง ๊ธ์ ๋ง์น๋๋ก ํ๊ฒ ๋ค.