Plotly Heatmap 만들기

Author

Gabriel Yang

Heatmap은 데이터의 패턴이나 분포를 시각적으로 표현하는 데 유용한 도구입니다. 데이터의 강도나 밀도를 색상으로 나타내어, 복잡한 데이터의 관계를 직관적으로 파악할 수 있습니다.

Plotly를 사용하면 인터랙티브하고 아름다운 Heatmap을 쉽게 만들 수 있습니다. 이 블로그 글에서는 Plotly를 이용해 Heatmap을 만드는 방법과, Heatmap에 적합한 데이터 유형에 대해 설명하겠습니다.

1. Heatmap에 적합한 데이터 유형

Heatmap은 주로 다음과 같은 데이터 유형에서 유용하게 사용됩니다:

  • 행렬 데이터: 데이터가 두 개의 범주형 변수(예: 시간과 장소, 제품과 고객 등)를 기준으로 배열된 경우. 예를 들어, 매출 데이터가 월과 지역별로 배열된 경우.
  • 시계열 데이터: 시간에 따른 데이터의 변화가 두 개의 변수로 나누어져 있는 경우. 예를 들어, 월별 온도 변화가 여러 지역에서 측정된 경우.
  • 밀도 데이터: 두 개의 연속형 변수 간의 밀도 분포를 나타내는 경우. 예를 들어, 인구 밀도나 특정 행동의 빈도.

2. Plotly를 사용한 Heatmap 생성

Plotly는 Heatmap을 만들기 위한 plotly.graph_objectsplotly.express 모듈을 제공합니다. 이 두 가지 방법 모두 다양한 스타일과 옵션을 지원하여 인터랙티브한 Heatmap을 생성할 수 있습니다.

2.1. plotly.graph_objects를 사용한 Heatmap

plotly.graph_objects 모듈을 사용하면 더 세밀한 조정이 가능하며, Heatmap의 속성들을 개별적으로 설정할 수 있습니다.

기본 Heatmap

import plotly.graph_objects as go
import numpy as np

# 샘플 데이터 생성
np.random.seed(0)
z = np.random.rand(10, 10)  # 10x10 행렬 데이터 생성

# Heatmap 생성
fig = go.Figure(data=go.Heatmap(z=z, colorscale='Viridis'))

# 그래프 출력
fig.show()
  • z: Heatmap의 데이터. 이 배열의 각 값이 색상으로 매핑됩니다.
  • colorscale: 색상 스케일을 설정합니다. 'Viridis', 'Cividis', 'Blues' 등 다양한 옵션이 있습니다.

축 레이블과 색상바 추가

import plotly.graph_objects as go
import numpy as np

# 샘플 데이터 생성
np.random.seed(0)
z = np.random.rand(10, 10)
x = [f'X{i}' for i in range(10)]
y = [f'Y{i}' for i in range(10)]

# Heatmap 생성
fig = go.Figure(data=go.Heatmap(z=z, x=x, y=y, colorscale='Blues'))

# 레이아웃 업데이트
fig.update_layout(
    title='Sample Heatmap',
    xaxis_title='X Axis Label',
    yaxis_title='Y Axis Label',
)

# 그래프 출력
fig.show()
  • x: x축의 레이블을 설정합니다.
  • y: y축의 레이블을 설정합니다.
  • coloraxis_colorbar: 색상바의 제목을 설정합니다.

2.2. plotly.express를 사용한 Heatmap

plotly.express는 간단한 API를 제공하며, 데이터프레임에서 Heatmap을 쉽게 생성할 수 있습니다.

데이터프레임을 사용한 Heatmap

import plotly.graph_objects as go
import pandas as pd
import numpy as np

# 샘플 데이터프레임 생성
np.random.seed(0)
df = pd.DataFrame(np.random.rand(10, 10), columns=[f'Col{i}' for i in range(10)])

# Heatmap 데이터 준비
heatmap_data = df.values
x_labels = df.columns
y_labels = df.index

# Heatmap 생성
fig = go.Figure(data=go.Heatmap(z=heatmap_data,
                               x=x_labels,
                               y=y_labels,))

# 그래프 레이아웃 업데이트
fig.update_layout(title='Heatmap using plotly.graph_objects',
                  xaxis_title='Features',
                  yaxis_title='Samples')

# 그래프 출력
fig.show()
  • px.imshow: DataFrame 또는 2D 배열을 사용하여 Heatmap을 생성합니다.
  • color_continuous_scale: 색상 스케일을 설정합니다.

색상 스케일의 기본 개념

Plotly에서 Heatmap의 색상 스케일(colorscale)은 데이터의 값에 색상을 매핑하여 시각적으로 표현합니다.

Heatmap에서는 이 색상 스케일을 사용하여 데이터의 값을 시각적으로 인식할 수 있습니다.Plotly는 다음과 같은 색상 스케일을 지원합니다:

  • Viridis: viridis
  • Magma: magma
  • Inferno: inferno
  • Plasma: plasma
  • Cividis: cividis
  • Blues: Blues
  • Greens: Greens
  • Reds: Reds
  • YlOrBr: YlOrBr
  • YlOrRd: YlOrRd
  • Oranges: Oranges
  • Purples: Purples
  • Greys: Greys
  • Jet: Jet
  • Hot: Hot
# Heatmap 생성
fig = go.Figure(data=go.Heatmap(z=heatmap_data,
                               x=x_labels,
                               y=y_labels,
                               colorscale='Greens',
                               colorbar=dict(title='Intensity')))

# 그래프 출력
fig.show()

3. Heatmap의 활용 예시

  • 데이터 분석: 다양한 변수 간의 상관관계나 패턴을 시각적으로 분석할 때.
  • 비즈니스 인사이트: 매출, 고객 행동 등의 데이터를 시간과 지역별로 분석하여 인사이트를 도출할 때.
  • 기술적 시각화: 실험 결과, 센서 데이터 등의 밀도를 시각적으로 표현할 때.

4. 결론

Plotly를 사용하면 Heatmap을 매우 간편하게 생성하고, 다양한 데이터 유형을 시각화할 수 있습니다. plotly.graph_objectsplotly.express 모듈을 활용하여, 데이터의 패턴과 관계를 효과적으로 시각화하고 분석할 수 있습니다.

데이터의 강도나 밀도를 색상으로 표현하여, 복잡한 정보를 직관적으로 파악할 수 있게 해줍니다.