데이터 분석에서 데이터 전처리는 필수적인 과정입니다. 데이터가 아무리 많고 복잡하더라도, 올바른 전처리 없이는 의미 있는 인사이트를 도출하기 어렵습니다. 이번 포스팅에서는 Pandas 라이브러리를 활용한 데이터 전처리 과정에서 마주했던 진짜 난관과 이를 극복한 경험담을 공유하고자 합니다.

1. 결측치 처리의 어려움

데이터셋에서 결측치는 가장 흔하게 마주치는 문제 중 하나입니다. 예를 들어, 고객 데이터를 다루고 있을 때, 특정 속성(예: 나이, 성별 등)이 비어 있는 경우가 많습니다. 이때 어떤 방식으로 결측치를 처리하는지가 매우 중요합니다.

결측치 처리 방법

  1. 삭제: 결측치가 너무 많지 않다면 해당 행을 삭제하는 방법이 있습니다.
  2. 대체: 평균, 중앙값 또는 최빈값으로 결측치를 대체하는 방법입니다.
  3. 예측: 머신러닝 모델을 통해 결측치를 예측하여 대체할 수도 있습니다.
import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, None, 30, None],
    'Salary': [50000, 60000, None, 70000]
}

df = pd.DataFrame(data)

# 결측치 출력
print("결측치 비율:\n", df.isnull().mean())

# Age 결측치를 평균으로 대체
df['Age'].fillna(df['Age'].mean(), inplace=True)

# Salary 결측치를 중앙값으로 대체
df['Salary'].fillna(df['Salary'].median(), inplace=True)

print("결측치 처리 후 데이터프레임:\n", df)

이 예제에서 결측치를 평균과 중앙값으로 대체함으로써 데이터의 일관성을 유지할 수 있었습니다.

2. 데이터 형식 변환의 복잡성

또 다른 난관은 데이터 형식 변환입니다. 예를 들어, 날짜 정보가 문자열로 되어 있을 때, 이를 Pandas의 datetime 형식으로 변환해야 하는 경우가 있습니다. 이 과정에서 포맷이 잘못되면 오류가 발생할 수 있습니다.

날짜 형식 변환 예시

# 문자열로 이루어진 날짜 데이터
date_data = {
    'Date': ['2023-01-01', '2023-02-30', '2023-03-15', '2023-04-10']
}
date_df = pd.DataFrame(date_data)

# 문자열을 datetime으로 변환
date_df['Date'] = pd.to_datetime(date_df['Date'], errors='coerce')

print("변환 후 데이터프레임:\n", date_df)
errors='coerce'를 사용하면 잘못된 날짜 형식은 NaT(Not a Time)으로 처리할 수 있어, 오류를 방지할 수 있습니다.

3. 중복 데이터 처리의 필요성

중복 데이터는 분석 결과를 왜곡할 수 있는 큰 문제입니다. 데이터베이스에서 데이터를 불러올 때, 같은 고객이 여러 번 기록되어 있을 수 있습니다. 이런 중복을 제거하는 과정 또한 중요합니다.

중복 제거 예시

# 중복 데이터 예제
dup_data = {
    'Name': ['Alice', 'Bob', 'Alice', 'David'],
    'Age': [25, 30, 25, 40]
}
dup_df = pd.DataFrame(dup_data)

# 중복 제거
dup_df.drop_duplicates(inplace=True)

print("중복 제거 후 데이터프레임:\n", dup_df)

이처럼 중복을 처리하여 데이터의 신뢰성을 높일 수 있습니다.

4. 범주형 데이터의 인코딩

마지막으로 범주형 데이터를 수치형으로 변환하는 과정에서의 난관입니다. 예를 들어, 성별과 같은 정보를 모델이 이해할 수 있도록 변환해야 합니다. 이 과정에서 주의해야 할 점은 원-핫 인코딩과 레이블 인코딩 중 어떤 방법을 사용할지를 판단하는 것입니다.

원-핫 인코딩 예시

# 범주형 데이터 예제
category_data = {
    'Gender': ['Male', 'Female', 'Female', 'Male']
}
category_df = pd.DataFrame(category_data)

# 원-핫 인코딩
one_hot_df = pd.get_dummies(category_df, columns=['Gender'], drop_first=True)

print("원-핫 인코딩 후 데이터프레임:\n", one_hot_df)

원-핫 인코딩을 통해 성별을 숫자로 변환하여 모델에 적용할 수 있게 되었습니다.

마무리

이번 포스팅에서는 Pandas를 사용한 데이터 전처리에서 겪었던 다양한 난관과 그를 극복한 방법들을 살펴보았습니다. 결측치 처리, 데이터 형식 변환, 중복 제거, 범주형 데이터 인코딩은 모두 데이터 분석의 기초이자 필수적인 부분입니다. 이러한 과정들이 원활히 진행될 때, 우리는 더욱 의미 있는 데이터를 확보할 수 있으며, 이를 통해 인사이트를 도출해낼 수 있습니다. 데이터 전처리의 중요성을 잊지 말고, 각 과정에서의 최적의 방법을 찾아가는 것이 중요함을 다시금 느끼게 되었습니다.