Matplotlib으로 그린 박스플롯(boxplot)에는 단순한 그래프 이상의 정보가 담겨 있습니다. 이상치(outliers), 박스(boxes), 중앙값(medians), 수염(whiskers) 같은 통계 요소들의 실제 값을 추출하려면 pandas의 boxplot() 메서드에 return_type='both' 옵션을 지정하면 됩니다. 이렇게 하면 그림 객체와 함께 각 구성 요소에 접근할 수 있는 딕셔너리가 함께 반환되어, 원하는 데이터를 손쉽게 꺼내 쓸 수 있습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변과 사이의 여백을 조정합니다.
- pandas를 사용하여 데이터프레임을 생성합니다.
- 데이터프레임 열을 기반으로 박스플롯을 그립니다.
- 박스플롯의 이상치(outliers), 박스(boxes), 중앙값(medians), 수염(whiskers) 데이터를 가져옵니다.
- 가져온 모든 정보를 출력합니다.
- 그림을 화면에 표시하려면
show()메서드를 호출합니다.
예제 코드
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame(dict(age=[23, 45, 21, 15, 12]))
_, bp = pd.DataFrame.boxplot(df, return_type='both')
outliers = [flier.get_ydata() for flier in bp["fliers"]]
boxes = [box.get_ydata() for box in bp["boxes"]]
medians = [median.get_ydata() for median in bp["medians"]]
whiskers = [w.get_ydata() for w in bp["whiskers"]]
print("Outliers: ", outliers)
print("Boxes: ", boxes)
print("Medians: ", medians)
print("Whiskers: ", whiskers)
plt.show()실행 결과
Outliers: [array([45])] Boxes: [array([15., 15., 23., 23., 15.])] Medians: [array([21., 21.])] Whiskers: [array([15., 12.]), array([23., 23.])]
결과 해석
- Outliers: 박스 범위를 벗어난 이상치 값입니다. 이 예제에서는 45가 해당됩니다.
- Boxes: 1사분위수(Q1=15)부터 3사분위수(Q3=23)까지, 즉 박스의 상하 경계를 나타내는 y좌표입니다.
- Medians: 데이터의 중앙값(21)이 위치한 좌표입니다.
- Whiskers: 박스 끝에서 수염이 뻗어 나가는 최소·최대 범위(12~23)를 의미합니다.
이처럼 get_ydata() 메서드를 활용하면 박스플롯을 구성하는 각 아티스트(artist) 객체에서 실제 데이터 값을 직접 읽어올 수 있어, 시각화 결과를 정량적으로 분석하거나 다른 처리에 활용하기에 매우 유용합니다.
