상세 컨텐츠

본문 제목

Data Preprocessing - 결측값 처리

데이터분석/전처리

by 2^7 2024. 12. 9. 21:00

본문

결측값이란?

  • 데이터셋에서 특정 변수의 값이 존재하지 않거나 기록되지 않은 경우를 말함
  • 일반적으로 다음과 같은 형태로 나타남
    • NA (Not Available)
    • NaN (Not a Number)
    • 빈 문자열 혹은 특정한 기호(예: ?, -999)로 표현될 수 있음.
  • 결측값이 발생하는 원인은 데이터를 수집하는 과정에서 누락되거나, 기술적 오류로 인해 기록되지 않거나, 민감한 정보로 의도적으로 제외되어 발생 할 수 있음

 

1. 결측값 처리 방법

결측값을 처리하는 방법은 데이터의 성격, 결측값의 비율, 그리고 분석 목표에 따라 달라질 수 있음

 1) 결측값 제거

  • pandas의 dropna() 함수 활용하여 행이나 열을 삭제
  • 행(row) 제거: 결측값이 포함된 행을 삭제.
  • 열(column) 제거: 특정 열의 결측값이 많으면 열 전체를 삭제.

 2) 결측값 대체(Imputation)

  • 단순 대체 - 평균(mean), 중앙값(median), 최빈값(mode)으로 대체.
  • 예측 기반 대체 - 다른 변수의 정보를 바탕으로 회귀, K-최근접 이웃(KNN) 등을 사용하여 결측값 예측.
  • 도메인 지식 기반 대체 - 특정 값이나 규칙을 사용해 대체.

 3) 기타 방법

  • 결측값 자체를 분석의 일부분으로 포함.
  • 결측값 비율이 높거나 구조적으로 발생한 경우 별도 모델링.

 

2. 이상치와 결측값의 차이

구분 결측값 이상치
정의 값이 누락된 상태 정상 데이터 분포에서 크게 벗어난 값
발생 원인 데이터 수집 오류, 누락 등 잘못된 입력, 드문 사건 등
처리방법 제거 또는 대체 탐지 후 제거, 변환, 또는 별도 분석
예시 NaN, NULL, 빈 값 1,000kg의 사람 몸무게

 

3. 결측값 처리 예제 코드

import pandas as pd
import numpy as np

# 예제 데이터셋 생성
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [25, np.nan, 30, 35, np.nan],
    'Score': [85, 90, np.nan, 75, 95]
}
df = pd.DataFrame(data)

# 1. 결측값 확인
print("결측값 확인:")
print(df.isnull())

# 2. 결측값 제거
print("\n결측값 제거:")
print(df.dropna())  # 결측값이 포함된 행 제거

# 3. 결측값 대체 (평균으로 대체)
mean_age = df['Age'].mean()
df['Age'].fillna(mean_age, inplace=True)
print("\n결측값 평균으로 대체 (Age):")
print(df)

# 4. 결측값 대체 (중앙값으로 대체)
median_score = df['Score'].median()
df['Score'].fillna(median_score, inplace=True)
print("\n결측값 중앙값으로 대체 (Score):")
print(df)
728x90

관련글 더보기