-
4. 판다스를 활용한 이상치 처리(boxplot, IQR)Data & ML & AI/Pandas & Scikit-Learn 2022. 5. 29. 14:56반응형
데이터 분석과 모델학습에 있어 이상치(outlier)가 단 한개라 하더라도 큰 영향을 미칠 수 있기 때문에 처리해줄 필요가 있습니다.
일반적으로 이상치는 제거하는 방식으로 처리합니다.이상치를 확인할 수 있는 가장 쉬운 방식 중 하나는 boxplot을 그려보는 것입니다.
1. box plot으로 이상치 확인하기
# matplotlib import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.font_manager as fm plt.rcParams['axes.unicode_minus'] = False # matplotlib 마이너스기호 표시 plt.rc('font', family='NanumGothic') # matplotlib 한글폰트 표시 # pandas import pandas as pd # data df = pd.read_csv('stock_market.csv') df.boxplot(column=['Dividend','PBR'])
칼럼 몇개만 선정하여 그려볼 수도 있습니다.
여기서는 그래프가 어느정도 눈에 들어오도록 2개의 칼럼만 임의로 선택해 진행했습니다.그리고 이상치 처리후 변화양상을 보기 위해, 히스토그램도 함께 살펴보겠습니다.
original_df = df[['Dividend','PBR']] original_df.hist(bins=20, figsize=(10,5))
2. 이상치 처리
이상치를 처리하는 기준과 방법은 분야과 분석자의 주관에 따라 크게 다릅니다.
여기서는 일반적으로 쉽게 처리하는 방식 중 하나인 IQR(Inter-Quartile Range)를 기준으로 이상치를 제거하겠습니다.IQR = Q3(3사분위수)-Q1(1사분위수)
제거기준 = (Q3 + IQR * 1.5 보다 큰 값) & (Q1 - IQR * 1.5 보다 작은 값)1) Q1, Q3, IQR 정의하기
Q1 = df[['Dividend','PBR']].quantile(q=0.25) Q3 = df[['Dividend','PBR']].quantile(q=0.75) print(Q1) print(Q3)
Dividend 1.01 PBR 0.43 Name: 0.25, dtype: float64 Dividend 3.4600 PBR 1.3675 Name: 0.75, dtype: float64
IQR = Q3-Q1 IQR
Dividend 2.4500 PBR 0.9375 dtype: float64
2) 이상치 데이터 제거하기 (이상치가 아닌 데이터만 채택하기)
IQR_df = df[(df['Dividend'] <= Q3['Dividend']+1.5*IQR['Dividend']) & (df['Dividend'] >= Q1['Dividend']-1.5*IQR['Dividend'])] IQR_df = IQR_df[(IQR_df['PBR'] <= Q3['PBR']+1.5*IQR['PBR']) & (IQR_df['PBR'] >= Q1['PBR']-1.5*IQR['PBR'])] IQR_df = IQR_df[['Dividend','PBR']] print('original_df :', len(original_df)) print('IQR_df :', len(IQR_df))
original_df : 250 IQR_df : 173
250개 데이터 중, 이상치 제거 과정에서 살아남은 데이터 개수는 173개입니다.
IQR_df.boxplot()
IQR_df.hist(bins=20, figsize=(10,5))
특히 PBR에서 극단적으로 크거나 작은 값이 사라진 것을 확인할 수 있습니다.
반응형'Data & ML & AI > Pandas & Scikit-Learn' 카테고리의 다른 글
6. scikit-learn을 활용한 간단한 분류모델 (classification with LogisticRegression) (0) 2022.06.03 5. 판다스를 활용한 로그변환 (2) 2022.05.30 3. 판다스를 활용한 Null값 대체(특정값, 평균, 특정함수) (0) 2022.05.24 2. 판다스를 활용한 Null값 제거 (결측행, 결측열 제거) (0) 2022.05.23 1. 판다스를 활용한 자료탐색 기초(+그래프그리기) (0) 2022.05.15