Hippo's data
결측치(missing values) 처리하기 본문
오늘은 데이터 전처리 단계에서 사용하는 결측치를 처리하는 방법에 대해 알아보겠습니다!!
# 결측치(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 인자 => 알고리즘이 알아서 결측치를 처리해줌
'ML(Machine Learning)' 카테고리의 다른 글
모델 평가 - 분류(Classification) 모델 (0) | 2024.01.06 |
---|---|
변수 선택(Feature selection) - RFE/RFE-CV/UFS (1) | 2024.01.02 |
스케일링(Scaling) (2) | 2024.01.02 |
범주형 데이터 정제하기 - 범주형 인코딩(Categorical Encoding) (0) | 2023.12.31 |
이상치(outlier) 처리하기 (0) | 2023.12.28 |