파이썬 - 인구조사(실습)
PYTHON PROGRAMMING
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
%matplotlib inline
import platform
from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False
if platform.system() == 'Darwin':
rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
path = "c:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)
else:
print('Unknown system... sorry~~~~')
https://mois.go.kr
에서, 연령별 인구현황 통계표를 csv로 다운로드 합니다. (남녀구문을 uncheck, 연령1세단위, 0~100, 전체읍면동현황)
df = pd.read_csv("age.csv",encoding='cp949',thousands=',')
df
행정구역 | 2019년07월_계_총인구수 | 2019년07월_계_연령구간인구수 | 2019년07월_계_0세 | 2019년07월_계_1세 | 2019년07월_계_2세 | 2019년07월_계_3세 | 2019년07월_계_4세 | 2019년07월_계_5세 | 2019년07월_계_6세 | ... | 2019년07월_계_91세 | 2019년07월_계_92세 | 2019년07월_계_93세 | 2019년07월_계_94세 | 2019년07월_계_95세 | 2019년07월_계_96세 | 2019년07월_계_97세 | 2019년07월_계_98세 | 2019년07월_계_99세 | 2019년07월_계_100세 이상 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 서울특별시 (1100000000) | 9751415 | 9751415 | 52269 | 56871 | 61712 | 68720 | 70746 | 69097 | 72474 | ... | 7430 | 5689 | 4099 | 3061 | 2448 | 2492 | 1727 | 1189 | 891 | 6123 |
1 | 서울특별시 종로구 (1111000000) | 151858 | 151858 | 620 | 604 | 735 | 869 | 849 | 857 | 980 | ... | 153 | 144 | 115 | 80 | 70 | 63 | 67 | 40 | 37 | 247 |
2 | 서울특별시 종로구 청운효자동(1111051500) | 12886 | 12886 | 63 | 69 | 87 | 78 | 109 | 87 | 104 | ... | 7 | 9 | 14 | 8 | 7 | 6 | 5 | 4 | 2 | 17 |
3 | 서울특별시 종로구 사직동(1111053000) | 9402 | 9402 | 36 | 43 | 55 | 59 | 75 | 68 | 75 | ... | 12 | 8 | 13 | 5 | 5 | 9 | 1 | 3 | 4 | 18 |
4 | 서울특별시 종로구 삼청동(1111054000) | 2782 | 2782 | 7 | 9 | 13 | 12 | 11 | 11 | 9 | ... | 6 | 6 | 2 | 3 | 1 | 1 | 2 | 1 | 1 | 7 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
3812 | 제주특별자치도 서귀포시 서홍동(5013058000) | 10505 | 10505 | 73 | 88 | 102 | 117 | 135 | 119 | 158 | ... | 11 | 1 | 5 | 0 | 1 | 3 | 2 | 1 | 0 | 2 |
3813 | 제주특별자치도 서귀포시 대륜동(5013059000) | 14356 | 14356 | 123 | 147 | 171 | 173 | 169 | 173 | 146 | ... | 10 | 9 | 6 | 2 | 2 | 11 | 5 | 1 | 3 | 7 |
3814 | 제주특별자치도 서귀포시 대천동(5013060000) | 13724 | 13724 | 123 | 160 | 192 | 210 | 187 | 179 | 178 | ... | 19 | 8 | 3 | 6 | 2 | 4 | 4 | 1 | 3 | 1 |
3815 | 제주특별자치도 서귀포시 중문동(5013061000) | 11279 | 11279 | 67 | 67 | 73 | 92 | 108 | 92 | 121 | ... | 11 | 9 | 5 | 2 | 3 | 6 | 1 | 2 | 1 | 6 |
3816 | 제주특별자치도 서귀포시 예래동(5013062000) | 4069 | 4069 | 31 | 19 | 25 | 30 | 29 | 23 | 30 | ... | 4 | 7 | 4 | 3 | 0 | 7 | 3 | 1 | 1 | 4 |
3817 rows × 104 columns
실습 1. ‘삼청동’ 의 인구 구조를, 0세부터 100세 까지 나이대 별로 몇명이 있는지 시각화 하세요.
- 가로축은 나이, 세로축은 인구수
# df.loc[df['행정구역'].str.contains("삼청동"),'2019년07월_계_0세':].values 의 메모리를 보면 2차원 배열이다.
# 2차원 배열은 plot 의 변수가 될 수 없으므로 reshape(-1)을 통하여 1차원 배열로 변수를 바꿔준다.
pop_city = df.loc[df['행정구역'].str.contains("삼청동"),'2019년07월_계_0세':].values.reshape(-1)
plt.plot(np.arange(101),age.values.reshape(-1))
plt.xlabel("나이")
plt.ylabel("인구수")
plt.title('삼청동 인구수')
plt.show()
실습 2. ‘종로구’ 의 인구 구조를, 0세부터 100세 까지 나이대 별로 몇명이 있는지 시각화 하세요.
- 가로축은 나이, 세로축은 인구수
df2 = df.loc[df['행정구역'].str.contains("종로구"),'2019년07월_계_0세':]
city_pop = df2.iloc[0].values
plt.plot(np.arange(0,101),city_pop)
plt.xlabel("나이")
plt.ylabel("인구수")
plt.title('종로구 인구수')
plt.show()
댓글남기기