PairGrid와 pairplot
"선배, 저 펭귄 데이터에서 부리 길이, 부리 깊이, 날개 길이, 몸무게... 이 4개 변수가 서로 어떤 관계인지 한 번에 보고 싶어요."
"그럼 pairplot이 딱이야. 변수 4개면 4×4 격자가 만들어지거든."
민서가 코드를 실행하자 화면에 16칸짜리 차트 격자가 펼쳐졌습니다.
"변수 4개의 관계가 한 번에!"
pairplot: 간편하게 시작하기
pairplot은 데이터프레임의 수치형 변수 모든 쌍에 대한 산점도를 격자로 그립니다. 대각선에는 각 변수 자체의 분포를 보여줍니다.
# 파일: pairplot_basic.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# 기본 pairplot: 수치형 변수 4개의 모든 쌍을 그립니다sns.pairplot(penguins)plt.show()
한 줄이면 됩니다. 결과는 4×4 격자입니다. 대각선은 히스토그램, 나머지는 산점도입니다.
hue로 그룹 구분하기
hue 파라미터를 추가하면 범주형 변수에 따라 색을 다르게 칠합니다. 그룹 간 패턴 차이를 한눈에 파악할 수 있습니다.
# 파일: pairplot_hue.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# hue="species"로 종별 색상 구분sns.pairplot(penguins, hue="species", diag_kind="kde")plt.show()
diag_kind="kde"는 대각선을 히스토그램 대신 KDE 곡선으로 바꿉니다. 그룹별 분포가 부드러운 곡선으로 겹쳐 보여서 비교하기 좋습니다.
kind와 diag_kind로 차트 유형 바꾸기
# 파일: pairplot_kinds.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# kind: 비대각선 차트 유형 — "scatter"(기본), "reg", "kde", "hist"# diag_kind: 대각선 차트 유형 — "auto", "hist", "kde", Nonesns.pairplot( penguins, hue="species", kind="scatter", diag_kind="kde", plot_kws={"alpha": 0.5} # 비대각선 차트에 전달할 파라미터)plt.show()
plot_kws로 비대각선 차트에 추가 파라미터를 넘길 수 있습니다. alpha=0.5는 점의 투명도를 설정해 겹치는 데이터를 구분하기 쉽게 합니다.
corner=True로 중복 제거하기
pairplot은 기본적으로 대칭 행렬을 그립니다. 위 삼각형과 아래 삼각형이 같은 정보를 담고 있습니다. corner=True로 아래 삼각형만 그리면 화면을 절반으로 줄일 수 있습니다.
# 파일: pairplot_corner.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# corner=True: 아래 삼각형 + 대각선만 그립니다sns.pairplot( penguins, hue="species", corner=True, diag_kind="kde")plt.show()
발표 자료에서 슬라이드 공간이 부족할 때 유용합니다.
vars로 변수 선택하기
모든 수치형 변수가 아니라 일부만 선택할 수도 있습니다.
# 파일: pairplot_vars.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# 부리 길이와 부리 깊이, 몸무게만 선택sns.pairplot( penguins, hue="species", vars=["bill_length_mm", "bill_depth_mm", "body_mass_g"])plt.show()
PairGrid로 세밀하게 제어하기
pairplot이 자동으로 만들어주는 것이 마음에 들지 않을 때, PairGrid를 직접 사용합니다.
PairGrid는 위 삼각형(map_upper), 아래 삼각형(map_lower), 대각선(map_diag)에 각각 다른 차트를 지정할 수 있습니다.
# 파일: pairgrid_custom.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# PairGrid 생성g = sns.PairGrid(penguins, hue="species")# 위 삼각형: 산점도g.map_upper(sns.scatterplot, alpha=0.5)# 아래 삼각형: KDE 등고선g.map_lower(sns.kdeplot)# 대각선: 히스토그램g.map_diag(sns.histplot, kde=True)# 범례 추가g.add_legend()plt.show()
위 삼각형에는 산점도로 개별 데이터 포인트를, 아래 삼각형에는 KDE로 밀도 분포를, 대각선에는 히스토그램으로 자체 분포를 보여주는 구성입니다. 각 역할이 다르기 때문에 하나의 pairplot보다 더 많은 정보를 담을 수 있습니다.
대각선만 따로 그리기
# 파일: pairgrid_diag_only.pyimport seaborn as snsimport matplotlib.pyplot as pltpenguins = sns.load_dataset("penguins")# map_offdiag: 비대각선(상삼각+하삼각) 전체에 동일한 차트 적용g = sns.PairGrid(penguins, hue="species")g.map_offdiag(sns.scatterplot, alpha=0.4)g.map_diag(sns.kdeplot)g.add_legend()plt.show()
map_offdiag()는 위/아래 삼각형 구분 없이 비대각선 전체에 같은 차트를 적용합니다. map_upper와 map_lower를 따로 지정하는 것보다 간편합니다.
pairplot vs PairGrid 언제 쓸까
| 상황 | 권장 도구 |
|---|---|
| 탐색적 분석에서 빠르게 전체 패턴 파악 | pairplot |
| 위/아래 삼각형에 다른 차트를 쓰고 싶을 때 | PairGrid |
| 발표 자료에 삽입할 완성된 차트 | pairplot + corner=True |
| 논문이나 보고서에 맞춤 스타일이 필요할 때 | PairGrid |
민서의 정리
"pairplot 하나로 4개 변수 사이의 모든 관계를 볼 수 있다는 게 신기해요. 탐색 단계에서 패턴을 찾을 때 먼저 pairplot 한 번 실행해보고 시작하면 되겠네요."
"맞아. 데이터 분석의 첫 걸음으로 항상 pairplot부터 시작하는 분석가들도 많아. 다음엔 두 변수만 집중해서 결합 분포를 보여주는 jointplot을 볼 거야."