데이터 전처리는 데이터를 분석하거나 머신러닝 모델에 적용하기 전에 필수적으로 수행해야 하는 과정입니다. 올바른 데이터 전처리는 모델의 성능을 극대화하고 신뢰할 수 있는 결과를 도출하는 데 필수적입니다. 이 블로그에서는 데이터 전처리의 모든 측면을 다루며, 실습 코드와 함께 자세히 설명하겠습니다.
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. 범주형 데이터 처리
머신러닝 모델은 숫자 데이터를 처리하므로 범주형 데이터는 변환해야 합니다.
# 원-핫 인코딩
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
df_encoded = encoder.fit_transform(df[['categorical_column']]).toarray()
# 레이블 인코딩
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['categorical_column'] = le.fit_transform(df['categorical_column'])
5. 데이터 스케일링: 표준화 vs 정규화
데이터의 크기 차이를 줄이기 위해 스케일링을 적용할 수 있습니다.
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# 표준화 (Standardization)
scaler = StandardScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])
# 정규화 (Normalization)
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) 및 시계열 데이터 가공 필요
✅ 훈련-테스트 데이터 분할 필수
✅ 텍스트 및 이미지 데이터는 별도의 전처리 필요
'빅데이터 관련 자료' 카테고리의 다른 글
(2025) 형태소 분석기 완벽 가이드: 개념부터 활용까지 (0) | 2025.04.07 |
---|---|
개발자가 아니어도 이해할 수 있는 OpenAPI란? (0) | 2025.04.06 |
다중공선성과 정규화: 언제, 왜, 어떻게 해결할까? (0) | 2025.04.05 |
GPT와 머신러닝: 사전 학습, 미세 조정, 그리고 인-컨텍스트 러닝 (0) | 2025.04.04 |
AWS 기반 데이터 ETL 구축하기 (0) | 2025.04.03 |