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
'Dev > python' 카테고리의 다른 글
[python] sklearn.metrics.f1_score로 F1 점수 구할 때 라벨이 1이 아닐 때 생기는 오류 해결법 (0) | 2022.11.15 |
---|---|
[python] k-means 알고리즘으로 도매업 고객사 분류하기 (0) | 2022.11.14 |
[python] 의사결정 나무(decision tree)로 유방암 진단하기 (0) | 2022.11.13 |
[python] 가상 환경에 설치되어 있는 패키지 목록을 전달해주는 방법(pip freeze) (0) | 2022.11.09 |
[python] yaml 파일 파이썬에서 읽기 (0) | 2022.10.28 |
[python] 문자열 대소문자 변환하기 (upper, lower, isupper, islower) (0) | 2022.10.25 |
[python] 0으로 채워진 1차원, 2차원 리스트(배열) 만들기 (0) | 2022.10.11 |
[python] 리스트에서 최대값, 최소값의 인덱스 구하기 (0) | 2022.10.09 |