(완벽 가이드) 데이터 전처리의 모든 것 : 개념부터 실습까지
잡학다식의 지식공방

빅데이터 관련 자료

(완벽 가이드) 데이터 전처리의 모든 것 : 개념부터 실습까지

carpe08 2025. 4. 6. 12:44

데이터 전처리는 데이터를 분석하거나 머신러닝 모델에 적용하기 전에 필수적으로 수행해야 하는 과정입니다. 올바른 데이터 전처리는 모델의 성능을 극대화하고 신뢰할 수 있는 결과를 도출하는 데 필수적입니다. 이 블로그에서는 데이터 전처리의 모든 측면을 다루며, 실습 코드와 함께 자세히 설명하겠습니다.


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) 및 시계열 데이터 가공 필요

✅ 훈련-테스트 데이터 분할 필수

✅ 텍스트 및 이미지 데이터는 별도의 전처리 필요

 

320x100
320x100