[pandas] 대한민국의 인구분석 및 시각화
대한민국의 인구 분석 및 시각화
위키백과 - 대한민국의 인구
-
https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%EA%B5%AC
-
html 문서의 테이블 가져오기
import pandas as pd
url = "https://ko.wikipedia.org/wiki/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD%EC%9D%98_%EC%9D%B8%EA%B5%AC"
html = pd.read_html(url)
#len(population)
#html
html[4] #url 문서의 4번째 인덱스 테이블 가져오기
연도 (년) | 추계인구(명) | 출생자수(명) | 사망자수(명) | 자연증가수(명) | 조출생률 (1000명당) | 조사망률 (1000명당) | 자연증가율 (1000명당) | 합계출산율 | |
---|---|---|---|---|---|---|---|---|---|
0 | 1925 | 12997611 | 558897 | 359042 | 199855 | 43.0 | 27.6 | 15.4 | 6.590 |
1 | 1926 | 13052741 | 511667 | 337948 | 173719 | 39.2 | 25.9 | 13.3 | NaN |
2 | 1927 | 13037169 | 534524 | 353818 | 180706 | 41.0 | 27.1 | 13.9 | NaN |
3 | 1928 | 13105131 | 566142 | 357701 | 208441 | 43.2 | 27.3 | 15.9 | NaN |
4 | 1929 | 13124279 | 566969 | 414366 | 152603 | 43.2 | 31.6 | 11.6 | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
92 | 2017 | 51446201 | 357771 | 285534 | 72237 | 7.0 | 5.5 | 1.5 | 1.052 |
93 | 2018 | 51635256 | 326822 | 298820 | 28002 | 6.4 | 5.8 | 0.6 | 0.977 |
94 | 2019 | 51709098 | 303054 | 295132 | 7922 | 5.9 | 5.7 | 0.2 | 0.918 |
95 | 2020 | 51829023 | 272337 | 304948 | -32611 | 5.3 | 5.9 | -0.6 | 0.837 |
96 | 2021 | 51744876 | 260494 | 317773 | -57280 | 5.1 | 6.2 | -1.1 | 0.810 |
97 rows × 9 columns
birth_death_statistics = html[4] # 출생 및 사망 통계
#birth_death_statistics.shape
birth_death_statistics
연도 (년) | 추계인구(명) | 출생자수(명) | 사망자수(명) | 자연증가수(명) | 조출생률 (1000명당) | 조사망률 (1000명당) | 자연증가율 (1000명당) | 합계출산율 | |
---|---|---|---|---|---|---|---|---|---|
0 | 1925 | 12997611 | 558897 | 359042 | 199855 | 43.0 | 27.6 | 15.4 | 6.590 |
1 | 1926 | 13052741 | 511667 | 337948 | 173719 | 39.2 | 25.9 | 13.3 | NaN |
2 | 1927 | 13037169 | 534524 | 353818 | 180706 | 41.0 | 27.1 | 13.9 | NaN |
3 | 1928 | 13105131 | 566142 | 357701 | 208441 | 43.2 | 27.3 | 15.9 | NaN |
4 | 1929 | 13124279 | 566969 | 414366 | 152603 | 43.2 | 31.6 | 11.6 | NaN |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
92 | 2017 | 51446201 | 357771 | 285534 | 72237 | 7.0 | 5.5 | 1.5 | 1.052 |
93 | 2018 | 51635256 | 326822 | 298820 | 28002 | 6.4 | 5.8 | 0.6 | 0.977 |
94 | 2019 | 51709098 | 303054 | 295132 | 7922 | 5.9 | 5.7 | 0.2 | 0.918 |
95 | 2020 | 51829023 | 272337 | 304948 | -32611 | 5.3 | 5.9 | -0.6 | 0.837 |
96 | 2021 | 51744876 | 260494 | 317773 | -57280 | 5.1 | 6.2 | -1.1 | 0.810 |
97 rows × 9 columns
한글 폰트 설정
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
seaborn
- Matplotlib을 기반으로 다양한 색상 테마와 통계용 차트 등의 기능을 추가한 시각화 패키지.
- http://seaborn.pydata.org/
#!pip install IPython
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(font="NanumBarunGothic") # 글꼴 설정
plt.figure(figsize=(15,4)) # 차트의 크기
plt.xticks(rotation=90) # x축 레이블 각도
sns.pointplot(data=birth_death_statistics, x="연도 (년)", y="추계인구(명)")
plt.figure(figsize=(15,4))
plt.xticks(rotation=60)
sns.lineplot(data=birth_death_statistics, x="연도 (년)", y="추계인구(명)")
plt.figure(figsize=(15,4))
plt.xticks(rotation=60)
sns.pointplot(data=birth_death_statistics, x="연도 (년)", y="출생자수(명)")
- y축의 의미 : 1e6 = 10**6
plt.figure(figsize=(15,4))
plt.xticks(rotation=60)
sns.lineplot(data=birth_death_statistics, x="연도 (년)", y="사망자수(명)")
plt.figure(figsize=(15,8))
plt.xticks(rotation=60)
sns.lineplot(data=birth_death_statistics, x="연도 (년)", y="출생자수(명)")
sns.lineplot(data=birth_death_statistics, x="연도 (년)", y="사망자수(명)", color="orange")
birth_death_statistics.columns
Index(['연도 (년)', '추계인구(명)', '출생자수(명)', '사망자수(명)', '자연증가수(명)', '조출생률 (1000명당)',
'조사망률 (1000명당)', '자연증가율 (1000명당)', '합계출산율'],
dtype='object')
pandas에서 기본으로 제공하는 plot을 이용하여 차트 만들기
temp = birth_death_statistics[['연도 (년)','출생자수(명)','사망자수(명)']]
temp = temp.set_index('연도 (년)') # 연도 (년) 데이터를 x축으로 변경
temp.plot(figsize=(15,4))
temp
출생자수(명) | 사망자수(명) | |
---|---|---|
연도 (년) | ||
1925 | 558897 | 359042 |
1926 | 511667 | 337948 |
1927 | 534524 | 353818 |
1928 | 566142 | 357701 |
1929 | 566969 | 414366 |
... | ... | ... |
2017 | 357771 | 285534 |
2018 | 326822 | 298820 |
2019 | 303054 | 295132 |
2020 | 272337 | 304948 |
2021 | 260494 | 317773 |
97 rows × 2 columns
#temp[-50:] #최근 50년
temp[-50:].plot(figsize=(15,8))
seaborn - barplot 만들기
plt.figure(figsize=(15,4))
plt.xticks(rotation=60)
#sns.barplot(data=birth_death_statistics, x="연도 (년)", y="추계인구(명)")
sns.barplot(data=birth_death_statistics, x="연도 (년)", y="추계인구(명)", palette="Blues")
plt.figure(figsize=(15,4))
plt.xticks(rotation=60)
sns.pointplot(data=birth_death_statistics, x="연도 (년)", y="추계인구(명)", palette="Blues")
plt.figure(figsize=(15,4))
plt.xticks(rotation=60)
sns.lineplot(data=birth_death_statistics, x="연도 (년)", y="추계인구(명)")
댓글남기기