데이터 결측치 확인 – 데이터에 포함된 결측치를 확인하는 방법과 그 결측치를 처리하는 방법에 대해서 알아 보겠습니다. 먼저 결측치를 확인하는 방법입니다. 사용된 프로그램 언어는 파이썬입니다.
Table of Contents
1. 데이터 결측치 확인 – 결측치란 무엇인가
결측치란 무엇인가?
데이터를 수집해 보면 원하지 않는 데이터가 포함되는 경우가 있습니다. 또한 비어있는 경우도 있죠. 여기서 비어있는 데이터를 결측치라고 합니다. 통계학 적으로는 관측되지 않았다고 합니다.
왜 이런 경우가 생기는가?
데이터 수집의 출발은 데이터 발생부터 입니다. 데이터가 발생하는 트랜잭션이라고 합니다. 간단하게 은행에서 예금을 하거나 출금을 하는 작업이죠. 돈이 오고 가는데 결측값은 없겠죠 라고 생각할 수 있습니다. 하지만 여기도 결측치가 예상될 수 있습니다.
예적금 데이터는 정기적으로 분석계로 이관합니다. 대량의 데이터 이관을 하다보니 가끔 결측치가 있을 수 있습니다. 이관 후 이런 결측 상황을 방지하기 위해 대사 작업을 합니다.
대사작업이란 두 개의 시스템 간 데이터를 비교하는 작업입니다. 전체 건수를 비교하고, 금액의 합을 비교하는 등 기준을 정해서 진행을 합니다.
은행에서 이체를 하면 적요란이 있습니다. 이체 사유를 적는 곳인데요 이 곳에 문구를 안 넣어도 됩니다. 옵션이기 때문이죠.
결측치 관련하여 이체 데이터를 생각해 보겠습니다. 적요가 공란으로 되어 있으니 결측치가 됩니다. 하지만 적요는 옵션이어서 결측의 중요도는 떨어집니다. 이럴 경우는 무시해도 되겠죠.
하지만 이체 금액에 공란 즉, 비어서 들어온다면 문제가 생긴 것입니다. 이런 이슈가 발생하면 꼭 조치를 하고 넘어가야 하겠죠.
결측치는 데이터 상에서 0 이나, NaN 으로 표기되어 들어옵니다. 파이썬은 NaN을 결측치라고 판단합니다.
이런 결측치를 확인하고 다루는 것이 왜 중요할까요?
그것은 결측치를 방치할 경우 잘못된 데이터 분석 결과를 만들기 때문입니다. 그래서 결측치에 대한 처리가 필요한 것이죠
결측치 란
- 수집 된 데이터 셋 중에서 비어있는 값을 의미
- 값의 특성이 0 또는 NaN(Not Available)으로 발생
- 결측치 방치는 잘못된 분석 결과를 만들기에 이를 발견하고 처리하는 것은 중요
이런 결측치는 왜 발생할 까요?
시스템 간 데이터를 수집하거나, 사람에 의해 데이터를 발생시키는 등 트랜잭션 구동 환경의 영향이 큽니다. 또한 새롭게 시스템을 개선하면서 추가로 칼럼을 만든다면 이전에 발생한 데이터는 그 칼럼에 데이터가 없을 것입니다.
결측치 발생 사유 몇 가지를 확인해 보겠습니다.
- 설문 조사 시 사람들이 특정 질문에 응답하지 않았을 때
- 실수로 값을 입력하지 않은 경우
- 특정 개체 종이 희귀해서 발견되지 않았을 때
- EHR 등에서 사망한 사람의 데이터가 빠졌을 때
- 다른 값들에 비해 측정하기 쉬운 값이 있을 때
- 데이터 접근 오류가 발생 할 때
- 시스템이 개선되면 이전 없던 칼럼이 생겼을 때
등등 다양한 사유가 있습니다.
2. 데이터 결측치 확인 – 결측치 확인 방법
이제 결측치를 확인하는 방법을 알아보겠습니다.
데이터 양이 적다면 눈으로 확인할 수 있겠죠. 하지만 그래도 눈도 실수를 하니 프로그래밍으로 대응하는 것이 편안하고 실수도 없습니다. 파이썬을 기준으로 확인해 보겠습니다.
2.1 데이터 결측치 확인 – 데이터 수집
제일 먼저 할 작업은 데이터 수집입니다. 우리는 타이타닉 데이터셋을 사용하겠습니다
- 라이브러리 import
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
df.head()
- 데이터 로딩 – 데이터 확인하기
2.2 결측치 확인 – 사용함수 isnull(), isna(), sum()
- 위 타이타닉 데이터 셋 deck 칼럼에 NaN 이 보입니다. 결측치 입니다.
- 결측을 확인하는 함수 적용 – df.isnull()
df.isnull()
# 결측치는 True 로 표시 됨
# isna()와 isnull()은 같은 결과를 보여준다.
df.isnull().sum()
# sum()함수를 활용하여 결측 개수를 파악한다.
# 4개의 칼럼에 결측치가 있다.
df.notnull().sum()
# 반대로 결측치가 아닌 것만 확인해 본다.
# 전체 데이터가 891개이고 deck 칼럼은 203개만 제대로 데이터가 있다.
- 결측치 데이터 비율 확인하기
print(round(df.isnull().sum()/len(df) * 100, 2))
# deck의 결측율이 77%가 넘는 아주 높은 수치를 보여주고 있다.
이렇게 데이터 셋의 각 칼럼별 결측치 여부와 칼럼별 결측치 수와 그 비율을 알아보았습니다.
이제 결측치를 처리하는 방법에 대해서 알아보겠습니다.
아래 제목을 클릭해 주세요.
3. 데이터 결측치 처리 – 결측치 처리 방법-다음 포스트에
(끝)