728x90
반응형
IQR이란? (InterQuartile Range)
- IQR는 상위 75% 지점의 값과 하위 25 지점의 값 차이를 의미한다. boxplot을 이용하여 간단하게 이상치(Outlier)를 찾고 제거할 수 있다.
- 위 그림은 boxplot을 정리한 그림이며 IQR과 Q1, Q3, 그리고 이상치의 범위를 구할 수 있다.
이상치(Outlier) 구하기
- 이상치의 범위를 풀어서 설명하면 Q1 - 1.5 x IQR 보다 작고 Q3 + 1.5 x IQR 보다 커야한다.
- 극단적인 데이터가 많아 이상치 때문에 데이터 시각화가 어려울 경우 이상치를 제거하고 시각화를 진행하면 된다.
- 데이터셋은 경상북도 코로나 확진자 수 현황을 이용했다.
import pandas as pd
df = pd.read_csv('경상북도_시군별 코로나 확진자수 현황_20230331.csv', encoding='cp949')
df.boxplot(column='경북')
- 경북 지역 코로나 확진자 수 현황에 대한 데이터를 시각화해 boxplot으로 그려보았다.
- 위쪽으로 보이는 동그라미들이 이상치이다. 이상치는 급격하게 작아지거나 커진 데이터를 검출한다.
- 이상치를 제거하려면 데이터프레임에서 Q1 - 1.5 x IQR 보다 크고 Q3 + 1.5 x IQR 보다 작은 값에 대한 범위를 지정하고 데이터를 잘라내면 된다. 확진자 수가 음수가 될 수는 없기에 하한선 밑으로 이상치가 존재하지는 않지만 그래도 연습을 위해 같이 제거해보는 코드를 구현해보자.
Q1 = df['경북'].quantile(0.25)
Q3 = df['경북'].quantile(0.75)
IQR = Q3 - Q1
df_IQR = df[(df['경북'] > Q1 - 1.5 * IQR) & (df['경북'] < Q3 + 1.5 * IQR)]
df_IQR.boxplot(column='경북')
- .quantile() 함수를 이용해 Q1과 Q3 값을 구한다. 0.25와 0.75를 대입해 25%의 값과 75%의 값을 구할 수 있다.
- IQR의 값은 Q3-Q1이다.
- 하한선보다 크고 상한선보다 작은 범위만을 조건으로 지정한다.
- y축 눈금을 보면 5만 단위에서 2만 단위로 줄어든 것을 볼 수 있다. 이상치를 제거하고 데이터를 시각화하면 좀 더 정교한 자료를 얻을 수 있다.
이상치를 제거하는 것이 좋은것인가?
- 이상치는 특이점을 찾기 위해 따로 분류하여 분석하는 것이지 제거하는 것이 아니다. 예를 들어 코로나 확진자가 1~100명 사이로 발생하다가 1만명이 발생했다고 해보자. 그렇다면 이상치이니 제거하는 것이 아니라 1만명의 확진자가 발생한 날짜에 어떤 일이 발생했는지 분석하는 것이 맞는 것이다.
- 하지만 예를들어 1만명의 확진자가 발생한 날을 포함하여 평균을 구한다면 이상치 때문에 올바른 평균 값이 나오지 않을 것이다. 그러니 이상치는 따로 분류하여 관리하는 것이다.
728x90
반응형