이번에는 quantile를 가지고 이상치를 처리해보도록 하겠습니다. 백분위수로 보통 IQR1.5-Q1 ~ IQR1.5+Q3을 기준으로 하고 이를 넘어가면 이상치로 판단합니다. 보다 큰 값 또는 작은 값들을 대체하거나 빼버리는 식입니다. 작업 1유형의 예시를 가지고 한번 해보겠습니다.
1
2
3
| import numpy as np
import pandas as pd
df1 = pd.read_csv('./mtcars.csv')
|
데이터를 불러오는 것을 시작을 합시다. 그중에서도 qsec열을 가지고 해보겠습니다.
1
2
3
| Q1_qsec = df1['qsec'].quantile(0.25)
Q3_qsec = df1['qsec'].quantile(0.75)
print(Q1_qsec, Q3_qsec)
|
사용 방법은 간단합니다. 원하는 열에다가 quantile(백분위수)를 넣으면 알 수 있습니다. IQR의 경우 Q3-Q1이니 빼주면 되겠지요
1
2
| IQR = Q3_qsec-Q1_qsec
print(IQR)
|
이제 IQR도 알았으니, 조건식을 이용하면 이상치가 제거된 값을 구할 수 있습니다.
1
2
| data_IQR = df1[(df1['qsec']>Q1_qsec-IQR*1.5)&(df1['qsec']<Q3_qsec+IQR*1.5)]
data_IQR['qsec'].hist()
|
& and 문을 이용하여 하한값, 상한값을 걸어주면 우리가 원하는 값을 얻을 수 있습니다. 다만 주어진 데이터는 IQR기준으로는 이상치가 없기 때문에 처리를 하든 말든 결과는 비슷하지만 대충 이렇게 해본 다는 느낌으로 접근해보았습니다.
1
2
| data_IQR = df1[(df1['qsec']<Q1_qsec-IQR*1.5)|(df1['qsec']>Q3_qsec+IQR*1.5)]
data_IQR['qsec'].sum()
|
빅데이터분석기사 복원문제중에 조건에 맞는 이상값의 총 합 구하기가 있었는데 조건문에서 부호를 반대로 하고 &를 | or문으로 바꾼다음에 sum을 사용하면 간단하게 구할 수 있습니다. 여기서는 1개 밖에 안나오는 군요 저는 22.9 한개 나왔습니다. |
Comments powered by Disqus.