[데이터 전처리] 결측치 - 삭제

Bpius·2023년 10월 16일
0

데이터 EDA & 전처리

목록 보기
30/46
post-thumbnail

결측치

데이터에 결측치가 있어 모델 학습이 되지 않는 문제가 발생할 때,

  • NaN : 값이 없는 결측으로 대체, 추정, 예측으로 처리
  • None : '값이 없는 것'이 값인 결측으로 새로운 값으로 정의하는 방식으로 처리
  • 해당 도메인 지식이 있으면 좀 더 정확하게 대처 가능.

상황에 따른 처리 방법 : 삭제

행 삭제

  • 결측이 없는 레코드가 모델을 학습하는데 충분해야 한다.(모델 성능이 수렴되는지 확인)
  • 결측이 새로운 데이터에는 없어야 한다.(결측이 없는 데이터로 모델을 학습시켰기에)

열 삭제

  • 소수 변수에 결측이 많이 포함되어 있을 때
  • 해당 변수들이 중요하지 않을 때

Seires/DataFrame.isnull

  • 값이 결측이면 True, 아니면 False를 반환(<-> notnull/~isnull)

DataFrame.dropna()
주요인자

  • axis : 0이면 행을 삭제, 1이면 열을 삭제
  • how : 'any'면 결측이 하나라도 포함이 되어 있으면 삭제, 'all'이면 모든 값이 결측일 경우 삭제

행 삭제

다음과 같은 데이터가 있다.

데이터 컬럼별 결측치 수를 확인해보자.

결측치가 존재하는데, 결측치의 비율이 어떻게 되는지 좀 더 자세히 살펴보자.
결측치 비율이 가자으 높은 것이 약 7% 정도가 되는 것을 확인할 수 있고, 이 정도의 결측치는 없애고 진행히도 될 것 같다는 판단이 든다.
좀 더 정확하게 판단하기 위해서는 데이터가 생성된 도메인 지식이 있으면 좋다.

데이터를 지우고 다시 확인해보면 결측치가 잘 지워진 것을 확인할 수 있다.
dropna의 how의 default는 'any', axis의 default는 0(행 삭제)

열 삭제

다음과 같은 데이터가 있다.

'COMFORT' 컬럼에 '?'라는 데이터가 들어가 있는 것을 확인할 수 있는데,
가장 좋은 방법은 컬럼별로 unique()를 직접 확인하여 살펴보는 것이 좋다.

결측치가 있다는 것을 확인하였고 결측치의 수를 확인해보고

비율도 확인해 보자.
비율이 30% 정도로 많은 것으로 보아 해당 컬럼을 삭제하는 것이 좋다고 판단할 수 있다.
좀 더 확실하게는 도메인 지식이 있으면 더 좋을 것이다.

이제 열을 삭제하고 다시 확인해보자.
'?'를 np.NaN으로 바꾼 후 dropna를 써도 된다.

profile
데이터 굽는 타자기

0개의 댓글