의료기관

Soyoung Park·2022년 9월 6일
0

TIL python

목록 보기
15/16

라이브러리 임포트

import pandas as pd

import plotly.express as px

한글 깨짐 방지

import matplotlib as mpl
import matplotlib.pyplot as plt
 
%config InlineBackend.figure_format = 'retina'
 
!apt -qq -y install fonts-nanum
 
import matplotlib.font_manager as fm

fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
font = fm.FontProperties(fname=fontpath, size=9)
plt.rc('font', family='NanumBarunGothic') 
mpl.font_manager._rebuild()

데이터 준비하기

df = pd.read_csv('경로복사하세여들', encoding ='EUC-KR')
df.head()

데이터 확인하기

df.info()
#NaN 데이터 확인하기
df.isna().sum()
# 컬럼별 데이터 확인
df.상세영업상태명.unique()
df.지역명.unique()
df.의료기관종별명.unique()

데이터 분석하기

#상세영업상태명 별 의료 기관 수
df['상세영업상태명'].value_counts()

gb_df = df.groupby(by=['상세영업상태명']).size().reset_index(name='의료기관수')
gb_df
px.histogram(gb_df, x='상세영업상태명', y ='의료기관수')
px.pie(gb_df, names='상세영업상태명', values ='의료기관수')
#지역명 별 의료 기관 수 
df['지역명'].value_counts()
lgb_df = df.groupby(by=['지역명', '도시명', '상세영업상태명', '의료기관종별명']).size().reset_index(name='의료기관수')
lgb_df
#지역별 의료기관 현황
px.histogram(lgb_df, x ='지역명', y = '의료기관수', color = '도시명')
px.pie(lgb_df, names ='지역명', values = '의료기관수')
# 의료기관종별 의료기관 현황
px.histogram(lgb_df, x='의료기관종별명', y ='의료기관수')
px.pie(lgb_df, names='의료기관종별명', values ='의료기관수')
df['진료과목내용명']
# 진료과목에 대한 워드 클라우드

import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

# 진료과목명을 하나의 text 형태로 변환
text = " ".join(cont for cont in df.진료과목내용명.astype(str))
text
len(text.split(' ')) #진료과목수
print('총 {} 개 데이터가 있습니다.'.format(len(text.split(' '))))
# print('총 {} 개 데이터가 있습니다.'.format(len(text)))
import wordcloud
plt.subplots(figsize=(25,15))

wordcloud = WordCloud(background_color='black', width=100, height=700, font_path = fontpath).generate(text)

plt.axis('off')
plt.imshow(wordcloud, interpolation='bilinear')

과제1

# 라이브러리 임포트
import folium
import pandas as pd
import plotly.express as px
from geopy.geocoders import Nominatim
from geopy.distance import geodesic

# dataframe 준비
data = pd.read_csv('/content/drive/MyDrive/2022 파이썬 위한 공공데이터/data (1).csv', encoding ='EUC-KR')

# 주소를 좌표로 변환할 함수 준비
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

# 사용자에게 주소 입력받기
address = input('도로명 주소를 입력하세요.')
crd = geocoding(address)

my_hospital = pd.DataFrame(columns=['도로명전체주소','설치시설구분', '상세영업상태명', '위도', '경도', '거리'])

# 주소를 좌표로 변환하여 tuple 형태로 변수에 담기
keypoint = address.split(' ')[0]
data = data.loc[data.사업장명.str.contains(keypoint)] # 많은 데이터 중 지역 설정

for n in data.index:
  building_loc = (data.loc[n, '위도'], data.loc[n, '경도']) 

  my_hospital.loc[n] = [data.loc[n, '도로명전체주소'], data.loc[n, '사업장명'], data.loc[n, '상세영업상태명'], 
                        data.loc[n, '위도'], data.loc[n, '경도'], geodesic((crd['lat'], crd['lng']), building_loc).kilometers]

# 엽업중인 의료기관만 표시
my_hospital = my_hospital.loc[my_hospital.상세영업상태명.str.contains('영업중')]

# 가까운 의료기관 top 5
my_hospital =my_hospital.sort_values(by=['거리']).head(5)
my_hospital

# 지도 준비
my_map = folium.Map(location= [crd['lat'], crd['lng']], zoom_start=14)

# 마커 표시
for n in my_hospital.index:
  folium.Marker([my_hospital.loc[n, '위도'], my_hospital.loc[n, '경도']],
                popup='<pre >' +my_hospital.loc[n, '도로명전체주소']+my_hospital.loc[n, '상세영업상태명']+'</pre>',
                icon=folium.Icon(
                    color = 'black',
                    icon = 'building',
                    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

0개의 댓글