본문 바로가기

스파르타 코딩클럽/[강의] 머신러닝

[머신러닝 심화] 데이터 분석 프로세스 - 데이터 전처리(결측치)

결측치(Missing Value)

  • 존재하지 않는 데이터
  • 결측치 처리 방법
    • 수치형 데이터
      • 평균값 대치 : 대표적인 대치 방법
      • 중앙값 대치 : 데이터에 이상치가 많아 평균값이 대표성이 없을 경우 중앙값 이용
    • 범주형 데이터
      • 최빈값 대치
    • 사용 함수
      • 간단한 삭제&대치
        ▪️ df.dropna(axis=0) : 행 삭제
        ▪️ df.dropna(axis=1) : 열 삭제
        ▪️ Boolean Indexing
        ▪️ df.fillna(value) : 특정 값으로 대치( ex. 평균, 중앙, 최빈값)
      • 알고리즘 이용
        ▪️ sklearn.impute.SimpleImputer : 평균, 중앙, 최빈값으로 대치
           ➡️ SimpleImputer.statistice_ : 대치한 값 확인
        ▪️ sklearn.imput.IterativeImputer : 다변량대치(회귀 대치)
        ▪️ sklearn.impute.KNNImputer : KNN 알고리즘을 이용한 대치

 

타이타닉 데이터 결측치 처리 실습
import pandas as pd
titanic_df = pd.read_csv('파일경로')
titanic_df.info()

Age, Cabin, Embarked 결측치 존재

# 결측치가 있는 행 모두 삭제
titanic_df.dropna(axis=0).info()

데이터가 대부분 손실됨

# Age에 결측치가 있는 행 삭제
cond3 = (titanic_df['Age'].notna())
titanic_df[cond3].info()

# fillna 이용한 대치
# 평균값 계산
age_mean = titanic_df['Age'].mean().round(2)
titanic_df['Age_mean'] = titanic_df['Age'].fillna(age_mean)
titanic_df.info()

Age_mean에 결측치 없는 것을 확인

 

## SimpleImputer를 이용한 대치

from sklearn.impute import SimpleImputer
si = SimpleImputer()
si.fit(titanic_df[['Age']])
# 대치값 확인
si.statistics_

## array([29.69911765])
titanic_df['Age_si_mean'] = si.transform(titanic_df[['Age']])
titanic_df.info()

Age_si_mean에 결측치가 없는 것을 확인