데이터 전처리: 데이터 분석과 머신러닝을 위한 필수 과정
데이터 전처리는 데이터를 분석하거나 머신러닝 모델에 적용하기 전에 데이터를 정리하고 가공하는 과정입니다. 이를 통해 데이터의 품질을 향상시키고 모델의 성능을 극대화할 수 있습니다. 이번 글에서는 데이터 전처리의 주요 방법과 주의할 점을 정리해보겠습니다.
1. 데이터 이해하기
데이터의 특성과 분포를 파악하는 것이 가장 먼저 해야 할 일입니다. 이를 통해 어떤 전처리 과정이 필요한지 판단할 수 있습니다. 데이터 시각화와 기초 통계를 활용하면 데이터의 구조와 이상점을 쉽게 확인할 수 있습니다.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 데이터 로드
df = pd.read_csv("data.csv")
# 데이터 기본 정보 확인
df.info()
print(df.describe())
# 데이터 분포 시각화
sns.histplot(df['feature'], bins=30)
plt.show()
2. 데이터 누락 처리
데이터에는 결측치(Missing Values)가 포함될 수 있습니다. 이를 처리하지 않으면 모델 성능이 저하될 수 있습니다.
# 결측치 확인
print(df.isnull().sum())
# 결측치 대체 (평균값 또는 특정 값으로 채우기)
df.fillna(df.mean(), inplace=True)
필요에 따라 결측치가 포함된 행을 제거할 수도 있습니다.
# 결측치가 있는 행 제거
df.dropna(inplace=True)
3. 이상치 탐지 및 처리
이상치는 데이터 분포에서 벗어난 극단값으로, 모델 학습을 방해할 수 있습니다. 박스플롯을 활용하여 이상치를 시각적으로 확인할 수 있습니다.
sns.boxplot(x=df['feature'])
plt.show()
이상치를 제거하거나 적절한 값으로 대체할 수도 있습니다.
# IQR (사분위 범위) 활용한 이상치 제거
Q1 = df['feature'].quantile(0.25)
Q3 = df['feature'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['feature'] >= lower_bound) & (df['feature'] <= upper_bound)]
4. 범주형 데이터 처리
머신러닝 모델은 숫자 데이터를 처리하므로 범주형 데이터(Categorical Data)는 변환이 필요합니다.
원-핫 인코딩 (One-Hot Encoding)
# 원-핫 인코딩 적용
df = pd.get_dummies(df, columns=['categorical_column'])
레이블 인코딩 (Label Encoding)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['categorical_column'] = le.fit_transform(df['categorical_column'])
5. 데이터 스케일링: 표준화 vs 정규화
스케일링을 적용하면 모델의 성능이 향상될 수 있습니다.
표준화 (Standardization): 평균을 0, 표준편차를 1로 조정
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])
정규화 (Normalization): 데이터를 0~1 범위로 조정
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])
6. 시계열 데이터 처리
시계열 데이터는 시간에 따른 변화를 고려해야 합니다.
# 날짜 변환 및 특성 추출
df['datetime'] = pd.to_datetime(df['datetime_column'])
df['year'] = df['datetime'].dt.year
df['month'] = df['datetime'].dt.month
df['day'] = df['datetime'].dt.day
df['hour'] = df['datetime'].dt.hour
7. 차원 축소 (PCA)
고차원 데이터를 다룰 때 차원 축소 기법을 활용하면 연산 비용을 줄이고 성능을 향상시킬 수 있습니다.
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
df_pca = pca.fit_transform(df)
8. 데이터 분할 (Train/Test Split)
모델을 학습하기 전에 데이터를 훈련 세트와 테스트 세트로 나누는 것은 필수적인 과정입니다.
from sklearn.model_selection import train_test_split
train_data, test_data = train_test_split(df, test_size=0.2, random_state=42)
9. 텍스트 데이터 처리
자연어 처리(NLP)에서는 텍스트를 전처리하여 분석할 수 있도록 변환해야 합니다.
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import nltk
nltk.download('stopwords')
nltk.download('punkt')
stop_words = set(stopwords.words('english'))
df['text'] = df['text'].apply(lambda x: ' '.join([word for word in word_tokenize(x) if word.lower() not in stop_words]))
10. 이미지 데이터 전처리
이미지 데이터의 경우 크기 조정, 색상 변환 등을 수행할 수 있습니다.
from skimage import io, color, transform
# 이미지 로드 및 크기 조정
img = io.imread("image.jpg")
img_resized = transform.resize(img, (100, 100))
# 이미지 색상 변환 (흑백)
img_gray = color.rgb2gray(img)
결론
데이터 전처리는 분석 및 모델링의 성능을 높이기 위해 필수적인 과정입니다. 데이터를 잘 이해하고 적절한 전처리를 수행하면 모델의 성능을 극대화할 수 있습니다.
요약
✅ 데이터의 특성을 먼저 파악해야 함
✅ 결측치와 이상치를 적절히 처리해야 함
✅ 범주형 데이터는 숫자로 변환해야 함
✅ 스케일링을 통해 데이터 정규화/표준화 적용
✅ 필요에 따라 차원 축소(PCA) 및 시계열 데이터 가공 필요
✅ 훈련-테스트 데이터 분할 필수
✅ 텍스트 및 이미지 데이터는 별도의 전처리 필요
적절한 전처리 과정을 거쳐 최적의 분석 및 모델 성능을 확보하세요!
'빅데이터 관련 자료 > Machine Learning' 카테고리의 다른 글
비지도 학습: 데이터의 숨은 패턴을 찾다 (1) | 2024.01.21 |
---|---|
머신러닝의 기초: 지도학습 개념 및 예시 코드 (0) | 2024.01.20 |
PySpark Streaming으로 실시간 데이터 처리와 분석 (0) | 2023.12.01 |
PySpark GraphX를 활용한 그래프 분석과 네트워크 모델링 (0) | 2023.11.30 |
PySpark MLlib 활용법 (0) | 2023.11.29 |