Skip to content

📊 Seaborn Boxplot 튜토리얼: 파이썬에서 커스텀 박스 플롯 만들기

Updated on

박스 플롯은 데이터 분포의 통계적 요약을 제공하며 데이터 과학 분야에서 필수적인 도구입니다. 데이터 과학 프로젝트의 탐색적 데이터 분석 (EDA) 단계에서 특히 유용합니다. 이 튜토리얼에서는 파이썬의 Seaborn 라이브러리를 사용하여 박스 플롯을 만드는 방법에 집중할 것입니다. Seaborn은 통계 그래픽 및 데이터 시각화에 사용할 수 있는 강력한 도구로 박스 플롯 함수, Seaborn.boxplot()에 대해 알아보고 구문과 사용자의 요구에 맞게 커스텀하는 방법에 대해 다룰 것입니다.

Seaborn은 matplotlib을 기반으로 한 파이썬 데이터 시각화 라이브러리입니다. Seaborn은 매력적이고 정보성이 풍부한 통계적 그래픽을 그리기 위한 고수준 인터페이스를 제공합니다. Seaborn의 주요 기능 중 하나는 데이터의 다섯 가지 요약 정보를 그래픽으로 나타내는 박스 플롯을 생성할 수 있다는 점입니다. Seaborn.boxplot() 함수는 우리의 데이터에 대한 이러한 플롯을 쉽고 유연하게 생성할 수 있는 강력한 도구입니다.

파이썬 판다스 데이터프레임에서 코드 없이 데이터 시각화를 빠르게 만들고 싶으신가요?

PyGWalker는 시각화와 함께 데이터 탐색적 분석을 위한 파이썬 라이브러리입니다. PyGWalker (opens in a new tab)는 파이썬 판다스 데이터프레임 (및 polars 데이터프레임)을 Tableau 스타일의 사용자 인터페이스로 변환하여 Jupyter Notebook 데이터 분석 및 데이터 시각화 워크플로우를 단순화할 수 있습니다.

PyGWalker를 사용한 데이터 시각화 (opens in a new tab)

Seaborn Boxplot이란 무엇이며 어떻게 사용되나요?

Seaborn Boxplot은 사분위수를 통해 숫자 데이터의 그룹을 그래픽으로 나타내는 방법입니다. 박스 플롯은 데이터의 시각적 요약을 제공하며 박스는 사분위 범위 (데이터의 중간 50%), 상자 안의 선은 중앙값을 나타내며 수염은 데이터의 범위를 나타냅니다. 이상치가 있는 경우 수염 외부에 개별 점으로 나타낼 수 있습니다.

박스 플롯은 서로 다른 데이터 세트 간의 분포를 비교하는 데 사용됩니다. 예를 들어, 서로 다른 교실간의 시험 점수 분포나 서로 다른 달의 온도 분포를 비교하고자 할 수 있습니다. Seaborn 박스 플롯 함수를 사용하면 이러한 플롯을 쉽게 생성하고 필요에 맞게 커스텀할 수 있습니다.

파이썬에서 Seaborn Boxplot 만들기

Seaborn 박스 플롯을 생성하려면 먼저 seaborn 라이브러리를 가져와야 합니다. 다음 코드로 이를 수행할 수 있습니다:

import seaborn as sns

다음으로 데이터를 로드해야 합니다. Seaborn은 Pandas 데이터프레임을 처리할 수 있으므로 데이터를 데이터프레임에 로드한 다음 seaborn 박스 플롯 함수에 전달할 수 있습니다. 다음은 예시입니다:

## 예시 팁 데이터셋 로드하기
tips = sns.load_dataset("tips")
 
## 박스 플롯 생성하기
sns.boxplot(x=tips["total_bill"])

이 예시에서는 seaborn의 내장된 팁 데이터셋을 로드하고 총 청구액에 대한 박스 플롯을 생성하고 있습니다.

Seaborn Boxplot의 외형 커스터마이징

Seaborn 박스 플롯은 외형을 많은 방법으로 커스터마이징할 수 있으며 외형을 개선하여 더 많은 정보를 제공할 수 있습니다. Seaborn 박스 플롯을 커스터마이징하는 몇 가지 예시를 살펴보겠습니다:

방향 변경하기

기본적으로 Seaborn은 수직 박스 플롯을 생성합니다. 그러나 x와 y 매개변수를 교체하여 수평 박스 플롯을 생성할 수 있습니다. 다음은 예시입니다:

## 수평 박스 플롯 생성하기
sns.boxplot(y=tips["total_bill"])

Hue 추가하기

박스 플롯에 hue 매개변수를 추가하여 다른 범주형 변수로 상자를 분할할 수 있습니다. 이를 통해 서로 다른 그룹 간의 분포를 비교하는 데 유용할 수 있습니다. 다음은 예시입니다:

## hue를 추가한 박스 플롯 생성하기
sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips)

이 예시에서는 각 날짜별로 총 청구액에 대한 박스 플롯을 생성하고 흡연자 여부에 따라 분할하고 있습니다.

상자 색상 커스터마이징하기

Seaborn은 박스 플롯의 색상을 사용자 정의할 수 있습니다. 이는 boxplot 함수의 palette 매개변수에 색상 팔레트를 전달하여 수행할 수 있습니다. 다음은 예시입니다:

## 색상을 사용자 정의한 박스 플롯 생성하기
sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set3")

이 예시에서는 "Set3" 색상 팔레트를 사용하여 박스 플롯의 색상을 지정하고 있습니다.

수염 변경하기

기본적으로 seaborn 박스 플롯의 수염은 이상치를 제외한 데이터의 범위를 나타냅니다. 그러나 boxplot 함수의 whis 매개변수에 다른 값을 지정하여 이를 변경할 수 있습니다. 예를 들어, whis를 0.5로 설정하여 수염이 5번째 백분위수와 95번째 백분위수를 나타내도록 할 수 있습니다. 다음은 예시입니다:

## 사용자 정의 수염을 사용한 박스 플롯 생성하기
sns.boxplot(x="day", y="total_bill", data=tips, whis=0.5)

Seaborn Boxplot vs Violinplot

Seaborn은 커널 밀도 추정을 이용한 박스 플롯과 결합한 violin plot이라는 또 다른 유형의 플롯을 제공합니다. Violin plot은 데이터 값의 분포에 대한 더 상세한 설명을 제공하기 위해 사용됩니다. 박스 플롯은 데이터의 요약 정보를 제공하는 데 탁월하지만, violin plot은 분포에 대해 더 자세한 정보를 제공할 수 있습니다.

그러나 violin plot은 해석하기에 더 복잡할 수 있으며 모든 대상에게 적합하지 않을 수 있습니다. 이에 반해, 박스 플롯은 직관적이고 널리 이해되므로 다양한 상황에서 좋은 선택입니다.

다음은 seaborn에서 violin plot을 만드는 방법의 예시입니다:

## Violin plot 생성하기
sns.violinplot(x="day", y="total_bill", data=tips)

seaborn 박스 플롯 해석

seaborn 박스 플롯 해석은 플롯의 다른 구성 요소를 이해하는 것을 의미합니다. 가운데 상자는 사분위 범위(IQR)를 나타내는데, 이는 첫 번째 사분위수(25번째 백분위수)와 세 번째 사분위수(75번째 백분위수) 사이의 범위입니다. 상자 내부의 선은 데이터의 중앙값 또는 50번째 백분위수입니다. Whiskers는 IQR의 1.5배 이내의 데이터 범위를 나타냅니다. 이 범위를 벗어나는 데이터 포인트는 이상치로 간주되어 개별 포인트로 표시됩니다.

다음은 seaborn 박스 플롯을 해석하는 방법의 예시입니다:

## 박스 플롯 생성
sns.boxplot(x="day", y="total_bill", data=tips)

이 박스 플롯에서는 각 날짜별 중앙값인 총 청구액을 볼 수 있습니다. 상자는 IQR을 나타내므로 매일 고객 50%에 해당하는 총 청구액 범위를 볼 수 있습니다. Whisker는 IQR의 1.5배 이내의 총 청구액 범위를 보여주며, 이 범위를 벗어나는 모든 포인트는 이상치입니다.

seaborn 박스 플롯 주석

seaborn 박스 플롯에는 추가 정보를 제공하기 위해 주석을 추가할 수 있습니다. 예를 들어, 중앙값, 사분위수 또는 이상치를 해당 값으로 주석으로 표시할 수 있습니다. 다음은 seaborn 박스 플롯에 주석을 추가하는 방법의 예시입니다:

## 박스 플롯 생성
ax = sns.boxplot(x="day", y="total_bill", data=tips)
 
## 주석 추가
for patch in ax.artists:
    r, g, b, a = patch.get_facecolor()
    patch.set_facecolor((r, g, b, .3))
    x = patch.get_x()
    y = patch.get_y()
    width = patch.get_width()
    height = patch.get_height()
    ax.text(x+width/2, y+height/2, "{:.2f}".format(height), ha='center', va='center')
 
plt.show()

이 예시에서는 각 상자의 높이를 나타내는 주석을 박스 플롯에 추가합니다. 이 높이는 IQR을 나타냅니다.

결론

결론적으로, seaborn 박스 플롯은 데이터의 분포를 시각화하고 이해하는 강력한 도구입니다. seaborn 라이브러리를 사용하면 몇 줄의 코드로 매력적이고 유익한 박스 플롯을 만들 수 있습니다. 새로운 데이터 세트를 탐색하거나 보고서를 준비할 때 seaborn 박스 플롯은 필요한 통찰력을 얻을 수 있도록 도움을 줄 수 있습니다.

자주 묻는 질문

seaborn 박스 플롯이 무엇이며 어떻게 사용되나요?

seaborn 박스 플롯은 데이터 세트의 분포를 나타내는 그래픽 방식으로, 데이터의 중앙값, 사분위수 및 이상치를 보여줍니다. 데이터의 분포를 시각화하고 이해하기 위해 사용되며, 다른 데이터 그룹간의 분포를 비교하는 데에도 사용됩니다.

Python에서 seaborn 박스 플롯을 어떻게 만들 수 있나요?

seaborn.boxplot() 함수를 사용하여 Python에서 seaborn 박스 플롯을 만들 수 있습니다. 이 함수에 데이터를 전달하고 다양한 매개변수를 사용하여 박스 플롯의 외관을 사용자 정의할 수 있습니다.

seaborn 박스 플롯의 외관을 어떻게 사용자 정의할 수 있나요?

seaborn 박스 플롯의 외관을 여러 가지 방법으로 사용자 정의할 수 있습니다. 방향을 변경하거나 휴를 추가하고 색상을 사용자 정의하고 Whisker를 변경하는 등 다양한 방법으로 외관을 사용자 정의할 수 있습니다. 또한 추가 정보를 제공하기 위해 주석을 추가할 수도 있습니다.