0Pricing
Pandas & NumPy Academy · 강의

상관 행렬 히트맵

DataFrame.corr()로 상관 행렬을 계산하고 sns.heatmap으로 색상으로 구분된 히트맵을 만듭니다.

상관 행렬 히트맵은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

상관행렬이란 무엇인가요

상관행렬은 (i, j) 위치의 항목에 i열과 j열 사이의 피어슨 상관계수가 들어 있는 정사각형 표입니다. 값의 범위는 -1(완벽한 음의 선형 상관관계)에서 +1(완벽한 양의 상관관계)까지이며, 0은 선형 관계가 없음을 의미합니다. 대각선은 항상 1입니다(변수는 자기 자신과 완벽하게 상관되기 때문입니다). 상관행렬은 모델을 만들기 전에 어떤 변수들이 함께 움직이는지 파악하는 첫 단계입니다.

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

# Compute correlation matrix for numeric columns
tips = sns.load_dataset('tips')
corr = tips[['total_bill', 'tip', 'size']].corr()
print(corr.round(2))

상관행렬 계산하기

모든 수치 열의 쌍별 피어슨 상관관계를 계산하려면 DataFrame.corr()을 호출합니다. method 매개변수는 계산할 상관관계의 종류를 제어합니다. 'pearson'(기본값, 선형), 'spearman'(순위 기반이며 이상값과 비선형 단조 관계에 강함), 또는 'kendall'을 사용할 수 있습니다. 분포가 치우친 금융 데이터나 계수 데이터에서는 Spearman이 Pearson보다 더 유용한 정보를 제공하는 경우가 많습니다.

import pandas as pd
import seaborn as sns

tips = sns.load_dataset('tips')
numeric = tips.select_dtypes(include='number')

# Pearson vs Spearman
pearson = numeric.corr(method='pearson')
spearman = numeric.corr(method='spearman')

print('Pearson:')
print(pearson.round(2))
print('\nSpearman:')
print(spearman.round(2))

sns.heatmap을 사용한 기본 히트맵

sns.heatmap(data)은 2차원 배열이나 DataFrame을 받아 색상 격자로 표시합니다. 각 셀의 색상이 해당 수치 값을 나타냅니다. 상관행렬에 적용하면 일반적으로 따뜻한 색상(빨간색)은 양의 상관관계를, 차가운 색상(파란색)은 음의 상관관계를 나타냅니다. annot=True 매개변수는 각 셀 안에 수치 값을 표시하며, 상관 히트맵을 정확하게 읽는 데 필수적입니다.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()

sns.heatmap(corr, annot=True, fmt='.2f')
plt.title('Correlation Heatmap — Tips Dataset')
plt.tight_layout()
plt.show()

알맞은 색상표 선택하기

상관행렬에는 항상 0을 중심으로 하는 발산형 색상표를 사용하십시오. 예를 들어 cmap='coolwarm', 'RdBu_r' 또는 'vlag'을 사용할 수 있습니다. 이러한 색상표는 양의 값과 음의 값에 서로 다른 색상을 사용하고, 0에는 중립적인 중간 색상을 사용합니다. 상관 데이터에 'Blues'와 같은 순차형 색상표를 사용하면 양의 상관관계와 음의 상관관계를 시각적으로 구분할 수 없으므로 피하십시오. vmin=-1, vmax=1을 설정해 색상 범위를 전체 상관관계 범위로 고정하십시오.

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()

sns.heatmap(
    corr,
    annot=True,
    fmt='.2f',
    cmap='coolwarm',
    vmin=-1,
    vmax=1,
    center=0
)
plt.title('Correlation Heatmap with Diverging Palette')
plt.tight_layout()
plt.show()

상삼각 영역 마스킹하기

상관행렬은 대칭이므로(corr[i,j] == corr[j,i]) 양쪽 절반을 모두 표시하는 것은 중복입니다. np.triu를 사용해 상삼각 마스크를 만들고, 이를 sns.heatmap의 mask=에 전달하십시오. 이렇게 하면 셀 수가 절반으로 줄어 그래프가 덜 복잡해지고 읽기 쉬워집니다. 대각선의 값(모두 1.0)도 정보가 없으므로 마스킹할 수 있습니다.

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

tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()

# Mask the upper triangle (including diagonal)
mask = np.triu(np.ones_like(corr, dtype=bool))

sns.heatmap(
    corr,
    mask=mask,
    annot=True,
    fmt='.2f',
    cmap='coolwarm',
    vmin=-1,
    vmax=1
)
plt.title('Lower-Triangle Correlation Heatmap')
plt.tight_layout()
plt.show()

주석과 셀 크기 사용자 지정하기

fmt=로 주석 형식을 제어할 수 있습니다(예: 소수점 이하 두 자리에는 '.2f'). 글꼴 크기는 annot_kws={'size': 10}으로 설정합니다. linewidths 매개변수는 셀 사이에 가는 선을 추가해 큰 행렬의 격자를 더 쉽게 읽도록 합니다. square=True를 사용하면 그림의 크기와 관계없이 셀이 정사각형이 되므로 히트맵이 깔끔하고 균형 있게 보입니다.

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

# Load a wider dataset for a more interesting heatmap
penguins = sns.load_dataset('penguins').select_dtypes('number')
corr = penguins.corr()
mask = np.triu(np.ones_like(corr, dtype=bool))

sns.heatmap(
    corr,
    mask=mask,
    annot=True,
    fmt='.2f',
    cmap='vlag',
    vmin=-1,
    vmax=1,
    linewidths=0.5,
    square=True,
    annot_kws={'size': 10}
)
plt.title('Penguins Correlation Matrix')
plt.tight_layout()
plt.show()

clustermap을 사용한 군집화

sns.clustermap()은 계층적 군집화를 사용해 행과 열의 순서를 다시 정렬하고, 상관관계 패턴이 비슷한 변수들을 함께 묶습니다. 따라서 큰 행렬에서 상관된 특성의 묶음을 훨씬 쉽게 식별할 수 있습니다. 위쪽과 왼쪽 축의 덴드로그램은 군집화 트리를 보여줍니다. 상관관계 기반 군집화에는 method='ward'와 metric='euclidean'을 합리적인 기본값으로 사용할 수 있습니다.

import seaborn as sns
import matplotlib.pyplot as plt

penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()

sns.clustermap(
    corr,
    cmap='coolwarm',
    vmin=-1,
    vmax=1,
    annot=True,
    fmt='.2f',
    figsize=(6, 6)
)
plt.suptitle('Clustered Correlation Matrix', y=1.02)
plt.show()

피벗 테이블 데이터용 히트맵

히트맵은 상관행렬에만 사용할 수 있는 것이 아닙니다. 모든 2차원 수치 표에서 색상으로 값을 표현하면 유용합니다. 일반적인 방법은 피벗 테이블을 계산한 다음(예: 날짜와 시간별 평균 팁) 이를 히트맵으로 시각화하는 것입니다. 이렇게 하면 빽빽한 숫자 표가 한눈에 살펴볼 수 있는 색상 격자로 바뀌어 최댓값과 최솟값이 시각적으로 두드러집니다.

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

tips = sns.load_dataset('tips')

# Pivot: average bill by day and time
pivot = tips.pivot_table(
    values='total_bill',
    index='day',
    columns='time',
    aggfunc='mean'
)

sns.heatmap(pivot, annot=True, fmt='.1f', cmap='YlOrRd')
plt.title('Average Bill by Day and Time')
plt.tight_layout()
plt.show()

상관관계 값 해석하기

상관관계를 해석할 때는 다음과 같은 대략적인 기준을 사용하십시오. |r| < 0.2 = 무시할 수 있는 수준, 0.2-0.4 = 약함, 0.4-0.6 = 보통, 0.6-0.8 = 강함, > 0.8 = 매우 강함입니다. 그러나 상관관계는 인과관계에 대해 아무것도 알려 주지 않으며, 제3의 교란 변수 때문에 우연히 상관되어 나타나는 허위 상관일 수도 있습니다. 수치 상관 분석은 항상 산점도와 함께 사용해 관계가 실제로 선형인지, 이상값에 의해 좌우되는 것은 아닌지 확인하십시오.

import pandas as pd
import seaborn as sns

# Find the most correlated pairs
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()

# Unstack to get pairs, remove self-correlations, sort
pairs = (corr
    .unstack()
    .reset_index()
    .rename(columns={'level_0': 'var1', 'level_1': 'var2', 0: 'r'})
    .query('var1 != var2')
    .assign(abs_r=lambda df: df['r'].abs())
    .sort_values('abs_r', ascending=False)
    .drop_duplicates(subset='abs_r')
)
print(pairs.head(6).to_string(index=False))

대규모 데이터셋 히트맵: 부분집합 사용하기

열이 많은 DataFrame에서는 전체 상관 히트맵을 읽기 어렵습니다. 더 나은 방법은 상관행렬을 필터링해 |r|이 임계값(예: 0.5)을 넘는 쌍만 표시하거나, 목표 변수와 가장 높은 상관관계를 갖는 특성만 선택하는 것입니다. 도메인별로 부분집합을 만들 수도 있습니다. 예를 들어 비즈니스 데이터셋에서 금융 지표 간 상관관계와 운영 지표 간 상관관계를 따로 그릴 수 있습니다.

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

# Show only features with |r| > 0.4 with any other feature
penguins = sns.load_dataset('penguins').select_dtypes('number').dropna()
corr = penguins.corr()

# Filter columns that have at least one high correlation (excluding diagonal)
high_corr = (corr.abs() > 0.4).any(axis=1)
filtered = corr.loc[high_corr, high_corr]
mask = np.triu(np.ones_like(filtered, dtype=bool))

sns.heatmap(filtered, mask=mask, annot=True,
            fmt='.2f', cmap='coolwarm', vmin=-1, vmax=1)
plt.title('High-Correlation Subset')
plt.tight_layout()
plt.show()

히트맵을 파일로 저장하기

히트맵은 보고서와 프레젠테이션에 자주 포함됩니다. 히트맵을 만든 후 plt.savefig('filename.png', dpi=150, bbox_inches='tight')을 호출해 저장하십시오. bbox_inches='tight' 인수는 축 레이블이 잘리는 것을 방지합니다. PDF 보고서에는 format='pdf'를 사용하십시오. sns.clustermap을 사용할 때는 반환된 객체에 그림이 저장됩니다. g = sns.clustermap(...); g.savefig('plot.png')처럼 사용합니다.

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

tips = sns.load_dataset('tips')
corr = tips.select_dtypes('number').corr()
mask = np.triu(np.ones_like(corr, dtype=bool))

fig, ax = plt.subplots(figsize=(6, 5))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
            cmap='coolwarm', vmin=-1, vmax=1,
            linewidths=0.5, ax=ax)
ax.set_title('Correlation Heatmap')

# Save to file
plt.savefig('/tmp/correlation_heatmap.png', dpi=150, bbox_inches='tight')
plt.close()
print('Saved to /tmp/correlation_heatmap.png')

빠른 확인

이 단원에서 배운 상관 히트맵에 대한 이해도를 확인하십시오.

단원 요약

이 단원에서는 DataFrame.corr()이 쌍별 상관관계를 계산하고, sns.heatmap이 발산형 색상표와 주석을 사용해 이를 색상 격자로 표시하며, 상삼각 영역을 마스킹하면 중복을 제거할 수 있다는 점을 배웠습니다. 다음으로는 새로운 데이터셋의 프로파일링을 위한 체계적인 점검 목록인 전체 탐색적 데이터 분석 파이프라인을 살펴보겠습니다.

자주 묻는 질문

“상관 행렬 히트맵” 강의는 무료인가요?

네 — “상관 행렬 히트맵” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“상관 행렬 히트맵”에서 뭘 배우나요?

DataFrame.corr()로 상관 행렬을 계산하고 sns.heatmap으로 색상으로 구분된 히트맵을 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“상관 행렬 히트맵” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 분포 그래프: histplot과 kdeplot
  2. 범주형 그래프: boxplot, barplot, violinplot
  3. 산점도와 쌍별 그래프
  4. 상관 행렬 히트맵
← Pandas & NumPy Academy(으)로 돌아가기