안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
<데이터 분석 관련 글>
2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)
2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)
2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)
2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)
2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)
2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)
2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기
2021.07.24 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 9편. 데이터 시각화 맛보기(ft. 15~20년 전국 민간아파트 분양가 데이터)
이번 시간에는 처음 데이터 셋을 접했을 때, 각 열(Column)들의 데이터 분포를 한 눈에 파악할 수 있는 방법에 대해 공부해보겠습니다.
공공데이터 포털에서 제공되는 실제 데이터 셋을 예제로 이용해서 알아보겠습니다.
데이터 다운받기
오늘 사용할 데이터 셋은 국민건강보험공단_건강검진정보입니다.
먼저 아래의 링크로 접속하셔서 데이터 셋(csv 파일)을다운로드 해주세요.
https://www.data.go.kr/data/15007122/fileData.do#/layer_data_infomation
참고로 100만명에 대한 정보가 있으므로, 데이터 셋 용량이 117.6MB로 많이 큰 편입니다.
혹시 실수로 파일을 여시면 Excel로 열리게 되어, 100만년 뒤에 열리게 되는 것을 경험 하실 수 있으니 주의해주세요!
데이터 불러오기
데이터가 다운로드 완료되면, Jupyter Notebook 혹은 VScode에서 ipynb 파일을 하나 생성하시고 같은 폴더에 데이터를 이동시켜주세요.
혹시 VScode에서 Jupyter Notebook 사용하는 법을 모르신다면 아래의 글을 참고해주세요.
2021.06.26 - [파이썬 기초/개발환경 구축] - [Python/VSCode] 파이썬 개발환경 구축 5편_VSCode에서 Jupyter notebook 사용하는 법
그 다음으로 할 일은 관련 패키지를 import 해주는 것입니다.
import pandas as pd
import numpy as numpy
import matplotlib.pyplot as plt
다음은 pandas의 read_csv( ) 함수를 이용해서 데이터 셋(국민건강보험공단_건강검진정보_20191231.csv)를 불러와줍니다.
이 때 주의하실 점은 그냥 불러오시면 UTF-8로 인코딩하므로, 한글을 인식하지 못해서 깨진다는 것입니다.
이러한 현상을 방지하기 위해서, encoding="cp949"를 꼭 넣어주세요.
# euc-kr: 한글 2350자 표현 / cp949: 11172자 표현
df = pd.read_csv("./국민건강보험공단_건강검진정보_20191231.csv", encoding="cp949")
데이터 파악하기
데이터 생김새 파악
데이터가 불러와졌으면 바로 df.head( )로 대략적인 데이터 생김새를 확인해봅시다.
34개의 열들(columns)이 있다고 하는데 너무 길어서 중간에 ...으로 생략되어 있어서 아직은 데이터 셋이 어떤 아이인지 잘 모르겠네요.
데이터 정보 파악
어떤 열이 있는지, Null값은 없는지, 데이터 타입은 무엇인지를 df.info( )로 확인해보겠습니다.
Null 값 분포 시각화
우선 Null 값을 조금 파악해보겠습니다. Null이란 값이 없음을 의미하는데 이는 데이터 분석 결과에 왜곡을 줄 수 있기에 적절한 처리가 필요합니다.
일단 이번 시간에는 처리에 대한 방법은 다루지 않고 Null 값 분포를 한눈에 파악하는 방법만 간단히 소개하고 넘어가도록 하겠습니다.
# 각 열마다 Null의 갯수를 모두 합쳐서 그래프를 그려줌
df.isnull().sum().plot.barh(figsize=(10,9))
<여기서 잠깐>
그래프에 출력되는 한글 폰트가 깨짐을 방지하기 위해서 아래의 코드를 추가해줍니다.
import os
# Mac OS의 경우와 그 외 OS의 경우로 나누어 설정
if os.name == 'posix':
plt.rc("font", family="AppleGothic")
else:
plt.rc("font", family="Malgun Gothic")
다시 본론으로 돌아와서, 출력된 그래프를 살펴보겠습니다.
이렇게 그래프로 보니깐 위에서 non-null로 표시될 때보다 어떤 데이터가 Null 값을 많이 갖고 있는지 한 눈에 파악이 가능하지 않나요?
Hist 함수로 각 컬럼의 데이터 분포 파악
오늘의 핵심 주제인 hist( ) 함수를 이용해서 각 열의 데이터들의 분포를 살펴보겠습니다.
참고로 h라는 변수에 df.hist( )를 담아주는 이유는 이렇게 해주지 않으면 쓸 데 없는 글자들이 그래프 위에 출력되는 것을 방지해주기 위함입니다. 궁금하신분은 df.hist( )만 입력해서 어떻게 출력되는지 비교해보셔도 좋을 것 같습니다.
h = df.hist(figsize=(30,20))
이렇게 모든 히스토그램(histogram) 그래프를 출력하니 너무 빽빽하고 작아서 보실 때에 불편할 수가 있습니다.
그럴 땐 나누어서 출력이 가능합니다. 총 31개의 히스토 그램이니깐 16개, 15개로 나누어서 출력해보겠습니다.
# iloc[ ] 함수를 이용하여 0이상 16번째 미만의 열의 데이터만 hist( )로 출력
h = df.iloc[:,:16].hist(figsize=(20,12))
만약 데이터 분포를 더욱 작게 나누어서 보고싶으시면 bins라는 파라미터를 설정해주시면 되니깐 참고하세요.
# iloc[ ] 함수를 이용하여 16번째 열 이상의 데이터만 hist( )로 출력
h = df.iloc[:,:16].hist(figsize=(20,12), bins=100)
데이터는 용량을 줄이기 위해서 코드화 하여 데이터 셋을 만들었다고 합니다. 예를 들어 성별을 남/여가 아닌 1/2로 한 것 처럼 말이죠.
데이터 코드에 대한 설명은 아까 데이터를 받은 링크의 하단에 주기성 과거 데이터의 '국민건강정보데이터 건강검진정보 사용자 메뉴얼_20171027'을 다운로드 받으시면 확인 하실 수 있습니다. (hwp 파일이므로 뷰어가 필요한 점 유의해 주세요)
글이 너무 길어질 듯하여 데이터 해석까지는 다루지 않았지만 여러분 스스로 히스토그램과 코드 정보들을 보면서 데이터를 파악해보시는 연습을 해보시면 좋을 것 같아요!
오늘도 공부하시느라 고생 많으셨습니다~
'파이썬 패키지 > 데이터분석' 카테고리의 다른 글
[#shorts] Pandas로 엑셀의 특정 시트 불러오는 방법 (ft. 시트 이름, 시트 인덱스) (0) | 2022.02.21 |
---|---|
[#Shorts] 데이터 분석은 왜 하며, 산업별로 어떻게 활용될까요? (1) | 2022.02.03 |
[파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index) (0) | 2021.07.25 |
[파이썬 데이터 분석] 9편. 데이터 시각화 맛보기(ft. 15~20년 전국 민간아파트 분양가 데이터) (0) | 2021.07.24 |
[파이썬 데이터 분석] 8편. 전처리 지옥 맛보기 (ft. loc[ ] 제대로 이해하기) (0) | 2021.07.22 |