[Python] 결측치 처리하기(시각화, 제거, 대체)

Jeon Doun·2024년 8월 7일
0

데이터를 분석하면 필연적으로 결측치를 마주하게 된다. 결측치는 측정 기기의 오류나 조사자의 실수 뿐만 아니라, 데이터를 관리하는 과정에서 발생한다. 결측치를 어떻게 처리하냐에 따라 분석 결과가 크게 달라지는 경우도 있기 때문에 결측치는 가볍게 볼 사안이 아니다. 본 글에서는 이러한 결측치를 파악하고 제거하거나 다른 값으로 대체하는 여러가지 옵션을 알아본다.

  • 결측치 시각화(seaborn 또는 missingno 라이브러리)

    • seaborn 라이브러리의 heatmap을 이용하면 아래와 같이 변수별로 결측치가 어느 인덱스에 존재하는지 파악할 수 있다.
    • 데이터프레임에 isnull()메소드를 적용해서 True와 False만으로 만들어주었고, 여기에 heatmap을 적용해서 결측치만 빈 칸으로 보이게 표현하였다.
    • 참고로 결측치의 분포도 중요한데(특히 시계열 자료의 경우) 시각화를 통해 결측치가 어느 지점에 몰려있는지 또한 확인할 수 있는 장점이 있다.
    • seaborn의 결측치 히트맵과 유사하나 조금 더 수려하게 그림을 그려주는 missingno 라이브러리 또한 존재한다.
  • 결측치 제거(dropna 메소드, thresh와 subset 옵션 이용)

    • 판다스의 dropna메소드에서는 결측치 제거에 대한 다양한 옵션을 제공한다
    • 데이터분석을 하다보면 행마다 결측변수가 다른 경우도 있다. dropna 메소드에서는 thresh 옵션을 통해 행/열별로 허용하는 정상값의 수(결측치의 수)를 지정할 수 있다.
    • titanic 예시 데이터의 shape는 (891, 9)이며, thresh = 8 옵션을 적용하여 정상 값이 8개 미만인 데이터를 삭제하면 733개의 행만 남는 것을 확인할 수 있다.
    • 한편, 결측치가 절대 존재해서는 안 되는 변수가 있는 경우도 있다. dropna 메소드에서는 subset이라는 옵션으로 결측치를 제거할 대상 변수를 지정할 수 있다. 예를 들어 'age' 변수만큼은 결측치를 허용하지 않으려면 아래와 같이 설정한다.
  • 결측치 대체(연산 메소드, pivot_table, unstack 메소드 fill_value 옵션)

    • 데이터프레임을 집계하거나 상호 연산할 때 한 데이터프레임에 결측값이 존재하면 결측값을 반환한다. 각 메소드에는 이를 방지하기 위한 fill_value 옵션이 존재한다.
    • fill_value 옵션 지정 전
    • fill_value 옵션 지정 후
profile
의미 있는 한걸음을 추구합니다.

0개의 댓글