-
데이터 시각화 09 - Matplotlib (출생아 수 및 합계 출산율)빅데이터/Data Visualization 2022. 1. 24. 21:37
유투버 '나도코딩'님 강의 참조
출생아 수 및 합계 출산율 시각화
01 데이터 들고 오기
- 다운로드 후 파일을 작업하는곳에 옮기고 데이터 확인
초록색 부분만 필요 하다!! 02 데이터 정제
import pandas as pd df = pd.read_excel('stat_142801.xls', skiprows=2, nrows=2, index_col=0) df
- skiprows - 불러올때 생략할 줄 수
- nrows - skiprows로 제외하고 카운트 해서 2번째 A/4 번쨰 줄부터 쓰겟다는 말
- 현재 인덱스로 쓸 칸이 빈칸이므로 정수를 써서 0번째를 넣어주면 그대로 빈칸이 들어 옴
- 데이터 확인이 반드시 필요한 이유
한 컬럼을 찍으니 오류가 걸린다! - 반드시 확인을 하고 오류가 걸리면 .index.values를 써서 데이터가 어떤 형태인지 확인 하자. 정제 해줘야 한다
df.rename(index={'출생아\xa0수':'출생아 수', '합계\xa0출산율':'합계 출산율'}, inplace=True) df
※ 사실 컬럼명보다는 .iloc[]를 써서 찾는게 훨씬 편할때가 있다
▶ 현재 데이터를 보면 사실 컬럼과 행이 바뀌는게 시각화 작업하기 편하다. 파이썬에서 바꿔주는 기능이 있다!
변수화를 해서 변경점을 반드시 반영해줘야 한다. 03 시각화
* 기본 세팅
import matplotlib.pyplot as plt import numpy as np import pandas as pd # 한글 폰트 설정 import matplotlib matplotlib.rcParams['font.family'] = 'Malgun Gothic' # 윈도우 전용 matplotlib.rcParams['font.size'] = 15 #폰트 크기 matplotlib.rcParams['axes.unicode_minus'] = False
1차
plt.plot(df.index, df['출생아 수']) plt.plot(df.index, df['합계 출산율'])
- 서로 다른 범위와 가지고 있는 값 크기 자체가 다르기때문에 좋지 않은 시각화 이다. 이럴때는 x축을 공유하여 다른 새로운 y의 범주를 지정해 줄 수 있다
fig, ax1 = plt.subplots(figsize=(10,7)) ax1.plot(df.index, df['출생아 수'], color='#ff812d') ax2 = ax1.twinx() #x축을 공유하는 쌍둥이 axis ax2.plot(df.index, df['합계 출산율'], color='#ffd100');
▶ 같은 plot()으로 x축을 공유하되 y축의 스케일을 다르게 하고 싶을때 .twinx()를 쓴다. 즉 왼쪽에는 y축 스케일이 오른쪽에는 x축 스케일이 들어간것을 볼 수 있다.
2차
이와 비슷하게 스타일을 해보자 # 막대 그래프 fig, ax1 = plt.subplots(figsize=(13,5)) fig.suptitle('출생아 수 및 합계 출산율') ax1.grid(axis='y', alpha=0.5) ax1.set_axisbelow(True) ax1.set_ylabel('출생아 수 (천 명)') ax1.set_ylim(250, 700) ax1.set_yticks([300,400,500,600]) ax1.bar(df.index, df['출생아 수'], color='#ff812d') # 텍스트 처리 for idx, val in enumerate(df['출생아 수']): ax1.text(idx, val + 12, val, ha='center') # 글자 높이는 val값보다 많게! # 꺾은선 그래프 ax2 = ax1.twinx() #x축을 공유하는 쌍둥이 axis ax2.set_ylabel('합계 출산율 (가임여성 1명당 명)') ax2.set_ylim(0, 1.5) ax2.set_yticks([0, 1]) ax2.plot(df.index, df['합계 출산율'], color='#ffd100', marker='o', ms=11, lw=3, mec='w', mew=3) for idx, val in enumerate(df['합계 출산율']): ax2.text(idx, val + 0.08, val, ha='center')
'빅데이터 > Data Visualization' 카테고리의 다른 글
데이터 시각화 08 - Matplotlib (인구 피라미드) (0) 2022.01.24 데이터 시각화 07 - Matplotlib (산점도/여러그래프/퀴즈) (0) 2022.01.24 데이터 시각화 06 - Matplotlib (DF활용/누적 막대/다중 막대/원그래프) (0) 2022.01.22 데이터 시각화 05 - Matplotlib (저장/텍스트/여러 데이터/막대그래프) (0) 2022.01.21 데이터 시각화 04 - Matplotlib (기본/스타일) (0) 2022.01.21