데이터를 분석하기위해 모델에 넣는데 가공하기 전에 어떤 데이터를 넣느냐에 따라 모델의 성능과 데이터 분석 퀄리티가 크게 달라진다.
어떻게 모델의 성능과 데이터 분석 퀄리티가 증가할까?
데이터의 전처리 과정을 통해 데이터를 깍아내면서 앞서 말한 성능과 퀄리티가 증가할 수 있다.
데이터 누락 없이 데이터를 수집하는게 좋겠지만 그렇지 않은 경우가 더 많다.
누락한 데이터를 어떻게 처리해야 할까?
데이터가 수치형인 경우
1. Missing data를 제거한다.
2. Missing data를 어떤 값으로 대체한다.
데이터가 범주형인 경우
1. 특정 값을 지정해 줄 수 있다.
2. 최빈값(가장 많이 나온 수) 등으로 대체할 수 있다. missing data가 많은 경우 다른 방법을 사용한다.
3. 다른 데이터를 통해 예측값으로 대체할 수 있다.
4. 시계열 데이터의 경우 앞뒤 데이터를 통해 대치할 수 있다.
수치형과 범수형은 많이 비슷하다.
데이터를 수집하면서 행(row)별로 중복 데이터가 있을 수 있다. 이를 제거하려면 어떻게 할까?
DataFrame.duplicated()
중복된 데이터 여부를 불리언 값으로 반환해준다.
pandas에서 DataFrame.drop_duplicates
를 통해 중복된 데이터를 삭제할 수 있다.
DataFrame.drop_duplicates
의 subset
, 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
데이터에서 극단적으로 크거나 작은 값을 가진 데이터를 이상치라고 한다. 이러한 이상치 데이터를 제거하고 분석해야 한다.
이상치를 어떻게 찾아낼까?
이상적인 이상치를 찾아내기란 어려운 문제다.
그래서 간단하게 사용되는 방법으로 알아보자.
z score
IQR
범위가 0~1 사이인 컬럼 A와 1000~10000 사이를 갖고 있는 컬럼 B 데이터를 갖고있다.
이를 데이터 클러스터링 한다고 했을 때 범위가 큰 B에 영향을 크게 받는 문제가 생길것이다.
그래서 일반적으로 컬럼간의 데이터 범위가 다를 경우 전처리에서 데이터를 정규화한다.
정규화는 어떻게 할까?
정규화 하는 방법은 다양하지만 2가지로 알아보자.
x - x.mean()/x.std()
x-x.min()/(x.max()-x.min())
그 외에 로그 변환 등의 기법도 있다.
컴퓨터는 문자열을 인식하지 않기 때문에 인식할 수 있게 이진법으로 바꾸는데, 카테고리별로 해당하는 특성만 1, 나머지는 0으로 만든다. 그러면 원하는 데이터 프레임이 된다.
pandas
에서 get_dummies
함수를 통해 만들 수 있다.
전처리 기법으로 데이터를 구간별로 나누고자 할 때 사용한다.
salary.hist()
를 사용하묜 히스토그램 그래프로 보여준다.
최종적으로 데이터 전처리는 데이터의 특성을 파악해서 해야한다.