다양한 데이터 전처리 기법

hou·2022년 1월 3일
0
2022년01월03일

목차

  1. 전처리
  2. 결측치
  3. 중복된 데이터
  4. 이상치
  5. 정규화
  6. 원-핫 인코딩
  7. 구간화

전처리의 중요성

데이터를 분석하기위해 모델에 넣는데 가공하기 전에 어떤 데이터를 넣느냐에 따라 모델의 성능과 데이터 분석 퀄리티가 크게 달라진다.

어떻게 모델의 성능과 데이터 분석 퀄리티가 증가할까?

데이터의 전처리 과정을 통해 데이터를 깍아내면서 앞서 말한 성능과 퀄리티가 증가할 수 있다.


결측치(Missing Data)

데이터 누락 없이 데이터를 수집하는게 좋겠지만 그렇지 않은 경우가 더 많다.

누락한 데이터를 어떻게 처리해야 할까?

데이터가 수치형인 경우
1. Missing data를 제거한다.
2. Missing data를 어떤 값으로 대체한다.

  • 특정 값을 지정해 줄 수 있다. 단 missing data가 많은데 다 지정해주면 데이터의 분산이 실제보다 작아질 수 있다.
  • 평균, 중앙값 등으로 대체할 수 있다. 2-1과 마찬가지로 missing data가 많은데 다 지정해주면 데이터의 분산이 실제보다 작아질 수 있다.
  • 다른 데이터를 이용해 머신러닝으로 예측값을 만들고 보완할 수 있다.
  • 기간이 규칙성 있게 나열되어 있는 시계열 데이터의 경우 전후 데이터의 평균으로 보완한다.

데이터가 범주형인 경우
1. 특정 값을 지정해 줄 수 있다.
2. 최빈값(가장 많이 나온 수) 등으로 대체할 수 있다. missing data가 많은 경우 다른 방법을 사용한다.
3. 다른 데이터를 통해 예측값으로 대체할 수 있다.
4. 시계열 데이터의 경우 앞뒤 데이터를 통해 대치할 수 있다.

수치형과 범수형은 많이 비슷하다.

중복된 데이터

데이터를 수집하면서 행(row)별로 중복 데이터가 있을 수 있다. 이를 제거하려면 어떻게 할까?

DataFrame.duplicated()
중복된 데이터 여부를 불리언 값으로 반환해준다.

pandas에서 DataFrame.drop_duplicates를 통해 중복된 데이터를 삭제할 수 있다.

DataFrame.drop_duplicatessubset, keep 옵션을 통해 중복을 제거할 수 있다.

DataFrame.drop_duplicates(subset=['id'], keep='last')

subset의 id에서 중복인 데이터를 확인한다.
keep을 통해 어떤 데이터를 남길지 정한다.

DataFrame.drop_duplicates 추가 옵션 참고 사이트
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html


이상치(Outlier)

데이터에서 극단적으로 크거나 작은 값을 가진 데이터를 이상치라고 한다. 이러한 이상치 데이터를 제거하고 분석해야 한다.

이상치를 어떻게 찾아낼까?

이상적인 이상치를 찾아내기란 어려운 문제다.
그래서 간단하게 사용되는 방법으로 알아보자.

  1. z score
  1. IQR

정규화

범위가 0~1 사이인 컬럼 A와 1000~10000 사이를 갖고 있는 컬럼 B 데이터를 갖고있다.
이를 데이터 클러스터링 한다고 했을 때 범위가 큰 B에 영향을 크게 받는 문제가 생길것이다.

그래서 일반적으로 컬럼간의 데이터 범위가 다를 경우 전처리에서 데이터를 정규화한다.

정규화는 어떻게 할까?

정규화 하는 방법은 다양하지만 2가지로 알아보자.

  1. 표준화(Standardization)
    데이터의 평균은 0, 분산은 1이 되는 표준화
    x - x.mean()/x.std()
  2. Min-Max Scaling
    데이터의 최솟값은 0, 최대값은 1이 되는 Min-Max Scaling
    x-x.min()/(x.max()-x.min())

그 외에 로그 변환 등의 기법도 있다.


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

컴퓨터는 문자열을 인식하지 않기 때문에 인식할 수 있게 이진법으로 바꾸는데, 카테고리별로 해당하는 특성만 1, 나머지는 0으로 만든다. 그러면 원하는 데이터 프레임이 된다.

pandas에서 get_dummies 함수를 통해 만들 수 있다.


구간화(Binning)

전처리 기법으로 데이터를 구간별로 나누고자 할 때 사용한다.

salary.hist() 를 사용하묜 히스토그램 그래프로 보여준다.


마무리

최종적으로 데이터 전처리는 데이터의 특성을 파악해서 해야한다.

profile
할 수 있다

0개의 댓글