본문 바로가기

Study Information Technology

데이터 클리닝 및 전처리 파이프라인 구축 결측치 및 이상치 처리

728x90
반응형

데이터 클리닝 및 전처리 파이프라인 구축: 결측치 및 이상치 처리

Overview
대규모 데이터셋에서 결측치와 이상치를 처리하는 데이터 클리닝 및 전처리 파이프라인 구축은 데이터 분석의 핵심 과정입니다. 이 과정에서는 데이터의 품질을 높이고 분석 결과의 신뢰성을 보장하기 위해 필수적인 단계입니다. 이제 이러한 파이프라인을 구축하는 방법에 대해 자세히 설명하겠습니다.

1. 데이터 클리닝 및 전처리 개요

데이터 클리닝은 데이터셋에서 오류나 불완전한 정보를 수정하는 과정입니다. 이는 결측치, 이상치, 중복 데이터 등을 포함하며, 데이터의 일관성과 신뢰성을 확보하는 데 필수적입니다. 전처리는 데이터 분석을 위해 데이터를 변환하고 준비하는 과정을 포함합니다.

2. 결측치 처리

결측치(Missing Values)는 데이터셋에서 특정 값이 존재하지 않는 경우를 말합니다. 결측치가 있는 데이터는 분석 결과에 큰 영향을 미칠 수 있으므로 적절한 처리가 필요합니다. 결측치 처리는 다음과 같은 방법으로 수행할 수 있습니다.

2.1. 결측치 확인

먼저, 데이터셋에서 결측치를 확인해야 합니다. Python의 Pandas 라이브러리를 사용하여 결측치를 쉽게 확인할 수 있습니다.

import pandas as pd

# 데이터셋 불러오기
df = pd.read_csv('data.csv')

# 결측치 확인
missing_values = df.isnull().sum()
print(missing_values)

이 코드로 각 열의 결측치 개수를 확인할 수 있습니다.

2.2. 결측치 처리 방법

  1. 삭제 (Dropping): 결측치가 있는 행이나 열을 삭제하는 방법입니다. 이 방법은 데이터 손실이 크지 않을 때 유용합니다.
# 결측치가 있는 행 삭제
df_cleaned = df.dropna()

# 결측치가 있는 열 삭제
df_cleaned = df.dropna(axis=1)
  1. 대체 (Imputation): 결측치를 적절한 값으로 대체하는 방법입니다. 가장 일반적인 방법은 평균, 중앙값, 또는 최빈값으로 대체하는 것입니다.
# 평균값으로 대체
df_filled = df.fillna(df.mean())

# 중앙값으로 대체
df_filled = df.fillna(df.median())

# 최빈값으로 대체
df_filled = df.fillna(df.mode().iloc[0])
  1. 예측 모델 사용: 결측치를 예측 모델을 통해 대체하는 방법입니다. KNN, 회귀 분석 등을 사용할 수 있습니다.
from sklearn.impute import KNNImputer

imputer = KNNImputer(n_neighbors=5)
df_imputed = imputer.fit_transform(df)

3. 이상치 처리

이상치(Outliers)는 데이터 분포에서 벗어난 값으로, 데이터 분석에 방해가 될 수 있습니다. 이상치를 처리하기 위해서는 먼저 이상치를 감지한 후 적절한 조치를 취해야 합니다.

3.1. 이상치 감지

이상치를 감지하기 위해 다양한 방법을 사용할 수 있습니다.

  1. 통계적 방법: Z-점수 또는 IQR(Interquartile Range) 방법을 사용하여 이상치를 감지할 수 있습니다.
from scipy import stats

# Z-점수 방법
z_scores = stats.zscore(df)
abs_z_scores = np.abs(z_scores)
filtered_entries = (abs_z_scores < 3).all(axis=1)
df_no_outliers = df[filtered_entries]

# IQR 방법
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
df_no_outliers = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]
  1. 시각적 방법: 박스 플롯(Box Plot)이나 히스토그램을 사용하여 시각적으로 이상치를 확인할 수 있습니다.
import seaborn as sns
import matplotlib.pyplot as plt

sns.boxplot(x=df['column_name'])
plt.show()

3.2. 이상치 처리 방법

  1. 삭제: 이상치를 포함한 행을 삭제하는 방법입니다.
df_no_outliers = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]
  1. 변환: 이상치를 변환하여 데이터의 범위에 맞추는 방법입니다.
df['column_name'] = np.where(df['column_name'] > upper_limit, upper_limit, df['column_name'])
  1. 대체: 이상치를 적절한 값으로 대체하는 방법입니다.
median = df['column_name'].median()
df['column_name'] = np.where(df['column_name'] > upper_limit, median, df['column_name'])

4. 전처리 파이프라인 구축

결측치 및 이상치 처리를 포함한 전처리 파이프라인을 구축하면 데이터 분석을 더 효율적으로 수행할 수 있습니다. Scikit-learn의 Pipeline 클래스를 사용하여 전처리 단계를 순차적으로 적용할 수 있습니다.

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier

pipeline = Pipeline([
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler()),
('classifier', RandomForestClassifier())
])

이 파이프라인은 결측치 처리, 데이터 스케일링, 분류기를 포함한 전처리 단계를 정의합니다.

참고문서

728x90
반응형