Skip to main content

Seaborn 분포 시각화

데이터의 분포를 이해하는 것은 모든 분석의 시작점입니다. Seaborn은 히스토그램, KDE(커널 밀도 추정), ECDF(경험적 누적분포), pairplot 등 분포를 탐색하는 다양한 도구를 제공합니다.

학습 목표

  • histplot으로 히스토그램과 KDE를 함께 그릴 수 있다
  • kdeplot으로 밀도 곡선을 시각화할 수 있다
  • pairplot으로 모든 변수 쌍의 관계를 한 번에 탐색할 수 있다
  • 분포의 형태(정규, 편향, 다봉)를 시각적으로 판단할 수 있다

왜 중요한가

피처의 분포 형태는 전처리 방법 선택(스케일링, 변환), 이상치 처리, 모델 선택의 근거가 됩니다. pairplot은 EDA 초기에 변수 간 관계를 빠르게 스캔하는 핵심 도구입니다.

histplot

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

np.random.seed(42)
df = pd.DataFrame({
    'height': np.random.normal(170, 10, 500),
    'weight': np.random.normal(65, 12, 500),
    'gender': np.random.choice(['남', '여'], 500)
})

# 기본 히스토그램 + KDE
fig, ax = plt.subplots(figsize=(8, 5))
sns.histplot(data=df, x='height', kde=True, ax=ax, color='#4a9eca')
ax.set_title('키 분포')
plt.tight_layout()
plt.show()

# 그룹별 히스토그램
fig, ax = plt.subplots(figsize=(8, 5))
sns.histplot(data=df, x='height', hue='gender', kde=True, ax=ax,
             palette='Set2', alpha=0.6)
ax.set_title('성별 키 분포')
plt.tight_layout()
plt.show()

kdeplot — 커널 밀도 추정

fig, ax = plt.subplots(figsize=(8, 5))
sns.kdeplot(data=df, x='height', hue='gender', ax=ax,
            fill=True, alpha=0.4, palette='Set2')
ax.set_title('키 밀도 추정')
plt.tight_layout()
plt.show()

# 2D KDE
fig, ax = plt.subplots(figsize=(8, 6))
sns.kdeplot(data=df, x='height', y='weight', ax=ax,
            fill=True, cmap='Blues', levels=10)
ax.set_title('키-체중 2D 밀도')
plt.tight_layout()
plt.show()

ecdfplot — 경험적 누적분포

fig, ax = plt.subplots(figsize=(8, 5))
sns.ecdfplot(data=df, x='height', hue='gender', ax=ax, palette='Set2')
ax.set_title('키 누적분포')
ax.axhline(y=0.5, color='gray', linestyle='--', alpha=0.5, label='중앙값')
ax.legend()
plt.tight_layout()
plt.show()

pairplot — 변수 쌍 탐색

# 모든 수치형 변수 쌍의 산점도 + 대각선 히스토그램
sns.pairplot(df, hue='gender', palette='Set2', diag_kind='kde',
             plot_kws={'alpha': 0.5})
plt.suptitle('변수 쌍 탐색', y=1.02)
plt.show()
pairplot은 변수가 많으면 시간이 오래 걸립니다. 5개 이하의 주요 변수만 선택하여 사용하세요: sns.pairplot(df[['var1', 'var2', 'var3', 'target']]).

AI/ML에서의 활용

  • 분포 확인: 각 피처의 분포 형태를 파악하여 스케일링 전략을 결정합니다
  • 정규성 확인: KDE 곡선으로 정규분포 가정의 타당성을 시각적으로 판단합니다
  • 변수 관계: pairplot으로 피처 간 상관관계와 다중공선성을 탐색합니다
  • 클래스 분리: hue로 타겟 클래스별 피처 분포를 비교하여 피처의 판별력을 평가합니다
histplot()은 Axes 수준 함수로 기존 ax에 그릴 수 있고, displot()은 Figure 수준 함수로 FacetGrid를 반환합니다. 서브플롯에 넣을 때는 histplot()을 사용하세요.

체크리스트

  • histplot으로 히스토그램 + KDE를 그릴 수 있다
  • kdeplot으로 1D/2D 밀도를 시각화할 수 있다
  • pairplot으로 변수 쌍 관계를 한 번에 탐색할 수 있다
  • hue로 그룹별 분포를 비교할 수 있다

다음 문서