페이지 불러오는 중
2차원 표(행 x 열)의 값을 색 농도로 표현합니다.
heatmap: 넘겨준 2D 데이터를 그대로 색칠. annot으로 숫자 표기, cmap으로 색 체계, center/vmin/vmax로 색 스케일 통제.df.corr() + 위삼각 마스크가 관용구.clustermap: 행·열을 계층적 군집으로 재배열하고 덴드로그램을 붙임. "비슷한 것끼리 모아서" 패턴을 드러냄.
heatmap은 axes-level, clustermap은 자체 Figure를 만드는 figure-level입니다.import seaborn as sns
import numpy as np
sns.set_theme()
penguins = sns.load_dataset("penguins")heatmap 기본import pandas as pd
flights = sns.load_dataset("flights").pivot(index="month", columns="year", values="passengers")
sns.heatmap(flights)
sns.heatmap(flights, annot=True, fmt="d") # 각 칸에 정수 표기
sns.heatmap(flights, cmap="YlGnBu", linewidths=.5) # 색 체계 + 칸 구분선
sns.heatmap(flights, robust=True) # 이상치에 강한 색 범위 (2~98 분위)그림에서 보이는 것: 항공 승객 수 히트맵에서 위에서 아래(월), 왼쪽에서 오른쪽(연도)으로 갈수록 색이 진해지며, 매년 7~8월 행이 특히 진해 여름 성수기와 연간 증가 추세가 동시에 보입니다.
💡 이럴 때: 두 개 이상의 히트맵을 나란히 놓고 비교하려면 반드시
vmin/vmax를 같은 값으로 고정합니다. 안 그러면 각자 자동 스케일이라 색이 달라도 값이 같을 수 있습니다.
corr = penguins.corr(numeric_only=True)
mask = np.triu(np.ones_like(corr, dtype=bool)) # 위삼각 마스크 (대각선 포함)
sns.heatmap(
corr,
mask=mask,
cmap="coolwarm", # 발산: 음의 상관=파랑, 양의 상관=빨강
center=0, # 상관 0을 흰색에 고정
vmin=-1, vmax=1,
annot=True, fmt=".2f",
square=True, linewidths=.5,
)포인트:
np.triu). 대각선(항상 1.0)도 보통 가립니다.center=0을 씁니다. 상관은 부호가 의미를 가지므로 0을 기준으로 색이 갈려야 합니다.vmin=-1, vmax=1로 고정해 다른 데이터셋과 비교 가능하게 합니다.numeric_only=True로 문자열 열을 자동 제외(pandas 2.0+).
그림에서 보이는 것: body_mass_g와 flipper_length_mm가 진한 빨강(강한 양의 상관 ≈ 0.87), bill_depth_mm와 flipper_length_mm가 파랑(음의 상관 ≈ -0.58)으로 나타납니다.💡 이럴 때: 상관 히트맵에서 진한 칸(|r| 큰 쌍)을 찾은 뒤, 그 두 변수만 5장의
jointplot/regplot으로 다시 봅니다. 상관계수는 선형 관계만 잡으므로 곡선 관계는 산점도로 확인해야 합니다.
clustermap — 군집 재배열 + 덴드로그램sns.clustermap(
penguins.select_dtypes("number").dropna(),
z_score=1, # 열 단위 표준화 (스케일 차이 제거)
cmap="vlag", center=0,
figsize=(8, 8),
)
sns.clustermap(corr, cmap="coolwarm", center=0, annot=True)동작:
ClusterGrid. g.dendrogram_row.reordered_ind로 재배열 순서를 얻습니다.
그림에서 보이는 것: 표준화한 펭귄 측정치 clustermap에서 행(개체)들이 크게 두 덩어리로 갈리고, 한 덩어리는 flipper_length·body_mass가 높은(밝은) 열 패턴을, 다른 덩어리는 반대 패턴을 보여 사실상 Gentoo와 나머지 종의 분리에 대응합니다.💡 이럴 때: 변수 스케일이 제각각(mm, g)이면
z_score=1(또는0) 없이 clustermap을 돌리면 큰 값 열이 색을 독점합니다. 표준화가 사실상 필수입니다.
💡 이럴 때: row_colors에 알고 있는 그룹 라벨(예: 실제 종)을 넣으면, 군집 결과가 그 라벨과 얼마나 일치하는지 색 띠로 즉시 검증됩니다.
clustermap으로 구조를 먼저 봅니다.mask로 가리거나 annot으로 표시해 "0"과 "없음"을 구분합니다.
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.