데이터분석/전처리
Data Preprocessing - 결측값 처리
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