히트맵(heat map)은 이미지 위에 색상을 입히는 시각화 기법입니다. 값이 높거나 집중되는 영역을 표시하기에 좋습니다. 보통은 행과 열로 나뉜 2차원 공간에 값이나 빈도를 색상으로 표현하는 그래프를 말합니다. 숫자로 표현하는 것보다 색상을 통해 직관적으로 나타낼 수 있다는 것이 장점입니다.
파이썬에는 히트맵을 그릴 수 있는 다양한 시각화 패키지가 있습니다. 그중에 많이 쓰이는 2가지 패키지에 대해서 알아보고, 어떤 방법을 더 추천하는지도 알아보겠습니다.
1. seaborn 패키지 이용하기
이 방법은 두 가지 특징이 있습니다. 하나는 데이터를 표 형태로 요약해야 한다는 점입니다. 엑셀에서 히트맵을 그리려면, 표를 만들고 조건부 서식으로 색상을 입력합니다. 조건부 서식을 넣기 전까지를 작업해야 한다고 생각하면 되겠습니다.
다른 하나는 데이터에 한글이 있을 경우 한글 폰트 설정을 해야 한다는 것입니다. 이건 matplotlib패키지를 이용하는 방법에 동일하게 적용되는 내용입니다.
히트맵을 그리기 위해 코스피200데이터를 가져와 봤습니다. 아래 read_html함수를 이용하면 웹페이지에 있는 테이블 데이터를 쉽게 데이터 프레임으로 불러올 수 있습니다.
import pandas as pd
df = pd.read_html('https://stock.infoking.site/kospi200info/')[0]
다음 한글 폰트 설정을 해 줍니다.
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
fm.get_fontconfig_fonts()
font_location = '/Library/Fonts/NanumBarunGothicBold.ttf'
font_name = fm.FontProperties(fname=font_location).get_name()
plt.rc('font', family=font_name)
이제 데이터를 요약합니다. 히트맵은 X축, Y축에 2개의 범주형 데이터가 있어야 합니다. 여기에 사용할 데이터를 가공하고, pivot함수를 이용해서 원하는 형태로 변경하였습니다.
df['sale_cut'] = pd.qcut(df['매출액22년(E)'], q=10, labels=range(0,9), duplicates='drop')
df_gr = df.groupby(['업종명', 'sale_cut'])['영업이익22년(E)'].mean()
df_gr = df_gr.reset_index(drop=False)
df_gr = df_gr.pivot(index='업종명', columns='sale_cut', values='영업이익22년(E)')
이제 heatmap함수를 호출하면 아래아 같이 히트맵 그래프를 그릴 수 있습니다.
import seaborn as sns
sns.heatmap(df_gr)
위의 방법보다는 아래 plotly.express 패키지를 이용하면 더 쉽게 히트맵을 그릴 수 있습니다.
2. plotly.express 패키지 이용하기
이 패키지는 위의 두 가지 작업 모두 필요없습니다. 데이터 요약도 해주고, 한글 폰트 설정을 하지 않아도 한글이 출력됩니다. 아래와 같이 히트맵을 그릴 수 있습니다. ploty.express 설치 방법도 참고하시기 바랍니다.
import plotly.express as px
fig = px.density_heatmap(data_frame=df, x='sale_cut', y='업종명', z='영업이익22년(E)', nbinsx=10, nbinsy=10)
fig.show()
빈도를 기준으로 그리고 싶다면 z입력파라미터를 생략하면 됩니다.
fig = px.density_heatmap(data_frame=df, x='sale_cut', y='업종명', nbinsx=10, nbinsy=10)
fig.show()
오늘은 이렇게 파이썬에서 히트맵을 그리는 방법에 대해서 알아보았습니다. 필자는 두 번째 방법을 추천합니다. 더 쉽게 높은 품질의 그래프를 그릴 수 있기 때문입니다. 하지만 seaborn패키지가 익숙하다면 첫 번째 방법을 이용하는 것도 좋겠습니다.
'데이터 > 데이터 분석' 카테고리의 다른 글
파이썬 plotly 그래프 x축,y축 등 변경 update_layout은?! (0) | 2022.04.20 |
---|---|
의료 데이터 수집 및 조회 가능한 사이트 알아보기 (0) | 2022.04.05 |
파이썬 판다스 groupby 여러개 기준으로 쉽게 요약하는 방법은?! (0) | 2022.04.04 |
파이썬 판다스 데이터프레임 출력, 모든 데이터 확인하는 3가지 방법 (0) | 2022.04.03 |
판다스 데이터프레임 칼럼 이름 변경하는 5가지 방법은?! (0) | 2022.03.16 |
K-Means 클러스터링 군집 개수 정하는 방법은?! (0) | 2022.02.09 |
파이썬 numpy 기초 사용법, ndArray 이용 벡터연산하기! (0) | 2022.02.04 |
프롭테크 의미는 무엇이고, 어떤 기업들이 있나요? (0) | 2022.02.03 |