본문 바로가기
Study/CODE 3기 [파이썬으로 배우는 데이터 사이언스]

[비비빅] 행정구역별 병원당 노인 인구수 비교 분석

by soogeulr 2024. 6. 1.

초록


본 연구는 대한민국의 행정구역별 병원당 노인 인구수를 비교 분석하여 지역별 의료 접근성의 격차를 파악하고자 한다. 이를 통해 노인 인구가 집중된 지역에서의 의료 서비스 부족 문제를 확인하고, 향후 정책 방향을 제안하는 것을 목적으로 한다. 분석에는 공공 데이터를 사용하였으며, Pandas, Seaborn 등의 데이터 분석 도구를 활용하였다. 

 

서론


고령화 사회로 진입한 대한민국에서 노인 인구의 의료 접근성은 중요한 사회적 문제로 부상하고 있다. 특히 지역별로 의료 자원의 분포가 고르지 않아 일부 지역에서는 병원당 노인 인구수가 과도하게 높아 의료 서비스의 질 저하와 접근성 문제를 초래하고 있다. 문제 해결을 위해 사전에 실시한 미니 프로젝트와 연계하여 실제적 수치로 확인하고 심층적으로 탐구하여 해결 방안을 모색할 필요성을 느낀 바, 본 연구는 이러한 문제를 실증적으로 분석하고 지역별 차이를 규명하고자 한다.

 

연구 방법


1) 데이터 수집 및 전처리

본 연구는 공공 데이터 포털에서 제공하는 행정구역별 인구 통계와 의료 기관 데이터를 사용하였다. 데이터를 Pandas 라이브러리를 통해 불러오고, 결측값 처리 및 필요한 변수를 계산하였다.

 

2) 병원 종류 선정

노인들에게 꼭 필요한 병원 종류를 선정하기 위해 다음 기준을 고려하였다:

  •        만성 질환 관리       : 노인들의 고혈압, 당뇨병, 심장 질환 등 만성 질환 관리 필요
  • 골격 및 근골격계 문제  : 노화에 따른 뼈와 관절 문제의 빈번한 발생
  •         노인성 질환          : 치매와 같은 노인성 질환의 전문적 치료 병원 필요성
  •           응급 치료           : 응급 상황에 취약한 노인들의 응급 치료 가능한 병원의 중요성
  •           전문 진료           : 시력, 청력 등 노인들에게 빈번하게 발생하는 문제를 다루는 병원 필요

이 기준에 따라 노인들에게 꼭 필요한 병원 종류 5가지를 선정하였다:

  1.     내과/외과    : 만성 질환과 여러 일반적인 건강 문제를 다루는 병원
  2. 노인/치매병원 : 노인성 질환, 특히 치매를 전문적으로 치료하는 병원
  3. 정형/성형외과 : 골격 및 근골격계 문제를 다루는 병원
  4.     종합병원     : 다양한 전문과목이 있는 병원으로, 복합적인 건강 문제를 한 곳에서 진료하는 병원
  5.   응급구조대   : 응급 상황에 신속히 대처할 수 있는 병원.

 

3) 병원 수 계산

a. 데이터 불러오기

: CSV 파일에서 의료 기관 데이터를 불러온다. 

df_hospital = pd.read_csv("/content/소상공인시장진흥공단_상가업소정보_의료기관_201909.csv", low memory = False)

 

b. 행정구역 리스트 정의

: 대한민국의 주요 행정구역을 리스트로 정의한다. 

행정구역 = ['경기도', '서울특별시', '부산광역시', '경상남도', '인천광역시', '대구광역시', 
'경상북도', '전라북도', '충청남도', '전라남도', '광주광역시', '대전광역시', '충청북도', 
'강원도', '울산광역시', '제주특별자치도', '세종특별자치시']

 

c. 전국 병원 수 계산

: 데이터프레임에서 특정 병원 유형(내과/외과, 노인/치매병원, 정형/성형외과, 종합병원, 응급구조대)에 해당하는 전국 병원 수를 계산한다.

전국_병원수 = df_hospital[
    (df_hospital['상권업종소분류명'] == '내과/외과') |
    (df_hospital['상권업종소분류명'] == '노인/치매병원') |
    (df_hospital['상권업종소분류명'] == '정형/성형외과') |
    (df_hospital['상권업종소분류명'] == '종합병원') |
    (df_hospital['상권업종소분류명'] == '응급구조대')].shape[0]

 

d. 행정구역별 병원 수를 저장할 딕셔너리 초기화

: 전국 병원 수를 포함한 딕셔너리를 초기화한다. 

행정구역별_병원수 = {'전국': 전국_병원수}

 

e. 각 행정구역별 병원 수 계산

: 반복문을 통해 각 행정구역별로 특정 병원 유형의 병원 수를 계산하고 딕셔너리에 저장한다. 

for i in 행정구역:
    num = df_hospital[
    (df_hospital["시도명"]==i) &
    ((df_hospital['상권업종소분류명'] == '내과/외과') |
    (df_hospital['상권업종소분류명'] == '노인/치매병원') |
    (df_hospital['상권업종소분류명'] == '정형/성형외과') |
    (df_hospital['상권업종소분류명'] == '종합병원') |
    (df_hospital['상권업종소분류명'] == '응급구조대'))].shape[0]
    행정구역별_병원수[i] = num

 

f. 결과 출력

: 행정구역별 병원 수가 저장된 딕셔너리를 출력한다.

행정구역별_병원수

 

4) 노인 인구 수 계산

a. 새로운 데이터프레임 생성

: df_elder 데이터프레임에서 "행정구역" 열과 "2019년09월_계_연령구간인구수" 열을 선택하여 df_elder_num이라는 새로운 데이터프레임을 생성한다

df_elder_num = df_elder[["행정구역", "2019년09월_계_연령구간인구수"]]

 

b. 컬럼명 변경

: 새 데이터프레임 df_elder_num의 열 이름을 "행정구역"과 "노인 인구수"로 변경한다. 이렇게 함으로써 데이터프레임의 열 이름이 더 명확하고 이해하기 쉽게 된다. 

df_elder_num.columns = ["행정구역", "노인 인구수"]

 

c. 행정구역 열에서 불필요한 문자 제거

: "행정구역" 열의 문자열에서 오른쪽 끝부터 14번째 문자까지 제거한다. 이 작업은 각 문자열의 끝에 있는 괄호와 그 안의 숫자를 제거하는 데 사용된다. 

ex) "서울특별시(11)" → "서울특별시"

df_elder_num["행정구역"] = df_elder["행정구역"].str[:-14]

 

d. 쉼표 제거 및 문자열 변환

: '노인 인구수' 열의 모든 값에서 쉼표를 제거한다. 쉼표가 포함된 숫자는 문자열로 취급되기 때문에, 이 단계에서는 문자열의 쉼표를 빈 문자열로 대체하여 숫자 형태의 문자열을 만든다. 

ex) "12,345" → "12345"

df_elder_num['노인 인구수'] = df_elder_num['노인 인구수'].str.replace(",", "")

 

e. 문자열을 정수로 변환

: 쉼표가 제거된 문자열을 정수형으로 변환한다. 이 과정은 문자열로 표현된 숫자를 실제 정수 데이터로 변환한다. 변환된 데이터는 수학적 연산에 사용할 수 있게 된다.

df_elder_num['노인 인구수'] = df_elder_num['노인 인구수'].astype(int)

 

f. 변환된 데이터프레임 출력

: 최종적으로 변환된 데이터프레임을 출력한다. ('노인 인구수' 열이 정수형 데이터로 변환된 상태)

df_elder_num

 

g. 노인 인구수를 딕셔너리에 저장 후 출력

행정구역별_노인수 = {}

for i in range(0, 18):
    area = df_elder_num.loc[i, "행정구역"]
    행정구역별_노인수[area] = df_elder_num.loc[i, "노인 인구수"]

행정구역별_노인수

 

5) 행정구역별 병원당 노인 인구수 계산

a. 병원당 노인 인구수 계산

: 이 코드는 딕셔너리 컴프리헨션을 사용하여 각 행정구역의 병원당 노인 인구수를 계산한다.

행정구역별_병원당노인인구수 = {
    key: int(round(행정구역별_노인수[key] / 행정구역별_병원수[key], 0))
    for key in 행정구역별_노인수}

 

주석

* 'key'는 '행정구역별_노인수'의 각 키(행정구역 이름)이다.                                                                                                                                

* '행정구역별_노인수[key]'는 해당 행정구역의 노인 인구수이다.

* '행정구역별_병원수[key]'는 해당 행정구역의 병원 수이다.

* '행정구역별_노인수[key] / 행정구역별_병원수[key]'는 병원당 노인 인구수를 계산한다.

* 'round(..., 0)'는 소수점 이하를 반올림한다.

* 'int(...)'는 반올림된 값을 정수로 변환한다. 최종적으로, 각 행정구역의 병원당 노인 인구수를 계산하여 '행정구역별_병원당노인인구수' 딕셔너리에 저장한다.

 

b. 데이터프레임 생성

: '행정구역별_병원당노인인구수' 딕셔너리를 리스트로 변환하여 데이터프레임으로 만든다. 각 항목은 튜플('(key, value)')로 변환되며, 데이터프레임의 열 이름은 "행정구역"과 "병원당 노인 인구수"로 설정된다.

행정구역별_병원당노인인구수_df = pd.DataFrame(list(행정구역별_병원당노인인구수.items()),
                                      columns=["행정구역", "병원당 노인 인구수"])

 

c. 막대그래프 그리기

: Seaborn 라이브러리를 사용하여 '행정구역별_병원당노인인구수_df ' 데이터프레임을 기반으로 막대그래프를 그린다.

sns.barplot(data=행정구역별_병원당노인인구수_df, x="병원당 노인 인구수", y="행정구역")

 

해당 그래프는 각 행정구역 별 병원당 노인 인구수를 나타낸다. 즉, 병원당 노인 인구수 수치가 높을 수록 해당 행정구역의 병원 수 보다 노인 인구수가 많음을 의미한다. 

결과


분석 결과, 전라남도, 경상북도, 강원도, 경상남도에서는 병원당 노인 인구수가 매우 높은 반면, 광주광역시, 대전광역시, 대구광역시에서는 상대적으로 낮은 것으로 나타났다. 특히 농촌 지역에서 이러한 경향이 두드러졌으며, 이는 해당 지역의 의료 자원 부족 문제를 시사한다. 

 

논의


본 연구는 지역별 병원당 노인 인구수의 차이를 실증적으로 보여주었다. 병원당 노인 인구수가 높게 나타난 지역에서는 의료 서비스에 대한 접근성이 낮아질 수 있으며, 의료 시스템의 부담이 증가할 수 있다. 이를 통해 노인 인구가 집중된 지역에서의 의료 서비스 접근성 향상을 위한 의료 인프라 확충, 의료 인력 배치의 재고 및 이동 의료 서비스 강화 등의 정책적 개입이 필요함을 제안한다. 

 

결론


본 연구는 행정구역별 병원당 노인 인구수를 비교 분석함으로써 지역별 의료 접근성의 불균형 문제를 밝혀냈다. 이러한 분석 결과는 정책 결정자들이 지역별 특성을 고려한 맞춤형 정책을 수립하는 데 기여할 수 있을 것이다.

 

참고 문헌


  • 공공 데이터 포털. (2024). 행정구역별 인구 통계.
  • 공공 데이터 포털. (2024). 의료 기관 데이터.
  • Pandas 라이브러리 공식 문서.
  • Seaborn 라이브러리 공식 문서.