[Seaborn] heatmap mask 설정하여 계단식으로 나타내기

·2024년 12월 29일

상관관계 분석 corr()

데이터셋

teams_small.head()

위 데이터프레임에서 'team' 컬럼을 제외한 나머지 컬럼들 사이의 상관관계를 분석하려고 한다.

# 상관관계를 분석할 데이터
teams_small.iloc[:, 1:]

상관관계 corr() 결과

teams_small.iloc[:, 1:].corr()

기본 heatmap 그리기

ax = sns.heatmap(data = teams_small.iloc[:, 1:].corr(),
            cmap = 'coolwarm',
            vmin = -1, vmax = 1,
            annot = True)

mask를 이용하여 대각선 하단 부분만 남기기

mask 만들기 (1)

import numpy as np
mask = np.triu(데이터프레임)
  • np.triu()는 입력 받은 데이터 프레임의 [i][i] 대각선 포함 그 위에 있는 값에는 1, 아래에 있는 값에는 0을 채워 반환한다.
# 결과
array([[1., 1., 1., 1., 1., 1., 1.],
       [0., 1., 1., 1., 1., 1., 1.],
       [0., 0., 1., 1., 1., 1., 1.],
       [0., 0., 0., 1., 1., 1., 1.],
       [0., 0., 0., 0., 1., 1., 1.],
       [0., 0., 0., 0., 0., 1., 1.],
       [0., 0., 0., 0., 0., 0., 1.]])

위 마스크로 히트맵을 그리면 상관관계가 1인 대각선 부분도 출력에서 제외된다.

mask 만들기 (2)

상관관계가 1인 대각선 부분도 남기고 싶다면 아래 for문을 추가하면 된다.

# 대각선은 남기기
for i in range(len(mask[0])):
    mask[i][i] = 0
mask

for문으로 mask를 순회하면서 대각선의 1 값을 다시 0으로 바꿔 히트맵에 출력되도록 한다.

히트맵 그리기

ax = sns.heatmap(data = teams_small.iloc[:, 1:].corr(),
            cmap = 'coolwarm',
            vmin = -1, vmax = 1,
            mask = mask,
            annot = True)
plt.title('Correlation between index', size = 18)
ax.set_xticklabels(ax.get_xticklabels(), rotation = 45, ha = 'right')
plt.show()

profile
To Dare is To Do

0개의 댓글