はじめに:PythonでExcelに「ヒートマップ」を実装する
Pythonとopenpyxlを使ってExcelファイルにデータを書き出した後、「このデータの傾向を、もっと視覚的に分かりやすく表現できないか?」と考えたことはありませんか?その最も効果的な答えの一つがヒートマップです。
ヒートマップとは、数値の大小を色の濃淡やグラデーションで表現する可視化手法です。Excelでは「カラースケール」という名前の条件付き書式がこれに該当します。
この記事では、openpyxlの条件付き書式機能、特にColorScaleRuleクラスに焦点を当て、Pythonコードだけで見やすいヒートマップをExcelシート上に作成する方法を徹底的に解説します。
ColorScaleRule:openpyxlにおけるヒートマップの設計図
openpyxlでヒートマップ(カラースケール)を作成するには、openpyxl.formatting.ruleモジュールにあるColorScaleRuleクラスを使用します。これが、どのようなルールでセルに色を付けるかを定義する、まさにヒートマップの設計図となります。
この設計図を、シートオブジェクトのconditional_formatting.add()メソッドを使って、適用したいセルの範囲(レンジ)に登録することで、ヒートマップが完成します。
構成要素:ColorScaleRuleの主な引数
ColorScaleRuleを構成する主な引数は以下の通りです。
start_type,mid_type,end_type: グラデーションの各ポイント(開始、中間、終了)が何に基づくかを指定します(例:'min','max','percentile')。start_color,mid_color,end_color: 各ポイントの色をopenpyxl.styles.Colorオブジェクトで指定します。mid_value:mid_typeに'percentile'や'num'などを指定した場合の具体的な値を設定します。
これらの要素を組み合わせることで、単純な2色ヒートマップから、中間色を含む複雑な3色ヒートマップまで自由に作成できます。
実践①:シンプルな2色ヒートマップの作成
まずは基本として、最小値を薄い色、最大値を濃い色で表現する2色のヒートマップを作成してみましょう。
Step 1: ヒートマップを適用するデータを用意
最初に、openpyxlでダミーの数値データを持つExcelファイルを作成します。
from openpyxl import Workbook
import random
wb = Workbook()
ws = wb.active
ws.title = "HeatmapDemo"
# ヘッダーを追加
ws.append(["月", "東京", "大阪", "名古屋"])
# 12ヶ月分のダミーデータを生成
for month in range(1, 13):
ws.append([
f"{month}月",
random.randint(100, 500),
random.randint(80, 450),
random.randint(90, 480)
])
wb.save("branch_sales.xlsx")
print("ヒートマップ適用前のデータファイルを作成しました。")Step 2: ColorScaleRuleで2色ヒートマップを適用
次に、生成したファイルのデータ範囲(B2からD13)に、白から青へのシンプルなヒートマップを適用します。
from openpyxl import load_workbook
from openpyxl.formatting.rule import ColorScaleRule
from openpyxl.styles import Color
wb = load_workbook("branch_sales.xlsx")
ws = wb.active
# 最小値(min)を白、最大値(max)を青とする2色ルールを作成
rule = ColorScaleRule(
start_type='min', start_color=Color('FFEEF5FF'), # Light Blue
end_type='max', end_color=Color('FF002060') # Dark Blue
)
# B2:D13の範囲にルールを追加
ws.conditional_formatting.add('B2:D13', rule)
wb.save("branch_sales_heatmap_2color.xlsx")
print("2色ヒートマップを適用したファイルを保存しました。")作成されたファイルを開くと、売上数値が低いセルは薄い青、高いセルは濃い青で着色され、一目で各支店の売上傾向が把握できるはずです。
実践②:標準的な3色ヒートマップ(赤-黄-緑)の作成
より一般的に使われる、低値を赤、中間値を黄、高値を緑で示す3色のヒートマップも作成してみましょう。
from openpyxl import load_workbook
from openpyxl.formatting.rule import ColorScaleRule
from openpyxl.styles import Color
wb = load_workbook("branch_sales.xlsx")
ws = wb.active
# 最小値(min)/50パーセンタイル(percentile)/最大値(max)の3色ルール
rule = ColorScaleRule(
start_type='min', start_color=Color('FFF8696B'), # Red
mid_type='percentile', mid_value=50, mid_color=Color('FFFFEB84'), # Yellow
end_type='max', end_color=Color('FF63BE7B') # Green
)
ws.conditional_formatting.add('B2:D13', rule)
wb.save("branch_sales_heatmap_3color.xlsx")
print("3色ヒートマップを適用したファイルを保存しました。")このルールを適用すると、いわゆる「信号機カラー」のヒートマップが完成し、要注意な低い数値(赤)と好調な数値(緑)がより明確になります。
ヒートマップをカスタマイズする
ColorScaleRuleの引数を調整することで、ヒートマップの挙動を細かく制御できます。
- 中間点の変更:
mid_type='percentile', mid_value=50をmid_type='num', mid_value=250のように変更すれば、「50パーセンタイル(中央値)」ではなく「数値の250」を中間点にすることができます。 - 色の変更:
ColorオブジェクトにAARRGGBB形式の16進数コードを渡せば、コーポレートカラーなど、好きな色でヒートマップを作成できます。
まとめ:ColorScaleRuleでデータに生命を吹き込む
今回は、openpyxlの条件付き書式、特にColorScaleRuleを使ってExcel上にヒートマップを作成する方法を解説しました。
- ヒートマップは**
ColorScaleRule**クラスでルールを定義する。 - **
conditional_formatting.add()**でシートの特定範囲にルールを適用する。 - 2色または3色のスケールを、
start/mid/endの各引数で柔軟に設定できる。
openpyxlを使えば、単にデータをExcelに流し込むだけでなく、ヒートマップという強力な可視化手法をプログラムで適用できます。これにより、あなたの自動化スクリプトが生成するレポートは、単なるデータの集合から、インサイトを語りかける「生きた資料」へと進化するでしょう。


コメント