hyeori

누락된 데이터 다루기 본문

머신러닝

누락된 데이터 다루기

혜오리이 2024. 5. 8. 22:08

NAN : 숫자가 아니다 (not a number)

NULL : 관계형 데이터베이스에서 모르는 값을 지칭

4.1.1 테이블 형태 데이터에서 누락된 값 식별

df.isnull().sum() #누락된 값의 개수를 얻을 수 있다. 

4.1.2 누락된 값이 있는 훈련 샘플이나 특성 제외

  • 해당 훈련 행이나 열 삭제
df.dropna(axis = 0) # 누락된 값이 있는 행 삭제
df.dropna(axis = 1) # NaN이 하나라도 있는 열 삭제 가능
df.dropna(how = 'all') # 모든 열이 Nan일 때만 행을 삭제
df.dropna(thresh=4) # NaN이 아닌 값이 4개 보다 작은 행 삭제
df.dropna(subset = ['C']) # 특정 열에 NaN이 있는 행만 삭제

4.1.3 누락된 값 대체

  • 평균으로 대체하기 → SimpleImputer사용
# 행의 평균으로 누락된 값 대체하기

from sklearn.impute import SimpleImputer
import numpy as np

imr = SimpleImputer(missing_values=np.nan, strategy='mean') # 평균
imr = imr.fit(df.values)
imputed_data = imr.transform(df.values)
imputed_data
  • 행 방향으로 대체할 값을 계산하려면, FunctionTransformer 사용
  • SimpleImputer 클래스의 add_indicator = True 로 지정하면, indicator_ 속성이 추가되고, transform 메서드가 누락된 값의 위치를 포함된 배열 반환
  • fit_transform 메서드를 호출하면 features_ 속성에 담긴 특성에서 누락된 값의 위치를 나타내는 배열 반환
  • 누락된 값을 채우는 더 쉬운 방법, pandas 의 fillna
df.fillna(df.mean()) # 평균값으로 누락된 값을 대체 가능
  • bfill 또는 backfill 은 누락된 값을 다음 행의 값으로 채운다.
  • ffill 또는 pad는 누락된 값을 이전 행의 값으로 채운다.
df.fillna(method='bfill') # backfill
df.fillna(method = 'ffill') # pad 
df.fillna(method = 'ffill', axis = 1) # 열을 사용

4.1.4 사이킷런 추정 API 익히기

SimpleImputer 클래스 : 데이터 변환에 사용되는 사이킷런의 변환기(transformer) 클래스

  • fit : 훈련 데이터에서 모델 파라미터를 학습한다.
  • transform : 학습한 파라미터로 데이터를 변환
    • 변환하려는 데이터 배열은 모델 학습에 사용한 데이터의 특성 개수와 같아야 한다.

  •