Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib 박스플롯 데이터 추출 방법 – 이상치, 박스, 중앙값, 수염 값 확인하기

Matplotlib으로 그린 박스플롯(boxplot)에는 단순한 그래프 이상의 정보가 담겨 있습니다. 이상치(outliers), 박스(boxes), 중앙값(medians), 수염(whiskers) 같은 통계 요소들의 실제 값을 추출하려면 pandas의 boxplot() 메서드에 return_type='both' 옵션을 지정하면 됩니다. 이렇게 하면 그림 객체와 함께 각 구성 요소에 접근할 수 있는 딕셔너리가 함께 반환되어, 원하는 데이터를 손쉽게 꺼내 쓸 수 있습니다.

구현 단계

  1. 그림(figure) 크기를 설정하고 서브플롯 주변과 사이의 여백을 조정합니다.
  2. pandas를 사용하여 데이터프레임을 생성합니다.
  3. 데이터프레임 열을 기반으로 박스플롯을 그립니다.
  4. 박스플롯의 이상치(outliers), 박스(boxes), 중앙값(medians), 수염(whiskers) 데이터를 가져옵니다.
  5. 가져온 모든 정보를 출력합니다.
  6. 그림을 화면에 표시하려면 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) 객체에서 실제 데이터 값을 직접 읽어올 수 있어, 시각화 결과를 정량적으로 분석하거나 다른 처리에 활용하기에 매우 유용합니다.

Matplotlib 박스플롯 데이터 추출 방법 – 이상치, 박스, 중앙값, 수염 값 확인하기