# 데이터 전처리
## 데이터 전처리 유형
- [[데이터 형식]] data formatting: 데이터가 작업하기에 적당한 형식이 아닐 수 있다. 예를 들어 데이터는 자체 파일 형식으로 제공될 수 있고, 사용자가 가장 좋아하는 머신러닝 알고리즘은 이를 이해하지 못할 수도 있다.
- [[데이터 정제]] data cleaning: 데이터에 유효하지 않거나 누락된 항목이 포함될 수 있다. 이러한 항목은 정제하거나 제거해야 한다.
- [[데이터 샘플링]] data sampling: 데이터가 특정 목적에 비해 너무 클 수 있으므로 데이터를 현명한 방식으로 샘플링해야 한다.
## 데이터 전처리 방법
- [[확장]] scaling: 특정 머신러닝 알고리즘은 종종 데이터가 평균 범위와 단위 분산을 갖고 일반적인 버무이 내에 있어야 한다. 확장은 모든 기능(물리적 단위가 다를 수 있음)을 일반적인 값 범위로 변경해서 가져오는 프로세스다.
- [[분해]] decomposition: 데이터 세트에는 처리할 수 있는 것보다 더 많은 기능이 포함되는 경우가 많다. [[특징 분해]] feature decomposition 는 좀 더 적은 수의 매우 유익한 데이터 컴포넌트로 데이터를 압축하는 프로세스다.
- [[집계]] aggregation: 때로는 여러 기능을 하나의 의미 있는 그룹으로 그룹화할 수 있다. 예를 들어 데이터베이스에는 웹 기반 시스템에 로그인한 각 사용자의 날짜와 시간이 포함될 수 있다. 작업에 따라 다르겠지만 사용자다 로그인한 횟수의 계산을 고려하면 이 데이터를 더 많이 이해할 수 있다.
### 특징 표준화
from sklearn import preprocessing
import numpy as np
X = np.array([[1, -2, 2],[3,0,0], [0,1,-1]])
X_scaled = preprocessing.scale(X)
### 특징 정규화
X_normalized_l1 = preprocessing.normalize(X, norm='l1')
X_normalized_l2 = preprocessing.normalize(X, norm='l2')
### 특징의 범위 확장
min_max_scaler = preprocessing.MinMaxScaler()
X_min_max = min_max_scaler.fit_transform(X)
min_max_scaler = preprocessing.MinMaxScaler(feature_range = (-10,10))
X_min_max = min_max_scaler.fit_transform(X)
### 특징 이진화
binarizer = preprocessing.Binarizer(threshold=0.5)
X_binarized = binarizer.transform(X)
### 누락된 데이터 처리
[[scikit-learn]]에서는 누락된 값을 대체하는 3가지 방법
- [[mean]]: 모든 [[nan]]값을 행렬의 지정된 축을 따라 평균값으로 바꾼다. (기본값 axis=0)
- [[median]]: 모든 nan값을 행렬의 지정된 축을 따라 중앙값으로 바꾼다. (기본값 axis=0)
- [[most_frequent]]: 모든 nan값을 행렬의 지정된 축을 따라 가장 빈버낳ㄴ 값으로 대체한다. (기본값 axis=0)
from sklearn.impute import SimpleImputer
imp = SimpleImputer(strategy='mean')
X2 = imp.fit_transform(X)
imp = SimpleImputer(strategy='median')
X3 = imp.fit_transform(X)