import pandas as pd
import numpy as np
air = pd.read_csv('../../data/airquality.csv')
air.info()
air.isna().sum()
air['Ozone'].isna()
tb = air['Ozone'].isna().value_counts()
# 결측치 대치
# 해당 열의 평균 값으로 대치
air['Ozone'] = air['Ozone'].fillna(air['Ozone'].mean())
# 사이킷런을 활용한 결측치 대치 - KNN
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors = 2)
air_filled = imputer.fit_fransform(air)
pre_air = pd.DataFrame(air_filled, columns = air.columns)
# 이상치 인식
# Ozone 변수에서 이상치를 박스 플롯으로 확인
import seaborn as sns
sns.boxplot(x = 'Ozone', data = air)
# IQR을 이용한 이상치 탐색 함수
def detect_outliers(df=None, column=None, weight = 1.5):
Q1 = df[column].quantile(0.25)
Q3 = df[column].quantile(0.75)
IQR = Q3 - Q1
IQR_weight = IQR * weight
outlier_idx = df[(df[column] < Q1 - IQR_weight)|(df[column] > Q3 + IQR_weight).index
return outlier_idx
out_index = detect_outliers(df=air, column='Ozone')
air.loc[out_index, 'outlier'] = True
air[air['outlier']==True]
# outlier 대체 (중위 값 혹은 평균 값으로)
air.loc[out_index, 'Ozone'] = air['Ozone'].median()
# 기존의 평균, 중앙값 바뀌면서 outlier 다시 발생
# 이때는 outlier 제거
'ADP > 실기' 카테고리의 다른 글
변수 축소 (1) | 2024.01.24 |
---|---|
범주형 데이터 전처리 (0) | 2024.01.23 |
데이터 표준화, 정규화 (0) | 2024.01.23 |
데이터 샘플링 (0) | 2024.01.21 |
날짜 데이터 핸들링 (0) | 2024.01.21 |