인구분석
1. 배경
- 목표
: 인구 소멸 위기 지역 파악
: 인구 소멸 위기 지역의 지도 표현
: 지도 표현 => 카르토그램
2. 데이터 읽고 인구 소멸 지역 계산하기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import set_matplotlib_hangul
# import warnings
# warnings.filterwarnings(action="ignore")
%matplotlib inline
1) fillna() 옵션 알아보기
datas = {
"A" : np.random.randint(1, 45, 7),
"B" : np.random.randint(1, 45, 7),
"C" : np.random.randint(1, 45, 7),
}
datas
=>
{'A': array([12, 9, 5, 44, 30, 23, 9]),
'B': array([31, 6, 40, 2, 4, 36, 5]),
'C': array([20, 39, 42, 23, 4, 8, 9])}
- fillna_df = pd.DataFrame(datas)
fillna_df
![](https://velog.velcdn.com/images/juubinkim/post/8ac872e1-84a7-431c-820f-3334be594feb/image.png)
- fillna_df.loc[2:4, ["A"]] = np.nan
fillna_df.loc[3:5, ["B"]] = np.nan
fillna_df.loc[4:6, ["C"]] = np.nan
fillna_df
![](https://velog.velcdn.com/images/juubinkim/post/42082b67-f6ae-4f2f-8b91-af53a85380bf/image.png)
- 기본값(method) : value = 원하는 숫자
fillna_df.fillna(method="pad") # 바로 앞 데이터로 채워주기 = "ffill"
fillna_df.fillna(method="backfill") 뒤 데이터로 채워주기 / 반드시 뒤에 데이터가 있어야함
2) 인구 분석 실습
population = pd. read_excel("../data/07_population_raw_data.xlsx", header=1)
population.fillna(method="pad", inplace=True) # 컬럼의 NaN값 없애기
population.head(5)
population.rename(
columns = {
"행정구역(동읍면)별(1)" : "광역시도",
"행정구역(동읍면)별(2)" : "시도",
"계" : "인구수"
}, inplace=True
)
population.head()
population = population[population["시도"] != "소계"]
population.head()
population.is_copy = False
population.rename(
columns ={ "항목" : "구분" }, inplace=True
)
population.head()
population.loc[ population["구분"] == "총인구수 (명)" , "구분"] = "합계"
population.loc[ population["구분"] == "남자인구수 (명)" , "구분"] = "남자"
population.loc[ population["구분"] == "여자인구수 (명)" , "구분"] = "여자"
- 소멸 지역을 조사하기 위한 데이터 : 나이 데이터 컬럼 추가
population["20-39세"] = (
population["20 - 24세"] + population["25 - 29세"] + population["30 - 34세"] + population["35 - 39세"]
)
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+"]
)
코드를 입력하세요
pop = pd.pivot_table(
data = population,
index = ["광역시도", "시도"],
columns = ["구분"],
values = ["인구수", "20-39세", "65세이상"]
)
pop
![](https://velog.velcdn.com/images/juubinkim/post/094814ad-4e4a-466a-8522-8b2e25c56d24/image.png)
pop["소멸비율"] = pop["20-39세", "여자"] / (pop["65세이상", "합계"] / 2)
pop.tail()
pop["소멸위기지역"] = pop["소멸비율"] < 1.0
pop