Python에서 Pandas와 Matplotlib을 함께 사용하면 특정 열(column)을 기준으로 데이터를 그룹화하여 계층화된 박스플롯(boxplot)을 손쉽게 시각화할 수 있습니다. 박스플롯은 데이터의 분포, 중앙값, 사분위수, 이상치를 한눈에 파악할 수 있어 탐색적 데이터 분석(EDA)에 매우 유용합니다. 이번 글에서는 단계별로 구현 방법을 살펴보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 자동으로 조정합니다.
- 2차원이면서 크기가 가변적이고, 서로 다른 자료형을 담을 수 있는 표 형태의 Pandas 데이터프레임을 생성합니다.
- 데이터 집합에 대한 히스토그램을 계산하여 구간(bins) 정보를 확인합니다.
boxplot()메서드에by인자를 지정해 특정 열을 기준으로 계층화된 박스플롯을 생성합니다.- show() 메서드를 호출하여 최종 그림을 화면에 표시합니다.
예제 코드
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# 그림 크기 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# Pandas 데이터프레임 생성
df = pd.DataFrame({"column1": [4, 6, 7, 1, 8], "column2": [1, 5, 7, 8, 1]})
# 히스토그램 계산
_, breaks = np.histogram(df.column1, bins=5)
# column2 값을 기준으로 계층화된 박스플롯 생성
ax = df.boxplot(column='column1', by='column2')
# 플롯 표시
plt.show()
코드 설명
plt.rcParams를 통해 그림의 전체 크기를 가로 7.50인치, 세로 3.50인치로 지정하고, figure.autolayout 옵션을 활성화해 라벨이나 제목이 잘리지 않도록 여백을 자동 조절합니다. 이후 두 개의 열을 가진 간단한 데이터프레임을 만들고, np.histogram()으로 column1의 데이터를 5개 구간으로 나눈 히스토그램 경계값을 계산합니다. 마지막으로 df.boxplot(column='column1', by='column2')를 호출하면 column2의 고유값별로 column1의 분포가 그룹화되어 박스플롯으로 나타납니다.
실행 결과
위 코드를 실행하면 column2 값별로 구분된 column1의 박스플롯이 다음과 같이 출력됩니다.
