매일 업데이트
2023-07-14 06:25 10 min

[Explained] Python에서 히트맵을 만드는 방법

데이터 시각화는 정보를 이해하고 활용 가능한 통찰력을 얻는 데 필수적인 방법입니다. 효과적인 시각화는 데이터를 한눈에 파악할 수 있도록 돕습니다.

데이터를 시각화하는 데 자주 사용되는 방법 중 하나가 히트맵입니다. 이 글에서는 Python에서 Matplotlib, Seaborn, Plotly 라이브러리를 사용하여 히트맵을 만드는 방법과 히트맵의 다양한 활용 사례를 살펴보겠습니다.

히트맵이란 무엇인가?

출처: seaborn.pydata.org

히트맵은 데이터를 행렬 또는 격자 형태로 표현하는 2차원 이미지입니다. 색상 음영을 사용하여 각 데이터 포인트를 나타냅니다. 어두운 색상은 밝은 색상보다 높은 값을 나타냅니다.

히트맵을 사용하면 데이터의 패턴, 추세 및 변동을 쉽게 파악할 수 있습니다. 사용자가 높은 값, 낮은 값 영역, 클러스터 또는 특이점을 빠르게 식별할 수 있도록 요약된 정보를 제공합니다.

히트맵은 어디에 활용되는가?

히트맵은 값이 공간적으로 어떻게 변화하는지를 보여주는 데 매우 유용합니다. 다음은 히트맵의 일상적인 활용 사례입니다.

날씨

가장 일반적으로 접하는 히트맵은 다양한 지역의 온도 변화를 보여주는 날씨 히트맵입니다.

예를 들어, 데일리 익스프레스는 예상 온도를 히트맵으로 표시하여 어떤 지역이 더 덥고, 추운지 또는 그 중간인지 쉽게 파악할 수 있게 해줍니다.

웹사이트/앱 사용 분석

출처: HotJar

마우스 움직임, 클릭, 스크롤 패턴을 추적하여 히트맵은 웹 페이지에서 사용자의 관심 영역과 소외된 영역을 파악하는 데 도움을 줍니다. 이러한 분석을 바탕으로 사용자 인터페이스를 개선하고 사용자 경험을 향상시킬 수 있습니다.

의료 영상

출처: researchgate.net

히트맵은 신체 활동이 높은 영역과 낮은 영역을 시각화하는 데 사용됩니다. 이를 통해 이상 징후나 질병을 감지하고 암과 같은 질병에 대한 치료 경과를 평가할 수 있습니다.

Python에서 히트맵을 생성하는 데 사용되는 라이브러리

Python은 데이터 분석과 시각화에 널리 사용되는 프로그래밍 언어입니다. 간단한 구문과 폭넓은 생태계 덕분입니다. Python에서 히트맵을 만들 때 유용하게 사용되는 라이브러리는 다음과 같습니다.

  • Matplotlib: 데이터 시각화를 위한 가장 기본적인 라이브러리입니다. 다양한 사용자 정의 옵션을 제공하지만 사용하기에 다소 복잡할 수 있습니다.
  • Seaborn: Matplotlib를 기반으로 구축된 라이브러리로, 시각적 표현을 향상시키고 일부 기능을 단순화하여 더욱 보기 좋은 시각화를 제공합니다.
  • Plotly: 히트맵을 생성하기 위한 사용자 친화적인 API를 제공하는 시각화 라이브러리입니다.

다음 섹션에서는 이러한 라이브러리를 사용하여 히트맵을 만드는 방법을 자세히 살펴보겠습니다.

히트맵 생성 방법

이 섹션에서는 Matplotlib, Seaborn, Plotly 라이브러리를 사용하여 히트맵을 생성하는 과정을 알아보겠습니다. 코딩을 위해 Google Colab을 사용합니다. Google 인프라에서 코드를 실행하는 무료 Python 노트북 환경으로, 별도의 설정 없이 실습을 따라 할 수 있습니다. 먼저 Matplotlib부터 시작해보겠습니다.

Matplotlib

먼저 Matplotlib 라이브러리를 가져옵니다.

import matplotlib.pyplot as plt

또한 임의의 데이터셋 생성을 위해 NumPy 라이브러리가 필요합니다.

import numpy as np

다음 코드를 사용하여 데이터셋을 생성합니다.

# 재현성을 위한 시드 설정
np.random.seed(2)

# 1부터 50 사이의 정수로 구성된 10x10 배열 생성
data = np.random.randint(low = 1, high = 50, size = (10, 10))

데이터를 시각화하기 위해 `imshow` 메서드를 사용합니다. 데이터 배열을 인수로 전달합니다. 추가 인수를 사용하여 히트맵을 사용자 정의할 수 있습니다.

plt.imshow(data)

위 코드를 실행하면 기본적인 히트맵이 나타납니다.

이제 몇 가지 사용자 정의 옵션을 사용하여 히트맵을 개선해 보겠습니다. `imshow` 메서드의 `cmap` 인수를 사용하면 이미지에 사용된 색상을 변경할 수 있습니다. 예를 들어, 히트맵의 색상을 파란색 계열로 변경하려면 다음 코드를 사용합니다.

plt.imshow(data, cmap = 'Blues')

`cmap` 옵션의 전체 목록은 여기에서 확인할 수 있습니다. 위의 코드를 실행한 결과는 다음과 같습니다.

색상이 나타내는 값을 설명하는 색상 막대가 있다면 히트맵이 더욱 유용해집니다. 다음 코드를 추가하여 색상 막대를 추가할 수 있습니다.

plt.colorbar()

결과는 다음과 같습니다.

색상 막대가 유용하지만, 때로는 각 셀에 정확한 값을 표시하여 시각적으로 명확하게 보여주고 싶을 수 있습니다. 이를 위해 `plt.text()` 함수를 사용하여 각 셀에 텍스트를 추가합니다.

for i in range(data.shape[0]):
   for j in range(data.shape[1]):
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment="center",
         verticalalignment="center",
      )

마지막으로, 축에 눈금 레이블을 설정하는 방법을 알아보겠습니다. x축에는 `plt.xticks` 함수를, y축에는 `plt.yticks` 함수를 사용합니다. 두 함수는 비슷한 방식으로 호출됩니다. 첫 번째 인수는 눈금을 표시할 위치 목록이고, 두 번째 인수는 눈금에 표시할 레이블 목록입니다.

다음은 눈금 레이블을 설정하는 예입니다.

x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

이것으로 Matplotlib를 사용하여 히트맵을 만드는 방법을 알아보았습니다. 아래에 전체 코드 솔루션이 나와 있습니다.

import numpy as np
import matplotlib.pyplot as plt

# 재현성을 위한 시드 설정
np.random.seed(2)

# 1부터 50 사이의 정수로 구성된 10x10 배열 생성
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# 파란색 계열 색상으로 플롯 생성
plt.imshow(data, cmap = 'Blues')

# 색상 막대 표시
plt.colorbar()

# 값 주석 추가
for i in range(data.shape[0]):
   for j in range(data.shape[1]):
      plt.text(j, i, '%d' % data[i, j],
         horizontalalignment="center",
         verticalalignment="center",
      )

# 눈금 레이블 목록 생성
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

# 눈금 레이블 추가
plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

Matplotlib가 강력한 도구이지만, Seaborn이나 Plotly와 같은 다른 라이브러리가 히트맵 생성 과정을 더욱 단순화해줍니다.

Seaborn

이번에는 Seaborn을 사용하여 이전 예제를 다시 만들어 보겠습니다. Seaborn은 Matplotlib를 기반으로 구축된 라이브러리로, 더욱 쉽게 사용할 수 있도록 추상화를 제공합니다. 먼저 필요한 라이브러리를 가져옵니다.

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

Matplotlib는 Seaborn이 의존하기 때문에 가져왔습니다. 다음으로 임의의 데이터셋 생성을 위해 NumPy를 가져옵니다. 마지막으로 Seaborn을 가져옵니다.

다음으로 NumPy를 사용하여 데이터셋을 생성합니다.

# 재현성을 위한 시드 설정
np.random.seed(2)

# 1부터 50 사이의 정수로 구성된 10x10 배열 생성
data = np.random.randint(low = 1, high = 50, size = (10, 10))

데이터셋을 생성한 후에는 눈금 레이블 목록을 만듭니다.

# 눈금 레이블
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

마지막으로 `sn` 모듈의 `heatmap` 함수를 호출하여 히트맵을 생성합니다.

hm = sn.heatmap(data = data, cmap = 'Oranges', annot = True, yticklabels = y_labels, xticklabels = x_labels)

여기서 몇 가지 인수를 전달했습니다. 각 인수의 의미는 다음과 같습니다.

  • `data`: 시각화하려는 데이터셋입니다.
  • `cmap`: 히트맵을 생성할 때 사용할 색상 구성표입니다.
  • `annot`: 각 데이터 포인트에 실제 값으로 주석을 추가할지 여부를 결정하는 부울 값입니다.
  • `yticklabels`: 세로축 눈금에 사용할 레이블 목록입니다.
  • `xticklabels`: 가로축 눈금에 사용할 레이블 목록입니다.

마지막으로, 다음 코드를 사용하여 히트맵을 표시합니다.

plt.show()

결과는 다음과 같습니다.

Plotly

Plotly를 사용하는 과정은 Seaborn과 유사합니다. Plotly에서 히트맵을 생성하는 코드는 다음과 같습니다.

import plotly.express as px
import numpy as np

# 재현성을 위한 시드 설정
np.random.seed(2)

# 1부터 50 사이의 정수로 구성된 10x10 배열 생성
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# 눈금 레이블
x_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
y_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

px.imshow(data, text_auto = True, x = x_labels, y = y_labels, color_continuous_scale="greys")

`px.imshow()` 함수를 사용하여 히트맵을 생성합니다. 데이터 배열을 첫 번째 위치 인수로 전달하고, 다음과 같은 키워드 인수를 사용할 수 있습니다.

  • `text_auto`: `True`로 설정하면 주석을 활성화하는 부울 값입니다.
  • `x`: x축 눈금 레이블 목록입니다.
  • `y`: y축 눈금 레이블 목록입니다.
  • `color_continuous_scale`: 그래프에 사용될 색상 구성표를 결정합니다.

Plotly는 Seaborn 및 Matplotlib에 비해 사용법이 간단하며, 생성된 그래프는 정적인 이미지를 생성하는 다른 라이브러리와 달리 상호작용적이라는 장점이 있습니다.

최종 결과 스크린샷은 다음과 같습니다.

마무리

이 글에서는 Python에서 히트맵을 생성하는 방법을 다루었습니다. Matplotlib, Seaborn, Plotly와 같은 주요 라이브러리를 살펴보고 Seaborn과 Plotly가 Matplotlib에 비해 히트맵 생성 과정을 어떻게 단순화하는지 알아보았습니다. 히트맵의 중요한 용도 중 하나는 웹사이트 사용자의 행동 패턴을 분석하는 것입니다.

다음으로는 웹사이트에서 사용자가 클릭하는 위치를 보여주는 히트맵 도구를 살펴보시기 바랍니다.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.