Recent Posts
Recent Comments
Link
Today
Total
01-01 20:35
관리 메뉴

Hippo's data

결측치(missing values) 처리하기 본문

ML(Machine Learning)

결측치(missing values) 처리하기

Hippo's data 2023. 12. 20. 16:04
728x90

오늘은 데이터 전처리 단계에서 사용하는 결측치를 처리하는 방법에 대해 알아보겠습니다!!

 

# 결측치(Missing value)란?

결측치란 말 그래도 비어있는 값인데요 데이터수집시 누락되거나 유실되는 등 다양한 원인에 의해 생겨납니다 

특히 결측치는 데이터 분석시 반드시 처리해야하는데요

N/A, NULL, NaN등 다양하게 표현되며 파이썬에서는 NaN로 표시됩니다

 

1. 결측치 확인하기

df.info( ) -> 각 변수의 수, 데이터 유형 확인 / Rangeindex와 각 변수의 개수를 통해 결측치 개수 파악

df.isnull( ).sum( ) -> 각 변수마다 결측치 개수 확

 

 

2. 결측치 처리하기 

-> 결측치를 처리하는 방법에는 그냥 삭제하는 방법과 다른 값으로 대체하는 2가지 방법이 있습니다

 

# 데이터 결측치 처리시 반드시 원본 데이터를 저장해두고 COPY 해서 사용 -> 원본 항목 보전위함

df_origin = df.copy( )

 

(1) 결측치 삭제

 

<결측치 행 삭제>

-> 결측치가 있는 해당 행을 삭제

df = df.dropna( )

<파라미터 >

how = 'any'(default) -> 하나 이상 결측치 있는 행 삭제됨 / listwise 방식

how = 'all' -> 모든 칼럼이 결측치인 행 삭제됨 / pairwise 방식

thresh = 숫자 ->  결측치 아닌값이 n(숫자)개 이상인 경우만 남겨라

 

 

<결측치 열(변수) 삭제>

-> 결측치가 있는 해당 열(변수)을 삭제 / 보통 결측치 50% 이상 비율일시 삭제 고려함

df = df.drop(['지울열1', '지울열2','지울열3'], axis = 1)

 

(2) 결측치 대체

- df =df.fillna('특정값 ') -> 지정한 특정 값으로 채우기 

# 특정 값을 다양한 값으로 대체가능 

수치형 - 평균값( df,mean( ) ), 중앙값 ( df.median( ) )
범주형 - 최빈값 ( df.mode()[0] )

 

< Method 파리미터 >

- df=df.fillna(method='backfill') 

backfill -> 의 값으로 채움 / 제일 뒤의 값이 결측치인지 확인하기 -> 결측치 일시 다 채워지지 않음 

ffill -> 의 값으로 채움 / 제일 앞의 값이 결측치인지 확인하기 -> 결측치 일시 다 채워지지 않음 

 

# replace로도 가능

df['대체할 열']=cust[' 대체할 열 '].replace(np.nan, cust[' 대체할 열 '].median())

 

- interpolate() 함수 -> 보간법 

df.interpolate(method = '보간방법' ) 

 

<method파라미터>

linear -> 선형 보간 

time ->시계열 날짜 index를 기준으로 보간 / ### 인덱스가 시계열값이어야함 

polynomial -> 다항식 보간 / order=n 으로 차수 지정 / 높은 차수일 수록 복잡한 패턴에 유리하지만 과적합 주의

nearest -> 최근접 이웃 보

akima -> akima 보간 / Akima 스플라인을 사용하여 부드럽고 현실적인 곡선을 생성 

 

 

 

번외)

# XGboost, LightGBM 알고리즘 use_missing=False 인자 => 알고리즘이 알아서 결측치를 처리해줌

728x90