최근 10년간 출생아 수와 합계출산율이 어떻게 변화해왔는지 보려고 한다.

  • <나도코딩> 님의 유튜브 강좌를 기반으로 한 내용이다
  • 강의 시점에는 2011-2020을 비교했지만, 나는 2012-2021로 비교해보았다.

데이터 준비

① 구글에 '출생아 수 합계출산율' 검색 → 여기에 들어가보니 우리에게 필요한 10년치 데이터가 딱 나옴 → 그대로 다운로드
② 역시 작업폴더에 파일을 넣고, 실제로 우리가 필요한 부분을 체크
→ 맨 위의 2행은 필요 없겠군. + nrows로 4,5행 두 줄만 가져오면 되겠어.
③ 판다스의 .read_excel로 파일을 불러와 작업 수행 (아래에 계속)

데이터 전처리

필요에 맞게 데이터의 형태나 내용을 가공하여 시각화하기 알맞게 만듦.

  • skiprows, nrows, index_col로 필요한 데이터를 적절히 불러옴.
    nrows는 맨 첫 행을 column header로 인식한다는 거 잊지 말자!!
  • 파일을 확인하던 중 인덱스명에 문제가 있음을 발견함.
  • .index.index.values를 출력해보니 유니코드가 숨어있었음.
  • .rename()을 사용해 불필요한 유니코드를 제거함. + inplace=True로 즉시 반영.
  • .T : 데이터의 행과 열을 반전시킬 수 있음.

데이터 시각화

  • 일단 plt.plot()으로 그냥 그려봤는데, 두 데이터의 스케일 차이가 너무 심함.
  • plt.subplots를 활용하면, '합계출산율'에 맞는 y축을 따로 정의해줄 수 있음!
    .twinx() : y축은 달라도 x축을 서로 공유하는 그래프를 그릴 수 있음.
    아까는 '합계출산율'의 추이는 거의 안 보였는데, 이젠 우측 y축에 따라 변화가 보임!

    원래 사이트에서 제공하던 차트와 최대한 비슷하게 만들어봅시다^^

  • ax1.bar()로 '출생아 수'는 막대그래프로 변환함.
  • .set_ylabel(), .set_ylim(), .set_yticks()로 y축 각각을 비슷하게 설정함.
  • fig.suptitle()로 전체 제목 넣어줌.
  • enumerate에 그냥 데이터 값(df)을 넣고, plt.text() 써서 숫자 적어줌.
    🆚원래는 enumerate에서 rect를 반환받아서 복잡하게 했었는데, 이렇게 하니까 좀 더 간단해짐 (<Matplotlib> 09차시 참고)
  • ms, lw, mec, mew : 마커 크기, 선 굵기, 마커 테두리 색, 마커 테두리 굵기 설정함.

➕플러스 알파

사실 지금 위 사이트의 차트는 강의 시점과 인터페이스가 바뀌었다. 나는 그 인터페이스에 맞춰서도 따로 그려보았다.

  • 현재 e-나라지표 사이트의 차트
  • 그에 맞게 조정해서 다시 그려봄. (loc, fontsize, mfc 등 세부적인 설정 활용)


🧐My Point

❓[5] .rename이 앞에서 배웠던 .replace와 어떤 차이가 있는 걸까..?

❓[14] plt.subplots에서 좌표 안 찍고 비워두면 어쩌자는 거지? 그냥 한 칸만 그린다는 건가? + plt.subplots 안 하면 .twinx도 못 쓰는 건가?

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=heygun&logNo=221520454294 참조!

엑셀 파일을 제공하는 곳에서 알 수 없는 문자열이 포함되어있을 수 있으니, .index.values를 잘 기억해둡시다! ➡️ 이렇게 문자열과 관련해서는 예상치 못한 오류들이 있을 수 있으니, 이럴 땐 숫자로 다루는 iloc가 좋은 대안이 되겠다! 기억하자!

profile
생각은 그만

0개의 댓글