카테고리 없음

TIL (24.10.07) - 데이터 전처리(결측치, 이상치, 데이터 정규화/표준화, 인코딩)

sj5black 2024. 10. 7. 16:39

목차

  • 결측치
  • 이상치
  • 데이터 변환 (정규화, 표준화 등..)
  • 인코딩

 

결측치 (Missing Values)

isna(), isnull() 함수 : 데이터프레임의 각 요소가 결측치인지 여부를 확인 (동일한 기능)

df.isna() 생성 시, 각 cell값은 결측 여부에 따라 True 나 False로 반환됨

True 값은 1, False값은 0인점을 활용해 df.isna().sum() 으로 결측치의 갯수를 확인할 수 있다.

 

 결측치 관리

dropna() : 결측치가 포함된 행이나 열을 삭제 df.dropna(axis=1)

fillna() : 결측치를 특정값으로 대체 df.fillna('없음')

interpolate() : 결측치를 주변값 기반으로 보간 df.interpolate()

특정 조건으로 처리

 

이상치 (Outlier)

정의 : 데이터의 일반적인 패턴에서 벗어난 값 (사람의 실수로 기입되었을 가능성이 높은 값)

 

1. 기술 통계 기반

 - 자료의 기본 통계량을 기반으로 확인하는 방법

df['나이'].describe() 으로 나이 컬럼의 통계량 확인

 

2. 시각화

 - 박스플롯(Box Plot) 과 히스토그램을 사용해 확인하는 방법

 

3. IQR (Interquartile Range)

 - 1사분위수(Q1)와 3사분위수(Q3)의 차이로, 이 범위를 벗어나는 데이터를 이상치로 간주

 - IQR = Q3 - Q1 // if N is in (Q1-1.5*IQR , Q3+1.5*IQR) ? (Q1 은 상위 25%, Q3는 상위 75% 자료값)

 

이상치 처리 방법(예시)

 

데이터 정규화 (Normalization)

 - 데이터의 범위를 0과 1 사이로 변환하는 과정

 

Min-Max 정규화

가장 일반적인 정규화 방법으로, 각 데이터를 최소값을 0, 최대값을 1로 변환



데이터 표준화 (Standardization)

 - 데이터를 평균이 0 표준 편차가 1이 되도록 변환하는 과정

 

Z-점수 표준화

각 요소에서 평균을 차감하고 표준편차로 나누어 모든 데이터가 표준정규분포를 따르도록 변경

비선형 변환

 - 데이터의 비정상적인 분포를 정규분포에 가깝게 만들기위해 사용

 

1. 로그 변환 - 데이터의 분포를 좁히는 데 유용 (지수 분포를 가진 데이터에 효과적)

 

2. 제곱근 변환 - 푸아송 분포를 가진 데이터에 유용한 변환

 

3. 박스-콕스(Box-Cox) 변환 - 양수 데이터만 사용 가능. 정규 분포에 가깝게 변환하기 위해 사용

 

TMI : 특정 자료분포가 일관되지 않은 이분산성이 있다고 가정할 때, 분석이 용이하도록 정규분포 형식으로 변환할 때 사용되는 변환작업

x는 원본데이터, 람다는 변환 매개변수, f(x) 는 변환된 데이터

 

 

인코딩 (Encoding)

 - 범주형 데이터를 수치형 데이터로 변환하는 과정.

 - 많은 머신러닝 모델은 수치형 데이터만 처리가 가능해서, 범주형 데이터를 인코딩하는것이 필수적

 

1. 레이블 인코딩 (Label Encoding)

 - 특정 컬럼의 그룹에 라벨(인덱싱)을 붙히는 개념

 - 범주형 데이터에 순서가 있을 때 유용

 

2. 원-핫 인코딩 (One-Hot Encoding)

 - 각 범주를 이진 벡터로 변환

 - 각 범주는 고유한 열을 가지며, 해당하는 열에는 1, 나머지 열에는 0이 할당

 - 범주형 데이터에 순서가 없을 때 (독립적으로 처리할 때) 유용

 

3. 차원 축소 인코딩 (Count or Frequency Encoding)

 - 각 범주를 데이터셋 내에서의 출현 빈도로 인코딩

 - 범주형 데이터가 많을 때 유용

 

4. 순서형 인코딩 (Ordinal Encoding)

 - 등급 나누는 인코딩 방식

 

5. 임베딩 (Embedding)

 - 딥러닝에서 주로 사용

 - 범주형 데이터를 벡터 공간에 매핑하여 변환 (고차원 범주 데이터에 유용)

 - 원-핫 인코딩에 비해 차원 축소, 메모리 절약 효과

 - 범주 간의 내재된 관계 학습 가능

>> 주로 텍스트 데이터에서 단어를 벡터로 변환할 때 사용되며, Keras 등의 라이브러리에서 쉽게 구현 가능

 

-------------------------------------------------------------------------------

<코드카타 문제풀이 TIL>

 - 리스트 형태로 저장된 자료를 반복문으로 다룰때 enumerate를 활용하면 인덱스와 자료값을 동시에 불러올 수 있어 편리하다.