• 데이터를 카테고리(범주)별로 나눠서 색상으로 표현한 행렬 • 여러 카테고리 값의 변화를 한눈에 살펴보기 좋은 시각화 도구임
sns.heatmap()
0️⃣ 패키지 & 데이터프레임 불러오기
예시가 될 데이터셋은 Kaggle에서 가져온 Flight Price Prediction 입니다.
# 패키지 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 데이터셋 불러오기
df = pd.read_csv('./Clean_Dataset.csv', encoding='cp949')
df = df.drop([df.columns[0]], axis=1)
1️⃣ sns 히트맵 그리기 :: sns.heatmap
클래스(class)가 이코노미석인 경우만 걸러서, 이 데이터셋에서 수치데이터인 칼럼들 간의 상관계수를 히트맵으로 작성할게요. 데이터프레임에 corr() 메소드를 사용해서 상관계수를 전부 도출할 수 있습니다.
히트맵 색상과 수치로 상관관계를 한눈에 파악할 수 있네요. 비행시간(duration)과 가격(price)간의 상관계수는 0.29로 약한 상관관계를 가지고 있고, 비행까지 남은일수(days_left)과 가격(price)간의 상관계수는 -0.56으로 음의 상관관계를 보여주고 있습니다.
# 이코노미석인 경우만 걸러서 데이터셋 생성
df_economy = df[df['class']=='Economy']
# 상관계수 행렬을 히트맵으로 작성
sns.heatmap(
data = df_economy.corr(numeric_only=True), # 수치칼럼 간 상관계수 도출
annot = True, # 상관계수 수치 표시
cmap='coolwarm' # 컬러맵 지정
)
2️⃣ 교차표(crosstab)로 sns 히트맵 그리기
출발도시(source_city)와 도착도시(destination_city)를 데이터셋을 나누는 범주로 놓고, 각 범주마다 평균 가격을 뽑아보겠습니다. pd.crosstab() 메소드로 교차표를 작성해서 뽑을 수 있습니다.
이 교차표를 그대로 넣어서 히트맵을 그려볼게요. 컬러맵과 수치까지 보이게 작성해서, 출발-도착도시에 따라 가격이 어떻게 다른지 한눈에 파악할 수 있습니다.
# 크로스테이블 작성: 출발도시-도착도시 간 평균가격
crosstab1 = pd.crosstab(
index = df['source_city'],
columns = df['destination_city'],
values = df['price'], aggfunc = 'mean'
)
# 그래프 스타일 및 한글출력 설정
sns.set_theme(
style = 'ticks', # 그래프 배경 지정
font = 'NanumBarunGothic', # 한글 폰트 지정
rc = {'axes.unicode_minus' : False}
)
# 히트맵 생성
heatmap1 = sns.heatmap(
data = crosstab1, # 크로스테이블을 데이터로 지정
cmap = 'Blues', cbar = True, # 컬러맵 지정 및 컬러바 표시
linecolor = 'white', linewidths = 0.5, # 테두리 색상 및 두께 지정
annot = True, fmt='.0f' # 수치 표시방식 지정
)
# x축 위에 표시하기
heatmap1.xaxis.tick_top()
# 축 범위, 축 이름, 그래프 제목 지정하기
heatmap1.set(
xlabel = '도착도시 (destination_city)',
ylabel = '출발도시 (source_city)',
)