Python/데이터분석 실습

[Python] 서울 종합병원 분포 데이터 분석

dori_0 2022. 2. 4. 01:51

서울 종합병원 분포 데이터 분석

 


 

 가설설정

서울의 종합병원은 고르게 분포되어 있을까?

 

 

 준비과정

1. 필요한 라이브러리 가져오기

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

%matplotlib inline

plt.rc('font', family='Malgun Gothic')
plt.rc('axes', unicode_minus=False)
 

2. 데이터 로드하기

df = pd.read_csv("C:/Data/소상공인시장진흥공단_상가업소정보_의료기관_201909.csv",encoding = "cp949")

# 행열 개수
df.shape


3. 데이터 미리보기/요약하기
head, tail을 통해 데이터를 미리보고 info를 통해 데이터 요약

df.head(1) df.tail(1) df.info() df.columns df.dtypes

 

 전처리

1. 결측치 확인

null_count = df.isnull().sum()
null_count

# 결측치가 어디에 많은지 시각적으로 확인
null_count.plot.barh(figsize=(5, 10))

 

2. 컬럼명 변경하기

'index', '0'을 '컬럼명', '결측치수'로 변경해준다

df_null_count = null_count.reset_index()
df_null_count.head()

df_null_count.columns = ["컬럼명", "결측치수"]
df_null_count.head()
 





3. 정렬 후 특정 컬럼만 불러오기

df_null_count_top = df_null_count.sort_values(by="결측치수", ascending=False).head(10)
df_null_count_top

df["지점명"].head()

drop_columns = df_null_count_top["컬럼명"].tolist()
drop_columns
 
 
 
4. 삭제할 column 조회 후 삭제하기
df[drop_columns].head()

print(df.shape)
df = df.drop(drop_columns, axis=1)
print(df.shape)

df.info()

 

제대로 제거된 것을 확인할 수 있다

 시각화 

1. 시도별 분포 확인 후 시각화

city = df["시도명"].value_counts()
city

city_normalize = df["시도명"].value_counts(normalize=True)
city_normalize

city.plot.barh()
city_normalize.plot.pie(figsize=(7, 7))


이때, barh 대신 seaborn의 countplot을 이용해서 그릴수도 있다.

# seaborn의 countplot으로 그려보기 
sns.countplot(data=df, y="시도명")



2. 상권업종중/소분류별 분포 확인 후 시각화

c = df["상권업종중분류명"].value_counts() 
c 
n = df["상권업종중분류명"].value_counts(normalize=True) 
n 
c.plot.bar(rot=0) 
n.plot.pie()

 

a = df["상권업종소분류명"].value_counts() 
a 
a.plot.barh(figsize=(7,8), grid=True)



3. 서울특별시 구별 분포 확인 후 시각화

# 구별로 약국 분포도 확인 
c = df_seoul_drug["시군구명"].value_counts() 
c.head() 

n = df_seoul_drug["시군구명"].value_counts(normalize=True) 
n.head() 

c.plot.bar(rot=60)

 

가설검정을 위한 분석

1. '종합병원' 데이터 정리

#"상권업종소분류명"이 "종합병원"인 것과 
# "시도명"이 "서울특별시"인 데이터만 가져오기 
# 결과를 df_seoul_hospital에 할당 

df_seoul_hospital = df[(df["상권업종소분류명"] == "종합병원") & (df["시도명"] == "서울특별시")] 
df_seoul_hospital 

#"시군구명"으로 그룹화해서 구별로 종합병원의 수를 세기 
df_seoul_hospital["시군구명"].value_counts()
# 상호명 중에 종합병원이 아닌 데이터 찾기 
df_seoul_hospital.loc[~df_seoul_hospital["상호명"].str.contains("종합병원"), "상호명"].unique() 

# "꽃배달|의료기|장례식장|상담소|어린이집"은 종합병원과 무관하므로 제거 
drop_row = df_seoul_hospital[df_seoul_hospital["상호명"].str.contains("꽃배달|의료기|장례식장|상담소|어린이집")].index 
drop_row = drop_row.tolist() 
drop_row 

# 의원으로 끝나는 데이터도 종합병원으로 볼 수 없으므로 drop_row2에 담아주고 list 형태로 변환합니다. 
drop_row2 = df_seoul_hospital[df_seoul_hospital["상호명"].str.endswith("의원")].index 
drop_row2 = drop_row2.tolist() drop_row2 

# 삭제할 행을 drop_row에 합쳐줍니다.
drop_row = drop_row + drop_row2 len(drop_row) 

# 해당 셀을 삭제하고 삭제 전과 후의 행의 갯수를 비교합니다. 
print(df_seoul_hospital.shape) 
df_seoul_hospital = df_seoul_hospital.drop(drop_row, axis=0) 
print(df_seoul_hospital.shape)


2. 시군구명에 따른 종합병원의 수 시각화

# 시군구명에 따라 종합병원의 숫자를 countplot으로 그립니다. 
df_seoul_hospital["시군구명"].value_counts().plot.bar() 

plt.figure(figsize=(15, 4)) 
sns.countplot(data=df_seoul_hospital, x="시군구명", order=df_seoul_hospital["시군구명"].value_counts().index)


3. pandas와 seaborn을 이용해 경도, 위도 표시

# pandas의 plot.scatter를 통해 경도와 위도를 표시 
df_seoul[["경도","위도","시군구명"]].plot.scatter(x="경도", y="위도", figsize=(8, 7), grid=True) 

# seaborn의 scatterplot 을 통해 구별 경도와 위도를 표시해 봅니다. 
plt.figure(figsize=(9, 8)) sns.scatterplot(data=df_seoul, x="경도", y="위도")

 

# seaborn의 scatterplot을 통해 "상권업종중분류명" 경도와 위도 표시 
sns.scatterplot(data=df_seoul, x="경도", y="위도", hue="상권업종중분류명") 

# seaborn의 scatterplot을 통해 전국 데이터(df)로 구별 경도와 위를 표시 
plt.figure(figsize=(16,12)) sns.scatterplot(data=df, x="경도", y="위도", hue="시도명")

 

결론

Q : 서울의 종합병원은 고르게 분포되어 있을까?

  • 강남구, 영등포구, 중구, 양천구 순으로 종합병원이 많이 분포되어있다.
  • 강남구에 종합병원이 압도적으로 많이 있는 것으로 보아 종합병원은 서울에 골고루 분포되어있지는 않다고 할 수 있다.

 

 

소상공인시장진흥공단_상가(상권)정보_20211231

<br/>영업 중인 전국 상가업소 데이터를 제공합니다. <br/>(상호명, 업종코드, 업종명, 지번주소, 도로명주소, 경도, 위도 등)

www.data.go.kr

 


 

 

 

다음 수업을 바탕으로 실습하였습니다.

 

파이썬으로 시작하는 데이터 사이언스

부스트코스 무료 강의

www.boostcourse.org