【解説】Pythonでヒートマップを作成する方法

【解説】Pythonでヒートマップを作成する方法

視覚化は、データを理解し、有益で実用的な洞察を引き出す重要な方法です。優れたビジュアルにより、読者は一目見ただけで情報の基本的な感覚を得ることができます。

データを表示するために使用される一般的なビジュアライゼーションはヒートマップです。この記事では、ヒートマップと、Matplotlib、Seaborn、Plotly を使用して Python でヒートマップを作成する方法について説明します。

ヒートマップとは何ですか?

出典: seaborn.pydata.org
ヒートマップ
ヒートマップ

ヒートマップは、データを点のマトリックスまたはグリッドとして表す 2 次元画像です。カラー プロットの陰影は各データ ポイントを表します。暗い色合いは明るい色合いよりも高い値を表します。

ヒートマップを使用すると、データのパターン、傾向、変動を簡単に特定できます。これらは、ユーザーが高い値または低い値の領域、クラスター、外れ値をすぐに確認できる要約情報を提供します。

ヒートマップはどこで使用されますか?

ヒートマップは、空間上で値がどのように変化するかを示すのに役立ちます。日常的な使用例は次のとおりです。

天気

英国の天気図-暑い天気-1101867
英国の天気図-暑い天気-1101867

ほとんどの人が見たことのある最も人気のあるヒートマップは、さまざまな場所で気温がどのように変化するかを示す文字通りのヒートマップです。

これは、予想気温をヒートマップとして示すDaily Expressの天気予報の例です。これにより、どの場所が暑くなるか、寒くなるか、またはその中間になるかを視覚化しやすくなります。

ウェブサイト/アプリの使用状況を表示する

出典: HotJar
ヒートマップ-bg_HL7rgOa
ヒートマップ-bg_HL7rgOa

ヒートマップは、マウスの動き、クリック、スクロール パターンを追跡することにより、Web ページ内で人気のある領域または無視されている領域を特定するのに役立ちます。これを使用して、ユーザー インターフェイスを最適化し、ユーザー エクスペリエンスを向上させることができます。

医療画像処理

出典: researchgate.net
医療ヒートマップ
医療ヒートマップ

ヒートマップは、体内の活動性の高い領域または低い領域を視覚化します。これにより、異常や病気を特定し、がんなどの症状の進行や治療に対する反応を評価できます。

Python でヒートマップを作成するためのライブラリ

Python は、データ分析と視覚化で人気のある言語です。これは、そのシンプルな構文と広範なエコシステムのためです。 Python でヒートマップを作成するために使用できるライブラリが複数あります。これらには次のものが含まれます。

  • Matplotlib – 人気のあるデータ視覚化ライブラリ。これは、より多くのカスタマイズ オプションを提供する低レベルのライブラリですが、複雑です。
  • Seaborn – この視覚化ライブラリは Matplotlib 上に構築されており、見栄えの良い視覚化を提供しながら一部の機能を簡素化しています。
  • Plotly – これは、Python でヒートマップを作成するための使いやすい API を提供する視覚化ライブラリです。

次のセクションでは、これらすべてのライブラリを使用してヒートマップを作成する方法を検討します。

ヒートマップを生成するには?

このセクションでは、Matplotlib、Seaborn、Plotly を使用してヒートマップを作成する方法を説明します。コーディングにはGoogle Colab を使用します。これは、Google インフラストラクチャを使用してコードを実行する、無料で使用できる Python ノートブックのインスタンスです。セットアップは不要なので、そのまま使用することもできます。まず、Matplotlib について説明します。

マットプロットリブ

まず、Matplotlib ライブラリをインポートすることから始めます。

 import matplotlib.pyplot as plt

ランダムなデータセットを生成するには NumPy も必要です。

 import numpy as np

データセットを生成するには、次のコードを追加します。

 # Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

データをプロットするには、imshow メソッドを使用します。データを引数として渡します。後で説明する追加の引数を渡すことで、さらに多くのことを行うことができます。

 plt.imshow(data)

セルを実行すると、ヒートマップが表示されるはずです。

ヒートマップ-1
ヒートマップ-1

これは素晴らしいことですが、多くのカスタマイズ オプションが利用できます。まず、imshow に渡す cmap 引数を使用して、画像で使用される色を変更できます。たとえば、ヒートマップで使用される色をさまざまな青の色合いに変更する場合は、次のようにプロットを生成します。

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

cmapオプションの完全なリストは、 ここにあります。とにかく、上記の結果は次のようになります。

ヒートマップ-2
ヒートマップ-2

色が何を表しているのかを説明するキーがあれば、ヒートマップはさらに便利になります。これを行うには、次のコードを追加します。

 plt.colorbar()

この後、次のような図が得られるはずです。

ヒートマップ-3
ヒートマップ-3

カラーバーは便利ですが、場合によっては、表示されている内容を正確に見ることができるように、さまざまな値に注釈を付けたい場合があります。これを行うには、 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) 
ヒートマップ-5
ヒートマップ-5

以上です!これが、Matplotlib でヒートマップを作成する方法です。完全なコード ソリューションについては、以下で詳しく説明します。

 import numpy as np
import matplotlib.pyplot as plt

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Creating a plot with blue as a color
plt.imshow(data, cmap = 'Blues')

# Displaying a color bar
plt.colorbar()

# Annotating values
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',
      )

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

# Adding the tick labels
plt.xticks(np.arange(len(x_labels)), labels=x_labels)
plt.yticks(np.arange(len(y_labels)), labels=y_labels)

ただし、Matplotlib を使用するのは最も簡単な解決策ではありません。次に説明するように、Seaborn や Matplotlib などの他のライブラリは、ヒートマップの構築プロセスを簡素化します。

シーボーン

このセクションでは、Seaborn を使用して前の例を再作成します。 Seaborn は、Matplotlib 上に構築されるライブラリです。作業を容易にする抽象化を提供します。ヒートマップを作成するには、使用するライブラリをインポートすることから始めます。

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

Seaborn には Matplotlib が必要なので、Matplotlib をインポートしました。次に、NumPy をインポートしてランダムなデータセットを生成する必要もあります。最後に、Seaborn をインポートする必要があります。

次に、NumPy を使用してデータセットを生成します。

 # Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

これを行った後、目盛りラベルのリストを作成します。

 # Tick labels
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 モジュールのヒートマップ関数を呼び出して実際のヒートマップを作成します。

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

ご覧のとおり、いくつかの引数を渡しました。それぞれについて説明します。

  • dataプロットしたいデータセットです
  • cmapは、ヒートマップを作成するために使用するカラースキームです。
  • annotデータポイントに実際の値の注釈を付けるかどうかを示します
  • yticklabels 、垂直軸の目盛りに必要なラベルのリストです。
  • xticklabels 、水平軸の目盛りのラベルのリストです。

最後に、コードを使用してプロットを表示します。

 plt.show()

これにより、次のヒートマップが生成されます。

ヒートマップ-6
ヒートマップ-6

計画的に

Plotly の場合、プロセスは Seaborn と似ています。 Plotly でヒートマップを作成するためのコードの概要は次のとおりです。

 import plotly.express as px
import numpy as np

# Creating a seed for reproducibility
np.random.seed(2)

# Generating 10 x 10 array of integers between 1 and 50
data = np.random.randint(low = 1, high = 50, size = (10, 10))

# Tick labels
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 よりもシンプルです。さらに、生成されるグラフは、静的画像を生成する他のライブラリと比較してインタラクティブです。

最終結果のスクリーンショットは次のとおりです。

2023-07-13-11-12-02 のスクリーンショット
2023-07-13-11-12-02 のスクリーンショット

最後の言葉

この記事では、Python でヒートマップを作成する方法について説明しました。主要なライブラリである Matplotlib、Seaborn、Plotly について説明しました。また、Seaborn と Plotly が Matplotlib 上で簡素化された抽象化をどのように提供するかについても確認しました。ヒートマップの重要な用途の 1 つは、人々が Web サイトをどのように使用しているかを追跡することです。

次に、ユーザーがどこをクリックしているかを示すヒートマップ ツールを確認してください。

「 【解説】Pythonでヒートマップを作成する方法」についてわかりやすく解説!絶対に観るべきベスト2動画

[python]ヒートマップをimshowで作る!
seabornによるきれいな図の作成【研究で使うPython #66】