TOP
class="layout-aside-left paging-number">
본문 바로가기
데이터분석 만능열쇠 [파이썬]/<파이썬 데이터 분석>

[파이썬] 우리나라 인구 소멸 위기 지역 분석 - 1

by 기록자_Recordian 2024. 4. 29.
728x90
반응형
시작에 앞서
해당 내용은 <파이썬으로 데이터 주무르기> -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.
보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.

인구 소멸 지역 조사 목표

 

우리나라의 인구 소멸 지역 위기 지역을 조사하고 시각화하여 위기감을 일으키는 것이 목적.

대한민국 지도를 그리고 그 위에 인구 소멸 위기 지역에 대해 매핑하여 시각화하는 것을 최종 목적으로 함.

 

인구 소멸 지역의 정의: 65세 이상 노인 인구와 20~39세 여성 인구를 비교해서 젊은 여성 인구가 노인 인구의 절반에 미달할 경우 인고 소멸 지역으로 분류

 

[진행 과정]

  • 먼저, 각 지역별 20~30대 여성 인구, 65세 이상 노인 인구 파악
  • 인구 소멸 위기 지역인지 파악
  • 한국 지도에 시각화 하기 위해 한국 지도를 그리는 법 확보 (Folium 과 다른 방법)

인구 데이터 확보하기 정리하기

 

인구 데이터 확보를 위해서는 국가통계포털 > 인구총조사 > 전수기본표 > 성, 연령 및 세대구성별 인구 - 시군구   수록기간년 2015~2022통계표파일다운로드통계표정보확인 (하단링크) 에서 확인하는 것이 맞으나,

교재와 일치하는 데이터로 진행하는 것이 파이썬을 학습하는 목표에 더 가까우므로, 저자의 git hub에서 해당 엑셀 데이터를 다운로드하기로 한다. (물론, 추후에는 실제 데이터를 토대로 통계를 낼 수 있어야 한다)

 

KOSIS

 

kosis.kr

 

05. population_raw_data.xlsx
0.09MB

 

※ 본인이 작업하는 폴더에 다운로드 받는다


작업을 위한 기본 세팅 하기(모듈 import, 한글 폰트 문제 등)
# pandas, numpy 모듈 import
import pandas as pd
import numpy as np

# 운영 체제 정보를 확인하고, matplotlib을 사용하여 그래프 그릴 준비하기
import platform
import matplotlib.pyplot as plt

%matplotlib inline

path = "c:/Windows/Fonts/malgun.ttf"

from matplotlib import font_manager, rc
if platform.system() == 'Windows':
    font_name = font_manager.FontProperties(fname=path).get_name()
    rc('font', family=font_name)
else:
    print('Sorry')

plt.rcParams['axes.unicode_minus'] = False

인구 데이터 엑셀 파일 불러오기
population = pd.read_excel('../data/05. population_raw_data.xlsx', header=1) #두번째 줄부터 읽기
population.fillna(method='pad', inplace=True) #빈 셀에 대해 NaN 처리하지 않고 그 앞 내용으로 채우기

#컬럼명 바꾸기
population.rename(columns = {'행정구역(동읍면)별(1)':'광역시도',
                             '행정구역(동읍면)별(2)':'시도',
                             '계':'인구수'}, inplace=True)

#소계 항목 없애기
population = population[(population['시도'] != '소계')]

population

인구 데이터 엑셀 파일 내용
792 행까지 있는 데이터 임을 알 수 있다

 

컬럼명 바꾸기
population.is_copy = False

#컬럼명 바꾸기 : 항목 > 구분
population.rename(columns = {'항목':'구분'}, inplace=True)

#구분 컬럼 내용 바꾸기
population.loc[population['구분'] == '총인구수 (명)', '구분'] = '합계'
population.loc[population['구분'] == '남자인구수 (명)', '구분'] = '남자'
population.loc[population['구분'] == '여자인구수 (명)', '구분'] = '여자'

population

컬럼명, 컬럼 내 데이터 바꾸기

 


인구 소멸 위기 지역 계산하고 데이터 정리하기

 

20~30대 인구, 65세 이상 인구수 계산하기

# 20-39세 인구 계산
population['20-39세'] = population['20 - 24세'] + population['25 - 29세'] + \
                        population['30 - 34세'] + population['35 - 39세']


# 65세 이상 인구 계산
population['65세이상'] = population['65 - 69세'] + population['70 - 74세'] + \
                         population['75 - 79세'] + population['80 - 84세'] + \
                         population['85 - 89세'] + population['90 - 94세'] + \
                         population['95 - 99세'] + population['100+'] 

population.head()

20~30세, 65세 이상 인구 계산

 

pivot_table 로 데이터 합치기
pop = pd.pivot_table(population,
                     index = ['광역시도', '시도'],  
                     columns = ['구분'],
                     values = ['인구수', '20-39세', '65세이상']) #인구수와 20-39세, 65세 이상만 데이터로 가져옴
pop

pivot_table 로 데이터 합치기

인구 소멸 비율 계산하기

 

지역별 20-39세 여성 인구와 65세 이상 인구를 계산하였으니, 이를 토대로 인구 소멸 비율 계산

pop['소멸비율'] = pop['20-39세','여자'] / (pop['65세이상','합계']/2)
pop.head()

지역별 인구 소멸 비율 계산하기

인구 소멸 위기 지역 표시하기

 

인구 소멸 위기 지역에 대한 정의에 의해 위에서 계산한 소멸비율이 1 이하면 소멸위기지역이라고 기록

pop['소멸위기지역'] = pop['소멸비율'] < 1.0
pop.head()

인구소멸위기지역 기록

 

소멸위기지역 지역 리스트 뽑기 (소멸위기지역이 'True'인 지역)

pop[pop['소멸위기지역']==True].index.get_level_values(1)

인구 소멸 위기 지역 리스트

# DataFrame인 pop에서 인덱스를 재설정

pop.reset_index(inplace=True)
pop.head()

인덱스 재설정

 

다단으로 된 컬럼 하나로 합치기

# pop DataFrame의 다중 레벨 열 인덱스에서 각 열 이름의 첫 번째 수준과 두 번째 수준을 가져와서 새로운 열 이름을 만듦

tmp_columns = [pop.columns.get_level_values(0)[n] + pop.columns.get_level_values(1)[n]
               for n in range(0,len(pop.columns.get_level_values(0)))]

# 새로운 열 이름 리스트인 tmp_columns를 만든 후, 이를 pop DataFrame의 열에 할당

pop.columns = tmp_columns

pop.head()

다단으로 된 컬럼 하나로 합치기

 

info 명령을 통해 데이터 요약 보기

info 명령

다음 시간에는 대한민국 지도를 불러와 시각화 진행


다음글

[파이썬] 우리나라 인구 소멸 위기 지역 분석 - 2

728x90
반응형