Gaegul's devlog
[데이터 분석] 이상치 처리 본문
728x90
반응형
이상치 처리 방법은 다양하지만 이번 시간에는 3sigma 기준으로 이상치를 처리해볼껍니당! (IQR로 구할 수 도 있지만 이번 시간에는 3sigma 방법을 볼꺼예요 ☺️)
3sigma 란?
일변량 자료들 중 평균 ± 3*표준편차를 벗어나는 것들을 비정상이라 규정(정규분포 기반)
#이상치 처리
def outlier(data):
threshold = 3
outlier = []
for i in range(len(data)):
if (data[i]>data.mean()+3*data.std())|(data[i]<data.mean()-3*data.std()):
outlier.append(data[i])
data[i] = np.NaN
print('데이터셋 내의 이상값은', outlier)
이상치에 해당하는 데이터는 NaN으로 변경해줍니다.
# 변수 3sigma 기준으로 outlier 처리
# 일변량 자료들 중 평균 ± 3*표준편차를 벗어나는 것들을 비정상이라 규정(정규분포 기반)
outlier_list = ['w', 'pw', 'bps', 'bpd', 'spo2', 'hr', 'gl']
for i in outlier_list:
outlier(train_tmp[str(i)])
outlier(test_tmp[str(i)])
print('TrainSet w / pw 의 분포 그래프')
f, axes = plt.subplots(1, 2, figsize=(15, 10), sharex=True)
sns.distplot(train_tmp['w'], color="blue", ax=axes[0])
sns.distplot(train_tmp['pw'], color="red", ax=axes[1])
plt.show()
nan을 채우는 방법은 다양하지만 저 같은 경우는 time series에서는 일반적으로 interpolate 메소드를 사용합니다.
# time 보간으로 채움
train_tmp = train_tmp.set_index(['timestamp'])
train_tmp[['w', 'pw']] = train_tmp[['w', 'pw']].interpolate(method='time')
#예외처리
train_tmp['pw'] = train_tmp['pw'].fillna(method='bfill')
test_tmp['pw'] = test_tmp['pw'].fillna(method='bfill')
728x90
반응형
'Data Analysis' 카테고리의 다른 글
[데이터 분석] 라벨 불균형 처리 (0) | 2022.10.28 |
---|---|
[데이터 분석] 모델 성능 향상 (0) | 2022.10.28 |
[데이터 분석] 선형회귀 / 다항회귀 (0) | 2022.10.26 |
Comments