Python/Analysis
[Analysis] 결측치 처리
gangee
2024. 4. 12. 16:08
728x90
반응형
결측치(missing value)
- 수집된 데이터 셋 중 관측되지 않은 특정 확률변수의 값
- 결측치 발생 시 잘못된 분석 결과를 낳거나 분석 시 코드 대입 경우 에러가 발생할 수 있음
결측치 처리 방법
1. 결측치 제거
- 결측치를 포함하고 있는 행이나 열을 제거하는 방법
# dropna를 이용한 예시
import pandas as pd
# 예시 데이터 프레임 생성
data = {'A': [1, 2, None, 4, 5],
'B': [None, 6, 7, 8, 9],
'C': [10, 11, 12, 13, 14]}
df = pd.DataFrame(data)
# 결측치가 있는 행을 제거하기
cleaned_df = df.dropna()
# 결과 출력
print("원본 데이터 프레임:")
print(df)
print("\n결측치가 제거된 데이터 프레임:")
print(cleaned_df)
# 출력 결과
원본 데이터 프레임:
A B C
0 1.0 NaN 10
1 2.0 6.0 11
2 NaN 7.0 12
3 4.0 8.0 13
4 5.0 9.0 14
결측치가 제거된 데이터 프레임:
A B C
1 2.0 6.0 11
3 4.0 8.0 13
4 5.0 9.0 14
2. 평균, 중앙값, 최빈값 대체
- 연속형 변수의 결측치를 대체할 때 사용하는 방법
- 해당 열의 평균값, 중앙값, 최빈값으로 결측치 대체
# fillna를 이용한 평균값 대체
# 1번 예시의 데이터프레임 활용
# 결측치를 각 열의 평균값으로 대체하기
filled_df = df.fillna(df.mean())
# 결과 출력
print("원본 데이터 프레임:")
print(df)
print("\n결측치가 대체된 데이터 프레임:")
print(filled_df)
# 출력 결과
원본 데이터 프레임:
A B C
0 1.0 NaN 10
1 2.0 6.0 11
2 NaN 7.0 12
3 4.0 8.0 13
4 5.0 9.0 14
결측치가 대체된 데이터 프레임:
A B C
0 1.0 7.5 10
1 2.0 6.0 11
2 3.0 7.0 12
3 4.0 8.0 13
4 5.0 9.0 14
3. KNN 방법으로 값 대체
- 결측치를 예측하기 위해 주변 데이터 포인트의 정보를 사용하는 비모수적 방법 중 하나
- KNN 알고리즘 단계
- 거리 측정 방법 선택 : 주변 이웃을 찾기 위한 거리 측정 방법을 사용함 (일반적으로 유클리드 거리, 맨하튼 거리 사용)
- 이웃의 수 선택 : K(이웃의 수)는 사용자가 지정
- 이웃 탐색 : 결측치를 예측하기 위해 해당 데이터 포인트의 주변에 있는 K개의 이웃을 찾음
- 대체값 계산 : 찾은 이웃들의 값을 기반으로 결측치 대체 / 이웃들의 값에 가중치를 부여하여 평균값이나 중앙값을 계산할 수 있음
- 결측치 대체 : 계산된 대체값으로 결측리 대체
# scikit-learn 라이브러리를 통해 KNN 구현 예시
# 1번과 예시의 데이터프레임 사용
import pandas as pd
from sklearn.impute import KNNImputer
# KNNImputer 객체 생성
imputer = KNNImputer(n_neighbors=2) # K(이웃의 수) 지정
# KNN을 사용하여 결측치 대체
filled_df = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
# 결과 출력
print("원본 데이터 프레임:")
print(df)
print("\n결측치가 대체된 데이터 프레임:")
print(filled_df)
# 출력 결과
원본 데이터 프레임:
A B C
0 1.0 NaN 10
1 2.0 6.0 11
2 NaN 7.0 12
3 4.0 8.0 13
4 5.0 9.0 14
결측치가 대체된 데이터 프레임:
A B C
0 1.0 6.5 10
1 2.0 6.0 11
2 3.0 7.0 12
3 4.0 8.0 13
4 5.0 9.0 14
- 이 외에도 회귀분석을 사용한 예측 대체, 다중 대체 방법 등이 있음
728x90
반응형