라이브러리 임포트
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