2022-11-04 20:51:09

matplotlib으로 박스플롯(box plot)을 그리면 다음과 같은 모양의 그래프가 그려집니다. 오늘은 이 박스플롯을 해석하는 방법에 대해 살펴보도록 하겠습니다.

 

박스플롯 그리기

우선 타이타닉 데이터 셋의 탑승자 나이 컬럼을 가지고 박스플롯을 그려보겠습니다. 

 

import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset('titanic')
df = titanic.loc[:, ['age']]
df = df.dropna() # nan 값 제거

plt.boxplot(df['age'])
plt.show()

 

위 코드를 실행하면 다음과 같이 박스플롯이 잘 그려집니다. 

 

 

박스플롯 해석하기

그러면 이제 그려진 박스플롯을 해석해보겠습니다. 우선 중간에 있는 네모 박스에서 상단은 제3사분위수, 하단은 제1사분위수, 중간에 있는 주황색 선은 제2사분위수(중앙값)을 의미합니다.

 

 

제1사분위수, 제2사분위수, 제3사분위수는 데이터를 오름차순 정렬한 후 4등분했을 때 경계가 되는 수치들을 뜻합니다. 아래 그림을 참고하시면 쉽게 이해되실 것입니다. 제2사분위수는 데이터의 중앙에 위치한다고 해서 중앙값이라고도 부릅니다. 

 

 

그 다음에 가운데 있는 박스 위 아래로 선이 있는데 상단 끝과 하단 끝은 최대값과 최소값이 아닙니다. 아래 끝 선은 제1사분위수에서 1.5*(제3사분위수-제1사분위수)를 빼준 것입니다. 그리고 위 끝 선은 제3사분위수에 1.5*(제3사분위수-제1사분위수)를 더해준 것입니다. 제3사분위수에서 제1사분위수를 뺀 것을 IQR(interquartile range)이라고 부릅니다. 

 

IQR = 제3사분위수 - 제1사분위수

 

 

박스에서 위 아래로 나오는 수염들 때문에 박스플롯을 box-and-whisker plot으로 부르기도 합니다. 이게 조금 더 정확한 명칭입니다. 

 

마지막으로 박스플롯에서 동그라미로 표현된 것들 보이시나요? 제3사분위수 + 1.5*IQR보다 크거나 제1사분위수 - 1.5*IQR보다 작은 값들은 아웃라이어로 간주되어 처리됩니다. 이 데이터 포인트들이 실제로 아웃라이어가 아니더라도 말이죠. 

 

 

관련 글

- [python+pandas] 데이터프레임의 기술 통계 정보(평균, 표준편차, 최대값, 최소값, 분위수)를 요약해주는 describe() 메소드

- [pandas] 선 그래프, 막대 그래프, 히스토그램, 박스 플롯 그리기

 

참고자료

[1] matplotlib.pyplot.boxplot 설명, https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.boxplot.html

[2] 위키피디아, 박스플롯, https://en.wikipedia.org/wiki/Box_plot