AIでクロス集計表からヒートマップを作る方法

クロス集計の差を一覧しにくい場合、ヒートマップで行×列の高低を見つけられます。色を付ける前に件数か割合かを決め、segmentごとの母数・color scale・cell内数値を併記します。

AIものさし編集部

作業を始める前に、ヒートマップの色を「件数」に付けるのか「割合」に付けるのか決めます。行ごとに回答数が違うアンケートなら、件数だけを塗ると人数の多いグループが濃くなり、回答傾向の差が見えにくくなります。色だけで結論を出さず、セルの数値と母数も読める形にするのが基本です。

先に決めるのは、色で答えたい問い

ヒートマップは、縦と横のカテゴリが交わるセルの値を色で表す図です。クロス集計表の全セルを同じ面積で並べるため、「どこが高いか」「どの組み合わせで差があるか」を探す入口になります。ただし、色の意味は元にした数値で変わります。

たとえば「地域ごとの回答数」を比べるなら件数を見ます。「地域ごとに、満足度の構成がどう違うか」を比べるなら、地域の回答数を分母にした行割合が候補です。「各満足度の回答者がどの地域に多いか」を知りたいなら、満足度ごとの列割合が合います。どの割合を使ったかは、図のタイトルや軸ラベルに必ず書いてください。

表は横にスクロールできます

知りたいこと色にする値分母読み方
どのセルに回答が集まったか件数なし人数・件数が多いセルほど濃い
地域ごとの満足度の構成行割合同じ地域の回答数各行の割合を横に比べる
満足度別の地域構成列割合同じ満足度の回答数各列の割合を縦に比べる
全回答に占める構成全体割合全回答数全セルを全体の中で比べる

「割合」とだけ表示すると分母が分かりません。図には「地域内の回答割合」のように書き、脚注に「各行の合計を100%として計算」と添えると、あとから見た人も読み違えにくくなります。

元データから色を付けるまで

クロス集計表を受け取ったら、まず図にする前の表を整えます。行に置く項目、列に置く項目、セルに入れる値を決め、空欄・不明・対象外の扱いを分けます。「回答なし」を0件として扱うか、データが記録されていない欠損として扱うかは別の判断です。欠損を0に置き換えると、実際には確認されていない場所が「回答がなかった」と読めることがあります。

表を作る順番は次の通りです。

  1. 問いを一文にする。 例:「地域ごとに満足度の構成が違うかを見る」。問いが決まらなければ、件数・行割合・列割合のどれを選ぶかも決まりません。

  2. 縦軸と横軸を決める。 片方を地域、もう片方を満足度にするなど、比較するカテゴリを固定します。どちらを行・列に置くかで割合の分母が変わるため、ラベルとセットで決めます。

  3. 集計値を作る。 元データの件数とクロス集計の行・列合計が一致するか確認します。フィルター条件や重複レコードがある場合は、集計対象も記録します。

  4. 目的に合う分母で正規化する。 行ごとの違いを見たいなら行合計、列ごとの違いなら列合計で割ります。割合にした後も、元の件数は捨てずに別表または注記として残します。

  5. 色の範囲を決める。 比較する図が複数ある場合は、同じ色が同じ値を表すよう共通の範囲を使います。一枚の図だけを読むときはその図の分布を見やすくする設定もありますが、図ごとに範囲が変わると色の濃さを直接比較できません。

  6. 数値と母数を見える場所に置く。 セル内に件数または割合を表示し、各行・各列のn数を添えます。色だけに頼らず、色の凡例、単位、小数点の桁も記載します。

  7. 元表と照合する。 濃いセルと薄いセルをいくつか選び、表示値が元の集計表や計算式と一致するか検算します。

小さな例で、件数と割合の違いを見る

以下は説明用に作った架空の数値です。実際の調査結果ではありません。3地域で満足度を尋ね、地域ごとに回答数が異なる場面を考えます。

表は横にスクロールできます

地域とても満足満足どちらでもない不満合計n
A地域40302010100
B地域864220
C地域241812660

件数のヒートマップでは、A地域が多くのセルで濃く見えます。しかし、この例では各地域の内訳比率が同じです。A地域は100人、B地域は20人、C地域は60人から回答を集めたため、人数の差が色に出ているだけです。「A地域の方が満足度が高い」とは読めません。

地域内の割合に直すと、どの地域も「とても満足40%、満足30%、どちらでもない20%、不満10%」です。これなら、地域ごとの回答構成が同じだと分かります。一方、A地域の回答数がB地域より多いことを伝えたいなら、件数の表や母数を併記します。割合だけの図にすると、回答規模の差が見えなくなるためです。

手元の表で計算するときは、たとえば「満足」の行割合なら、満足の人数をその地域の回答数で割り、100を掛けます。A地域は30÷100×100で30%、B地域は6÷20×100で30%です。分母を地域の回答数以外に変えると別の問いへの答えになります。数値が合わない場合は、図の配色を調整する前に分母と対象レコードを確認してください。

この例のように割合がすべて同じなら、地域差を強調するヒートマップの価値は限られます。色付きの表より、比率とn数を並べた表の方が正確に伝わることもあります。図を作ること自体が目的にならないよう、まず比較したい差があるかを見ます。

AIに頼むときは、計算と解釈を分ける

AIへクロス集計の図を依頼する場合、表だけを渡して「ヒートマップにして」と頼むと、行割合と列割合を取り違えたり、欠損値の意味を補ってしまったりすることがあります。入力に含めるのは、集計表、行と列の意味、色にしたい値、割合なら分母、欠損値の扱い、比較対象の図があるかどうかです。

依頼文は次のように組み立てられます。

次のクロス集計表をヒートマップにする前に、数値の定義を確認してください。行は地域、列は満足度、各セルは回答件数です。地域内の回答構成を比べたいので、各行の合計を分母にした割合も計算してください。欠損は0件と同一視せず、不明として残してください。まず件数表と割合表を出し、各行の合計が件数表と一致するか、割合が概ね100%になるかを検算してください。図を作る場合は、セル内に割合と母数を表示し、色の凡例・単位・分母を記載してください。元表にない意味や因果関係は推測しないでください。

出力を受け取ったら、AIの説明より先に表を確認します。行割合なら各行の合計が100%付近になるか、丸め誤差がどの程度かを見ます。列割合なら列ごとに確認します。ゼロ除算がある行、回答数が0のカテゴリ、欠損を含む行は、100%にならない場合があります。その理由を説明できないまま、見た目だけ整えて公開しないでください。

Pythonのpandasを使う場合、crosstabはカテゴリ同士の件数表を作り、normalize="index"などで割合を計算できます。割合の表を作っても、元データの件数表を別に保持する方が、母数確認や数値表示をしやすくなります。ライブラリのコードをAIに書かせるときは、列名、欠損の扱い、使用環境を先に伝え、実行後に行・列合計を自分の表と照合します。

色の範囲と表示で誤解を減らす

色が濃いことは、そのセルの数値が色の尺度上で大きいという意味です。重要度、良し悪し、原因であることを自動的に示すわけではありません。たとえば「不満」の割合が高いセルに濃い色を付けても、その結果だけで地域の評価や施策の効果を断定することはできません。

一つのレポートで複数の図を見比べるなら、同じ色が同じ範囲の値を表すように揃えます。割合を0〜100%で比較する図なら、その範囲を共通にする方法が考えられます。各図が別々に最小値・最大値へ合わせて色を伸ばすと、数値差が小さい図でも強い色差が出て、変化が大きいように見えることがあります。逆に、極端な値が一つあるために大半の色が似通う場合は、範囲を変える前に外れ値の理由を確認し、変更した範囲を注記します。

高低の順序がある件数や割合には、明るさが一方向に変わる色の並びが読みやすいことがあります。基準値より上・下の差を示す場合は、中心となる値を明示した色分けを検討します。どの配色でも、色覚に依存しすぎないようセルの数値、凡例、十分なコントラストを残します。グラフを白黒で見ても主要な数字を追えるか、色だけを隠して確認するのも簡単なチェックです。

カテゴリの順番も色の印象を変えます。満足度を「不満→中立→満足」の順に並べるのか、回答数の多い順に並べるのかは、図を見る目的によって決めます。毎回の図で並び順が違うと比較が難しくなるため、複数図では軸順を揃えます。空のセル、欠損、0件を同じ色に塗るのも避けます。値が0なのか、回答が存在しないのか、計算対象外なのかを凡例や注記で区別してください。

つまずきやすい点と確認方法

表は横にスクロールできます

症状起きやすい原因次に確認すること
人数が多いグループだけ濃い件数を塗ったまま、傾向比較をしている行・列どちらを分母にするか決める
図ごとに同じ色の意味が違う自動スケールが各図で別々に設定されている比較図の色範囲を統一し凡例を確認
0と欠損が同じ表示になる欠損値を0へ置換した、または空欄表示元データ上の意味を確認して別表示にする
目立つセルのn数が極端に小さい少数回答が割合の色を強くしているn数を表示し、結論を保留して追加確認
行・列の合計が元表と合わないfilter、重複、カテゴリ漏れ、集計単位の違い対象件数とカテゴリを元データから再集計
色は強いのに違いが判断できない凡例、単位、分母、並び順がないタイトル・軸ラベル・凡例・数値を追加

特に少数の回答から出た極端な割合は、色が目立つほど過信しやすくなります。n数が小さいときの具体的な扱いに、全データへ通用する一律の境界値はありません。調査設計や意思決定の影響に応じて、分析前に「この人数未満は個別解釈をしない」などのルールを決めておきます。後から目立つ結果だけに都合よく基準を変えるのは避けます。

公開・共有の前に行う最終確認

ヒートマップを報告書や記事へ載せる前に、図だけでなく元表も一緒に確認します。

  • 何を1件として数えたか。回答者、回答、取引など集計単位が説明できるか

  • 行と列は何を示し、カテゴリ順に意図があるか

  • 色は件数、行割合、列割合、全体割合のどれか

  • 割合の分母と対象件数が読者に分かるか

  • 欠損、0件、対象外が区別されているか

  • 共通スケールを使うべき複数図で、範囲が揃っているか

  • セル内数値、凡例、単位、n数が読めるか

  • 濃い色を重要度や因果と誤読させる説明になっていないか

  • 目立つセルを元表へ戻って再計算できるか

一つでも答えられない項目があれば、その図から意思決定を急がず、集計表の定義に戻ります。とくに、行・列の合計が想定とずれる、欠損の解釈が不明、同一レポート内の色尺度がばらばらという状態では、まず集計条件と表示設定を直してください。読者が図を見ただけで「色が濃いから重要」と結論を出さないよう、タイトルに比較の問い、注記に分母と母数、本文に読み方を置くと誤解が減ります。

読み終えたら、まず一枚で検算する

手元のクロス集計表から一枚作るなら、最初は一つの問いに絞ります。例として「地域ごとの回答構成を見る」と決めたら、行を地域、列を回答区分とし、行割合とn数を準備します。元の件数表を残したまま色付きの図を作り、各行が100%付近になるか、母数が極端に小さい行がないかを確認します。図のタイトルに「地域内の回答割合」と明記すれば、共有後も何を色にした図なのか追えます。

違いが見つかったら、まず元データの件数とカテゴリを確認し、次に割合の分母、最後に欠損・小さい母数・共通色範囲を点検します。その後で初めて、差が実務上重要かを考えます。ヒートマップは見たい差を探すための画面であり、差の理由を証明するものではありません。検算できないセルや母数の小さいセルは、結論ではなく「追加で確認する場所」として扱うのが安全です。

AIものさしの判断は、集計の定義→件数表→目的に合う割合→共通の色範囲→セル値と母数→元表への照合の順です。まず自分の表から2、3セルを選び、式と表示値が一致するか確かめてください。色を整えるのはその後で十分です。

引用・データ出典

公式情報を編集部が見た内容です。Hands-on未実施の記述は本文かここに分けています。

確認日:2026-10-09

OpenAI Help:Extracting Insights with ChatGPT Data Analysis(新しいタブで開く)

pandas:crosstab(新しいタブで開く)

Matplotlib:Annotated heatmap(新しいタブで開く)

次に読む・使う

この記事の次に必要な情報へ進めます。