지금까지 배운 파이썬 함수들을 이용하여 인구조사 데이터를 차트로 그려보자
먼저 한글 데이터를 다루기 위해 다음과 같은 구문을 쓴다.
# 한글 찍기
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~~~~')
데이터를 받아오려면 행정안전부 홈페이지에서 정책 자료에 주인등록 인구통계에 가보면 csv 파일을 다운 받을 수 있다.
이 csv데이터를 불러서 작업을 한다. (본인의 파이썬 연습폴더에 저장하고 불러드린다.)
우선 데이터를 불러온다.
df=pd.read_csv('../data/age.csv',encoding='cp949')
df
그럼 데이터가 엄청 나오는데(뒤가 짤릴정도로 많다) 이 데이터를 그냥 쓰는것이 아니라 쉼표 단위를 잘라야 한다.
쉼표 단위가 있다면 문자열 데이터로 인식하기 때문이다. 쉼표 단위를 자르는 방법은 코드를 이용한다.
# 천딘위마다 컴마가 있으면 thousands로 뺀다.
df = pd.read_csv('../data/age.csv',encoding='cp949',thousands=',')
그럼 이렇게 데이터 전체에 쉼표가 없어진걸 알 수 있다.
1. 첫번째 '삼청동' 의 인구 구조를, 0세부터 100세 까지 나이대 별로 몇명이 있는지 시각화 하세요. 문제를 풀어보자
우선 삼청동 컬럼에서 0세부터 100세까지의 나이대 데이터를 가져와야한다.
#삼청동에서 0세부터~끝까지
df2 = df.loc[df['행정구역'].str.contains("삼청동"),"2019년07월_계_0세": ].values
df2
>>> array([[ 7, 9, 13, 12, 11, 11, 9, 11, 20, 18, 18, 23, 23, 19, 17, 16,
20, 25, 25, 27, 22, 35, 34, 29, 42, 38, 38, 32, 31, 36, 53, 32,
29, 42, 45, 29, 45, 50, 45, 52, 43, 36, 34, 29, 35, 33, 41, 37,
46, 48, 44, 47, 33, 46, 41, 40, 44, 57, 47, 49, 52, 45, 45, 44,
49, 35, 40, 37, 18, 28, 34, 40, 29, 24, 27, 25, 27, 36, 24, 27,
17, 18, 16, 19, 16, 12, 14, 10, 11, 9, 1, 6, 6, 2, 3, 1,
1, 2, 1, 1, 7]], dtype=int64)
그래프의 인덱스값을 표시할 넘파이 데이터를 만든다.
#x에 넘파이 데이터 저장
x = np.arange(0,100+1)
x
>>> array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100])
두데이터의 차원이 맞지 않으면 안되기 때문에 차원을 확인한다.
#x 데이터 차원확인
x.ndim
>>>1
#df2(심청동)데이터 차원확인
df2.ndim
>>>2
#서로 맞지 않기 때문에 df2를 reshape로 1차원으로 맞춘다.
df2=df2.reshape(101,)
df2
df2.ndim
>>>1
이제 차트를 그려보자
#x값 y값이 차원이 맞아야 해결된다.
plt.plot(x,df2)
plt.show()
위처럼 결과가 나올 수 있다.
두번째 각 구를 입력하면 그 구의 인구 구조를, 만0세, 15, 25, 35, 45세 까지 5개 영역의 파이차트로, 각 인구수를 시각화 하세요를 풀어보자
아까 그 데이터를 활용하면 코드를 간단히 짤수 있다.
#입력 함수 input
name = input("구를 입력하세요:")
#데이터에서 0,15,25,35,45까지만 가져와라
df5 = df.loc[df['행정구역'].str.contains(name), ]
df6=df5.iloc[0,[3,15+3,25+3,35+3,45+3] ]
df6
#파이차트 그리기
plt.pie(df6, labels=df6.index, autopct='%.1f',startangle= 90 ,
wedgeprops= {'width':0.7})
#입력을 받으면 구이름+제목 생성
plt.title(name+"인구 구조")
plt.show()
종로구를 입력받으면 이렇게 파이차트가 나온다.
반응형
'파이썬 함수' 카테고리의 다른 글
pandas 라이브러리(10) 엑셀데이터 불러오기 (1) | 2022.11.30 |
---|---|
pandas라이브러리(9) 데이터 프레임에서 찾는값이 아닌걸 엑세스 할 경우 (0) | 2022.11.29 |
파이썬 함수Matplotlib을 이용한 차트 그리기(2) Scatter plots와 히트맵 (0) | 2022.11.28 |
Matplotlib을 이용한 차트 그리기(1) bar,pie차트와 히스토그램 (0) | 2022.11.28 |
pandas 라이브러리(8) 데이터 합치기 (0) | 2022.11.25 |