데이터 전처리(Data Preprocessing)는 머신러닝과 데이터 분석에서 매우 중요한 과정으로 실제 사용할 데이터는 결측값(missing values), 이상치(outliers), 중복, 불균형 등 다양한 문제를 발생 시킬 수 있는 데이터를 포함하고 있음
이러한 데이터를 그대로 사용할 경우 정확한 예측이나 분석 결과를 기대하기 어려우므로 사전에 문제가 될 수 있는 데이터를 처리하는것이 바로 데이터 전처리
1-1. 데이터 품질 향상
1-2. 학습 성능 개선
1-3. 데이터의 일관성 확보
2-1. 데이터 정제
1) 결측값 처리
import pandas as pd
df = pd.DataFrame({
'age': [25, 30, None, 22, 28],
'salary': [50000, 60000, 55000, None, 52000]
})
# 결측값을 열의 평균값으로 대체
df.fillna(df.mean(), inplace=True)
print(df)
2) 이상치 처리
import numpy as np
# 이상치 제거: z-score가 3 이상인 값은 제거
df = df[(np.abs(df.salary - df.salary.mean()) / df.salary.std()) < 3]
3) 중복 데이터 제거
df.drop_duplicates(inplace=True)
2-2. 데이터 변환
데이터를 모델이 처리하기 쉬운 형식으로 변환하는 과정으로 정규화, 스케일링, 로그 변환 등이 있음
1) 정규화(Normalization)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['age', 'salary']] = scaler.fit_transform(df[['age', 'salary']])
2) 스케일링(Standardization)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['age', 'salary']] = scaler.fit_transform(df[['age', 'salary']])
2-3. 데이터 통합
수집한 여러 데이터를 일관된 형식으로 통합하는 과정
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Score': [85, 90, 88]})
# ID 기준으로 두 데이터프레임 병합
df = pd.merge(df1, df2, on='ID')
2-4. 데이터 축소
모델 학습 속도를 높이고, 불필요한 변수를 제거하여 과적합(overfitting)을 방지하는 과정
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
reduced_data = pca.fit_transform(df[['age', 'salary']])
2-5. 데이터 인코딩
문자열 데이터를 모델에 적합한 숫자 형태로 변환하는 과정으로 원-핫 인코딩(One-hot encoding)과 레이블 인코딩(Label encoding)이 있음
1) One-hot Encoding
pd.get_dummies(df, columns=['gender'])
2) Label Encoding
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['gender'] = le.fit_transform(df['gender'])
Data Preprocessing - 데이터 형 변환 (2) | 2024.11.13 |
---|---|
Data Preprocessing - 이상치 탐지 (0) | 2024.11.11 |
Data Preprocessing - 그룹 연산 (0) | 2024.09.26 |
Data Preprocessing - groupby (1) | 2024.09.26 |
Data Preprocessing - 데이터 프레임 통합 (1) | 2024.09.22 |