Population pyramid
1. 인구 피라미드
남자 데이터 정의
import pandas as pd
file_name = '201201_201201_연령별인구현황_월간.xlsx'
df_m = pd.read_excel(file_name, skiprows=3, index_col='행정기관', usecols='B,E:Y')
df_m.head(3)
C:\Users\Chae\anaconda3\lib\site-packages\openpyxl\styles\stylesheet.py:226: UserWarning: Workbook contains no default style, apply openpyxl's default warn("Workbook contains no default style, apply openpyxl's default")
0~4세 | 5~9세 | 10~14세 | 15~19세 | 20~24세 | 25~29세 | 30~34세 | 35~39세 | 40~44세 | 45~49세 | ... | 55~59세 | 60~64세 | 65~69세 | 70~74세 | 75~79세 | 80~84세 | 85~89세 | 90~94세 | 95~99세 | 100세 이상 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
행정기관 | |||||||||||||||||||||
전국 | 1,196,298 | 1,215,642 | 1,627,682 | 1,878,394 | 1,692,322 | 1,798,832 | 2,058,717 | 2,151,718 | 2,346,348 | 2,171,235 | ... | 1,608,133 | 1,139,681 | 885,678 | 719,811 | 437,707 | 194,827 | 77,608 | 22,964 | 4,766 | 2,691 |
서울특별시 | 216,843 | 212,597 | 282,790 | 344,798 | 337,696 | 421,899 | 475,109 | 452,897 | 463,064 | 412,326 | ... | 334,448 | 240,777 | 190,839 | 139,263 | 74,020 | 32,185 | 13,282 | 4,663 | 1,203 | 907 |
부산광역시 | 67,475 | 69,137 | 99,796 | 128,970 | 123,263 | 126,669 | 138,762 | 134,439 | 148,476 | 145,068 | ... | 137,184 | 100,614 | 73,804 | 55,002 | 29,768 | 12,274 | 4,325 | 1,141 | 244 | 230 |
3 rows × 21 columns
df_m.iloc[0] = df_m.iloc[0].str.replace(',','').astype(int) # ,를 없애야 숫자 형태
# 778,266 -> 778266 (정수형)
df_m.iloc[0]
0~4세 1196298 5~9세 1215642 10~14세 1627682 15~19세 1878394 20~24세 1692322 25~29세 1798832 30~34세 2058717 35~39세 2151718 40~44세 2346348 45~49세 2171235 50~54세 2182972 55~59세 1608133 60~64세 1139681 65~69세 885678 70~74세 719811 75~79세 437707 80~84세 194827 85~89세 77608 90~94세 22964 95~99세 4766 100세 이상 2691 Name: 전국 , dtype: object
여자 데이터 정의
df_w = pd.read_excel(file_name, skiprows=3, index_col='행정기관', usecols='B,AB:AV')
df_w.head(3)
C:\Users\Chae\anaconda3\lib\site-packages\openpyxl\styles\stylesheet.py:226: UserWarning: Workbook contains no default style, apply openpyxl's default warn("Workbook contains no default style, apply openpyxl's default")
0~4세.1 | 5~9세.1 | 10~14세.1 | 15~19세.1 | 20~24세.1 | 25~29세.1 | 30~34세.1 | 35~39세.1 | 40~44세.1 | 45~49세.1 | ... | 55~59세.1 | 60~64세.1 | 65~69세.1 | 70~74세.1 | 75~79세.1 | 80~84세.1 | 85~89세.1 | 90~94세.1 | 95~99세.1 | 100세 이상.1 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
행정기관 | |||||||||||||||||||||
전국 | 1,128,024 | 1,126,625 | 1,492,152 | 1,659,937 | 1,525,305 | 1,691,682 | 1,975,775 | 2,068,220 | 2,277,052 | 2,051,092 | ... | 1,624,628 | 1,189,414 | 1,009,513 | 933,302 | 700,197 | 429,811 | 208,227 | 73,481 | 19,130 | 9,067 |
서울특별시 | 205,591 | 199,837 | 260,917 | 309,366 | 333,116 | 431,682 | 466,958 | 437,616 | 460,637 | 408,707 | ... | 361,120 | 258,846 | 205,704 | 159,556 | 108,150 | 67,410 | 34,724 | 13,038 | 3,930 | 2,718 |
부산광역시 | 64,052 | 64,215 | 89,346 | 109,301 | 109,765 | 118,838 | 132,634 | 130,434 | 152,203 | 148,289 | ... | 143,244 | 105,702 | 79,870 | 68,449 | 47,084 | 28,764 | 13,212 | 4,138 | 1,169 | 848 |
3 rows × 21 columns
df_m.columns
Index(['0~4세', '5~9세', '10~14세', '15~19세', '20~24세', '25~29세', '30~34세', '35~39세', '40~44세', '45~49세', '50~54세', '55~59세', '60~64세', '65~69세', '70~74세', '75~79세', '80~84세', '85~89세', '90~94세', '95~99세', '100세 이상'], dtype='object')
df_w.columns
Index(['0~4세.1', '5~9세.1', '10~14세.1', '15~19세.1', '20~24세.1', '25~29세.1', '30~34세.1', '35~39세.1', '40~44세.1', '45~49세.1', '50~54세.1', '55~59세.1', '60~64세.1', '65~69세.1', '70~74세.1', '75~79세.1', '80~84세.1', '85~89세.1', '90~94세.1', '95~99세.1', '100세 이상.1'], dtype='object')
df_w.columns = df_m.columns # column명 통일
df_w.columns
Index(['0~4세', '5~9세', '10~14세', '15~19세', '20~24세', '25~29세', '30~34세', '35~39세', '40~44세', '45~49세', '50~54세', '55~59세', '60~64세', '65~69세', '70~74세', '75~79세', '80~84세', '85~89세', '90~94세', '95~99세', '100세 이상'], dtype='object')
df_w.iloc[0] = df_w.iloc[0].str.replace(',','').astype(int) # ,를 없애야 숫자 형태
df_w
0~4세 | 5~9세 | 10~14세 | 15~19세 | 20~24세 | 25~29세 | 30~34세 | 35~39세 | 40~44세 | 45~49세 | ... | 55~59세 | 60~64세 | 65~69세 | 70~74세 | 75~79세 | 80~84세 | 85~89세 | 90~94세 | 95~99세 | 100세 이상 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
행정기관 | |||||||||||||||||||||
전국 | 1128024 | 1126625 | 1492152 | 1659937 | 1525305 | 1691682 | 1975775 | 2068220 | 2277052 | 2051092 | ... | 1624628 | 1189414 | 1009513 | 933302 | 700197 | 429811 | 208227 | 73481 | 19130 | 9067 |
서울특별시 | 205,591 | 199,837 | 260,917 | 309,366 | 333,116 | 431,682 | 466,958 | 437,616 | 460,637 | 408,707 | ... | 361,120 | 258,846 | 205,704 | 159,556 | 108,150 | 67,410 | 34,724 | 13,038 | 3,930 | 2,718 |
부산광역시 | 64,052 | 64,215 | 89,346 | 109,301 | 109,765 | 118,838 | 132,634 | 130,434 | 152,203 | 148,289 | ... | 143,244 | 105,702 | 79,870 | 68,449 | 47,084 | 28,764 | 13,212 | 4,138 | 1,169 | 848 |
대구광역시 | 49,948 | 53,051 | 75,410 | 85,710 | 74,443 | 78,377 | 92,385 | 102,300 | 119,437 | 110,168 | ... | 85,274 | 62,991 | 48,418 | 44,476 | 31,975 | 18,546 | 8,294 | 2,810 | 674 | 299 |
인천광역시 | 64,864 | 63,616 | 83,564 | 98,190 | 91,558 | 96,173 | 111,632 | 116,458 | 131,634 | 124,498 | ... | 83,158 | 55,092 | 45,735 | 40,026 | 30,147 | 19,094 | 9,480 | 3,257 | 796 | 340 |
광주광역시 | 34,978 | 37,433 | 52,811 | 57,080 | 47,370 | 50,389 | 58,849 | 62,657 | 67,102 | 58,957 | ... | 39,857 | 32,150 | 25,430 | 22,227 | 15,967 | 10,292 | 4,979 | 1,937 | 483 | 231 |
대전광역시 | 36,093 | 37,409 | 49,028 | 53,858 | 48,660 | 52,617 | 61,324 | 65,195 | 71,439 | 61,626 | ... | 45,575 | 30,964 | 24,734 | 21,572 | 16,432 | 10,054 | 4,925 | 1,664 | 446 | 171 |
울산광역시 | 27,457 | 26,136 | 36,544 | 41,047 | 33,731 | 35,482 | 43,997 | 46,873 | 56,623 | 50,929 | ... | 34,158 | 21,359 | 15,118 | 12,825 | 9,493 | 6,071 | 3,104 | 964 | 235 | 74 |
경기도 | 303,357 | 304,120 | 384,018 | 407,977 | 363,742 | 392,430 | 491,417 | 541,293 | 585,302 | 499,588 | ... | 327,612 | 223,844 | 195,150 | 173,894 | 127,929 | 77,323 | 38,307 | 13,656 | 3,472 | 1,560 |
강원도 | 30,345 | 32,906 | 44,797 | 48,519 | 41,916 | 40,155 | 48,140 | 54,839 | 61,788 | 60,033 | ... | 54,606 | 37,163 | 39,412 | 39,172 | 27,889 | 17,883 | 9,032 | 3,218 | 778 | 294 |
충청북도 | 35,343 | 35,345 | 47,541 | 51,326 | 44,030 | 47,141 | 53,863 | 58,887 | 66,286 | 59,916 | ... | 49,960 | 34,890 | 34,302 | 34,572 | 28,331 | 16,628 | 7,721 | 2,724 | 700 | 218 |
충청남도 | 50,196 | 48,319 | 62,034 | 65,004 | 58,388 | 61,733 | 72,805 | 77,695 | 82,638 | 74,456 | ... | 64,268 | 52,593 | 47,814 | 51,632 | 44,245 | 25,532 | 12,347 | 4,316 | 1,114 | 430 |
전라북도 | 39,258 | 41,556 | 57,815 | 63,584 | 53,136 | 51,798 | 59,084 | 66,444 | 73,506 | 68,970 | ... | 59,516 | 52,141 | 46,748 | 48,723 | 40,106 | 24,689 | 11,191 | 4,179 | 1,054 | 411 |
전라남도 | 39,129 | 39,570 | 55,977 | 61,266 | 48,823 | 47,507 | 54,873 | 59,908 | 68,800 | 68,319 | ... | 59,716 | 56,165 | 56,025 | 63,042 | 48,400 | 31,154 | 14,607 | 5,210 | 1,346 | 510 |
경상북도 | 55,342 | 53,470 | 72,403 | 79,585 | 72,043 | 75,465 | 88,163 | 94,825 | 105,919 | 102,809 | ... | 95,244 | 74,322 | 66,870 | 72,621 | 58,569 | 35,449 | 17,012 | 6,066 | 1,400 | 418 |
경상남도 | 78,113 | 74,948 | 100,365 | 107,721 | 88,713 | 95,623 | 120,125 | 130,369 | 147,946 | 131,028 | ... | 104,561 | 78,006 | 66,308 | 68,975 | 55,660 | 34,847 | 15,953 | 4,719 | 1,036 | 391 |
제주특별자치도 | 13,958 | 14,694 | 19,582 | 20,403 | 15,871 | 16,272 | 19,526 | 22,427 | 25,792 | 22,799 | ... | 16,759 | 13,186 | 11,875 | 11,540 | 9,820 | 6,075 | 3,339 | 1,585 | 497 | 154 |
17 rows × 21 columns
데이터 시각화
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Malgun Gothic' # 글자 폰트
matplotlib.rcParams['font.size'] = 15 # 글자 크기
matplotlib.rcParams['axes.unicode_minus'] = False # 한글 폰트 사용 시, 마이너스 글자가 깨지는 현상을 해결
plt.figure(figsize=(10,7))
plt.barh(df_m.columns, -df_m.iloc[0] // 1000 ) # 단위 : 천 명
plt.barh(df_w.columns, df_w.iloc[0] // 1000 )
plt.title("2012년 대한민국 인구 피라미드")
plt.savefig('2012_인구피라미드.png', dpi=100)
plt.show()
댓글남기기