はじめに:PythonでExcelデータを「評価」し「視覚化」する
Pythonとopenpyxlを用いてExcelレポートを自動生成する際、単に数値を並べるだけでは、そのデータが持つ本当の意味は伝わりにくいものです。特に、KPIの達成状況やパフォーマンススコアなど、「評価」を伴うデータは、視覚的な補助がなければ読み解くのに時間がかかります。
この課題を解決する強力なツールが、openpyxlの条件付き書式機能、その中でも特に**IconSetRule**クラスです。IconSetRuleを使いこなせば、データの良し悪しや傾向をアイコンで表現し、単なる数値の羅列を、直感的に理解できる「評価レポート」へと昇華させることができます。
この記事では、IconSetRuleの仕組みから具体的な実装方法までを掘り下げて解説します。
IconSetRule:データ評価ルールの定義体
openpyxlにおいて、アイコンセットによる条件付き書式はIconSetRuleクラスによって定義されます。これは、どのようなアイコンを、どのようなルールに基づいて表示するかを決定する、いわば**「データ評価の設計図」**です。
このIconSetRuleオブジェクトを生成し、ワークシートのconditional_formatting.add()メソッドで適用したい範囲を指定することで、データ評価の視覚化が実現します。
IconSetRuleを構成する主要パラメータ
IconSetRuleを定義する上で、特に重要なパラメータは以下の通りです。
icon_style: 表示するアイコンのスタイルを文字列で指定します(例:'3TrafficLights1','3Arrows')。これにより、視覚化の目的(状態評価、傾向表示など)に合わせたアイコンを選択します。type: ルールの閾値を何に基づいて決定するかを指定します。主に'percent'(パーセント)、'num'(数値)、'percentile'(パーセンタイル)が使われます。values:typeで指定した基準に基づき、アイコンを切り替える閾値をリストで指定します。
これらのパラメータを組み合わせることで、精度の高い評価ルールをプログラム上で構築できます。
実践①:パフォーマンススコアを「信号機」で評価する
最も一般的なユースケースとして、数値スコアを「良/中/不良」の3段階で評価する信号機アイコンを実装してみましょう。
Step 1: 評価対象のデータを用意する
まず、評価対象となるスコアデータを持つExcelファイルを用意します。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "PerformanceReview"
ws.append(["EmployeeID", "Score"])
scores = [("EMP001", 92), ("EMP002", 75), ("EMP003", 81),
("EMP004", 55), ("EMP005", 68), ("EMP006", 40)]
for row in scores:
ws.append(row)
wb.save("performance_scores.xlsx")
print("評価対象のデータファイルを作成しました。")Step 2: IconSetRuleで評価ルールを定義・適用する
次に、スコアが80点以上を「良(緑)」、60点以上を「中(黄)」、それ未満を「不良(赤)」とする評価ルールを定義し、適用します。
from openpyxl import load_workbook
from openpyxl.formatting.rule import IconSetRule
wb = load_workbook("performance_scores.xlsx")
ws = wb.active
# 評価ルールを定義
# 80以上(緑)、60以上(黄)、それ未満(赤)
rule = IconSetRule(
icon_style='3TrafficLights1',
type='num', # 閾値の基準を「数値」に設定
values=[0, 60, 80] # アイコンの切り替えポイント
)
# B2:B7の範囲に評価ルールを適用
ws.conditional_formatting.add('B2:B7', rule)
wb.save("performance_scores_evaluated.xlsx")
print("評価を視覚化したファイルを保存しました。")生成されたperformance_scores_evaluated.xlsxを開くと、各スコアの横に評価アイコンが表示され、誰が高いパフォーマンスで、誰が要改善なのかが一目瞭然になります。
実践②:データの増減傾向を「矢印」で視覚化する
前月比や前年比など、データの増減傾向を視覚化したい場合は、矢印アイコンが最適です。
from openpyxl import Workbook, load_workbook
from openpyxl.formatting.rule import IconSetRule
# 前月比データを作成
wb = Workbook()
ws = wb.active
ws.append(["Product", "MoM Growth (%)"])
growth_data = [("A", 5.2), ("B", -2.1), ("C", 0.5), ("D", 10.8), ("E", -8.5)]
for row in growth_data:
ws.append(row)
# 傾向評価ルールを定義
# 1以上(上昇)、-1未満(下降)、その間(横ばい)
rule = IconSetRule(
icon_style='3Arrows',
type='num',
values=[-1, 1] # 0をまたぐ設定の場合は2つの閾値で3分割する
)
ws.conditional_formatting.add('B2:B6', rule)
wb.save("growth_trends.xlsx")
print("増減傾向を視覚化したファイルを保存しました。")この例では、正の値を「上昇」、負の値を「下降」、ゼロ近辺を「横ばい」として3種類の矢印で視覚化しています。
評価ルールの詳細設計
IconSetRuleはさらに細かいカスタマイズが可能です。
- アイコンスタイルの選択:
'5Arrows'(5段階評価の矢印)や'5Rating'(5つ星評価)など、評価の粒度に合わせた多くのicon_styleが用意されています。 - 数値とパーセンタイルの使い分け:
type='percentile'を使えば、絶対値ではなく、データセット全体の中での相対的な位置(例:上位20%)に基づいてアイコンを割り当てることができます。 - アイコンのみ表示:
IconSetRuleのshowValue属性をFalseに設定すると、数値は非表示になり、アイコンのみが表示された、よりシンプルな評価シートを作成できます。
まとめ:IconSetRuleでデータに評価という「文脈」を与える
openpyxlのIconSetRuleは、単なる書式設定ツールではありません。それは、プログラムを通じてデータに「評価」という文脈を与え、その結果を視覚的に提示するための強力な機能です。
- **
IconSetRule**で評価の設計図を作成する。 - **
icon_style**で視覚化の目的(状態、傾向、評価粒度)に合ったアイコンを選ぶ。 - **
typeとvalues**でビジネスロジックに基づいた正確な評価基準を定義する。
これらのテクニックを駆使することで、あなたのPythonスクリプトは、ただのデータ処理ツールから、示唆に富んだインテリジェントなレポートジェネレータへと進化するでしょう。


コメント