본문 바로가기

여러가지/Python

섹션 3. Python에서의 데이터 전처리 (Data Preprocessing)

데이터 전처리란, 수집한 데이터를 분석에 적합한 형태로 가공하는 과정입니다.
1)결측치 및 2)이상치 처리, 3)중복값 제거, 4)범주형 변수 변환, 5)특성 스케일링 등의 작업이 포함됩니다.

 

● URL : https://colab.research.google.com/drive/1GT7HhE11T04-poSQKJnkIDd6FwzmIBHz#scrollTo=RopL7tUZSQkT

 

Step 1. Importing the libraries, 라이브러리 불러오기

- numpy : 행렬, 배열 등 대규모 데이터 연산 및 처리 라이브러리, Python

- pandas : 데이터 분석 라이브러리, Python

- matplotlib : 데이터 시각화 라이브러리, Python

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

 

Step 2. Importing the dataset, 데이터세트 불러오기

(Data.csv)

- X : 특성 행렬 (독립)

- y : 종속 변수

dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

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

(1) .iloc[] : 추출하려는 행과 열의 인덱스를 받는 함수

(형식) '하한:상한'으로 범위 지정

단, 하한은 포함되지만 상한은 제외된다.

 

ex) .iloc[:, :-1] : 모든 행, 마지막 열 제외하고 모든 열

ex) .iloc[:, -1] : 모든 행, 마지막 열

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

 

Step 3. Taking care of missing data, 결측값 처리

방법 1) 무시하고 삭제

방법 2) 평균 값으로 대체

- sklearn(사이킷런) : 데이터 마이닝 및 데이터 분석을 위한 라이브러리

- impute : 결측값 처리 위한 모듈

- SimpleImputer : 결측값 처리 위한 클래스

※ 평균(mean), 중앙값(median), 최빈값(most frequent), 또는 상수(constant)로 결측값을 대체

- imputer : 인스턴스

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')

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

(1) missing_values=np.nan : 결측값 nan으로 표시

(2) strategy='mean' : 평균(mean)으로 결측값 대체

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

- fit : 인스턴스를 특성 행렬에 연결하는 함수

- transform : 대체 함수

imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

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

(1) imputer.fit(X[:, 1:3]) : 각 열의 평균(mean) 계산하여 인스턴스에 저장
(2) X[:, 1:3] =imputer.transform(X[:, 1:3]): 결측값(nan)을 평균(mean)으로 대체한 값을 특성 행렬(X)에 저장

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

 

Step 4. Encoding categorical data, 범주형 데이터 인코딩

방법 1) One-hot Encoding (원-핫 인코딩)

(1) Encoding the Independent Variable

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

- ct : 인스턴스

- fit_transform : 인스턴스를 특성 행렬에 연결 및 해당 값 대체 함수

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X = np.array(ct.fit_transform(X))

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

(1) transformers=[('변환 유형', 클래스명, [변환할 열 인덱스])]

(2) remainder : 나머지 열 처리 방법 명시

(3) 'passthrough' : 나머지 열 변환 안함

(4) np.array() : numpy 배열 변환

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

(2) Encoding the Dependent Variable - yes/no

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)

 

Step 5. Splitting the dataset into the Training set and Test set, 데이터 분할

- train_test_split : 데이터를 학습 세트와 테스트 세트로 나누는 클래스

(형식) train_test_split(특성 행렬, 종속 변수, 분할비, 옵션)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 1)

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

(1) random_state = 1 : 동일하게 훈련 세트/테스트 세트 분할되도록 시드 고정

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

※ 데이터 분할 후, 특성 스케일링한다.

 

Step 6. Feature Scaling, 특성 스케일링

- StandardScaler : 데이터 표준화 클래스

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

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

(1) X_train = sc.fit_transform(X_train) : 특성 행렬 훈련 세트(X_train) 표준화하여 스케일러 생성 후, 모든 값의 스케일 적용

(2) X_test = sc.transform(X_test) : 기존 생성된 특성 행렬 훈련 세트(X_train)의 스케일러를 특성 행렬 테스트 세트(X_test)에 적용

※ 훈련 세트(X_train)에 사용한 스케일러를 테스트 세트(X_test)에 동일하게 사용해야한다.

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

 

[참고] 특성 스케일링 종류

(ㄱ) 정규화

정규분포 따른다면 정규화 사용한다.

(ㄴ) 표준화

대부분의 경우 표준화 사용한다.