ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터 시각화 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')

Designed by Tistory.