BSA05_Missing-Value.ipynb
필요한 패키지
import pandas as pd
import numpy as np
결측값 제거
행 제거 : 관측값 제거
결측자료 = pd.read_csv("Employee_missing.csv", encoding="cp949")
# 결측자료의 수 확인
결측자료.isna().sum()
# 결측값이 하나라도 있는 경우 제거
결측자료.dropna(axis=0).head()
# 모든 자료가 결측값이면 제거 : how='all', default='any'
# default='any' : 결측값이 하나라도 있는 행 제거
결측자료.dropna(how='all').head()
# 결측값이 아닌 개수가 k개 미만이면 제거
k=5
결측자료.dropna(thresh=k).head()
# 결측값이 특정 변수(column)에 있으면 제거
결측자료.dropna(subset='gender').head()
# 여러 변수(column)에 결측값이 있으면 제거 (합집합의 개념)
결측자료.dropna(subset=['gender', 'jobcat']).head()
# 결측을 제거한 데이터프레임을 동일명의 데이터프레임으로 저장
결측자료.dropna(subset='gender', inplace=True)
열 제거 : 변수 제거
# 결측값이 있는 열(컬럼) 제거
# axis=1 : column, axis=0 : row
결측자료.dropna(axis=1).head()
결측자료.dropna(axis='columns').head()
# 각 컬럼(열)의 결측값이 아닌 개수가 474개 미만이면 제거
결측자료.dropna(axis=1, thresh=474).head()
# 특정변수의 값을 NaN으로 처리
결측자료['jobcat'].replace('경영자',np.NaN) # jobcat='경영자'이면 결측값으로 처리
결측자료['jobcat'].replace({'경영자':np.NaN, '사무직':np.NaN}) # jobcat='경영자'이거나 '사무직'이면 결측값으로 처리
결측값 대체
결측자료 = pd.read_csv("Employee_missing.csv", encoding="cp949")
# 대체값 직접 지정
결측자료.fillna(0).head() # 데이터 타입과 관계없이 결측값을 0으로 대체
# 변수에 따라 대체값 직접 지정 (딕셔너리 형태로)
결측자료.fillna({"id":0, "gender":"남자", "jobcat":"경영자"}).head()
# 결측자료.fillna({"id":0, "gender":"남자", "jobcat":"경영자"}, inplace=True)
# 전/후 관측값으로 대체 (관측값의 순서가 시간순인 경우)
결측자료.fillna(method='ffill').head() # former(앞의 데이터로)
# 앞의 데이터에 결측값이 있다면 채워넣을 수 없음
결측자료.fillna(method='bfill').head() # backward(뒤의 데이터로)
# 통계값으로 대체
# 수치자료 : 평균, 중앙값 / 범주자료 : 최빈값
수치변수명 = 결측자료.select_dtypes(include=np.number).columns.tolist()
수치결측자료 = 결측자료[수치변수명]
# 수치자료 = 결측자료.select_dtypes(include=np.number)
# 특정 컬럼의 값 분포 확인
수치결측자료.groupby("educ").count() # 개수 계산
수치결측자료.groupby("educ").mean() # 평균 계산
# 각 컬럼의 평균 계산
수치결측자료.mean()
# 각 컬럼의 평균으로 결측값 대체
수치결측자료.fillna(수치결측자료.mean()).head()
# 중앙값:median(), 최솟값:min(), 최댓값:max()
# 각 컬럼의 최빈값으로 결측값 대체
최빈값 = 결측자료.mode()
결측자료.fillna(최빈값.iloc[0,:]).head()
대체 패키지 이용
# 1. SimpleImuter
from sklearn.impute import SimpleImputer
단순대체 = SimpleImputer(strategy='mean')
대체자료 = 단순대체.fit_transform(수치결측자료) # 수치결측자료에 mean을 계산한 것을 대체자료로 저장
# 평균=mean, 중앙값=median, 최빈값=most_frequent, 정해진값=constant (fill_value로 값 지정)
대체자료 # numpy의 array 형태로
대체자료 = pd.DataFrame(대체자료, columns=수치결측자료.columns)
# 또는
단순대체.set_output(transform='pandas') # pandas의 dataframe으로 출력
대체자료 = 단순대체.fit_transform(수치결측자료)
# 2. IterativeImputer
from sklearn.experimental import enable_iterative_imputer # noqa
from sklearn.impute import IterativeImputer
확률대체 = IterativeImputer(random_state=0)
확률대체.set_output(transform='pandas')
대체자료 = 확률대체.fit_transform(수치결측자료)
대체자료.head()
# 3. K-NN
from sklearn.impute import KNNImputer
근접대체 = KNNImputer(n_neighbors=190, weights='uniform')
근접대체.set_output(transform='pandas')
근접대체.fit_transform(수치결측자료).head()
회귀분석을 통한 대체
'Statistics > BSA' 카테고리의 다른 글
230412 / BSA05. 데이터 전처리 2 : python, pyspark에서 데이터 결합 (0) | 2023.04.23 |
---|---|
230412 / BSA05. 데이터 전처리 2 : pyspark에서 결측값 처리 (0) | 2023.04.14 |
230405 / BSA05. 데이터 전처리 (0) | 2023.04.10 |
230329 / BSA04. 오디오 데이터 처리하기 (0) | 2023.04.02 |
230329 / BSA04. 다양한 형식의 데이터 파일 읽고 저장하기 (0) | 2023.04.02 |