IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

グーグルのクラウドを支えるテクノロジー

CTC 教育サービス

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes 

第219回 マルチエージェントによるデータ可視化システム(パート2) (中井悦司) 2026年4月14日公開

はじめに

 前回に続いて、2025年に公開された論文「CoDA: Agentic Systems for Collaborative Data Visualization」を紹介していきます。今回は、CoDAを構成するサブエージェントの具体的な出力例を紹介します。

CoDA の再実装例

 前回の記事では、CoDAを構成する8種類のサブエージェントの概要を紹介しました。冒頭の論文では、このシステムで出力したコードの実例が紹介されていますが、それぞれのサブエージェントの具体的な出力例は掲載されていません。一方、それぞれのサブエージェントに与える具体的なプロンプトが掲載されており、ここから各サブエージェントの出力データのフォーマットが読み取れます。そこで、論文に掲載されているものとほぼ同じプロンプトを利用して、CoDAを再実装したシステムを用意して、実際の出力例を作成してみました。具体的な実装コードは、下記のノートブックから参照できます。

 ここでは、ADK(Agent Development Kit)を用いてマルチエージェントシステムを実装していますが、簡単のために、論文に記載のアーキテクチャーとは次の点で異なる実装になっています。

  • 「Search Agent」は省略する。
  • 「Debug Agent」は省略して、コードの実行エラーの修正は「Code Generator」自身に行わせる。
  • サブエージェント間で受け渡すデータは細かく制御せずに、前段のサブエージェントの出力をまとめて受け渡す。

 また、各サブエージェントが利用するLLMは、論文内では、Gemini 2.5 Proを利用していますが、この実装では、Gemini 3 Pro (Preview)を使用しています。

サブエージェントの出力例

 論文に記載のプロンプトには、それぞれのサブエージェントに対する出力内容をJSON形式で指定する指示が含まれています。上記の再実装コードでは、output_schemaオプションで出力形式を指定することで、同等の出力内容を指定しています。ここでは、具体例として、論文内でも利用しているベンチマーク MatplotBench の1つ(ID 76)を利用して、主要なサブエージェントの出力例を紹介します。具体的な出力例を見ることで、それぞれのサブエージェントの役割がよくわかります。
 まず、ユーザーの指示は次のようになります。(英語の指示文を日本語に翻訳して、短くまとめています。)

’data.csv’のデータから米国の婦人服売上高を可視化するPythonスクリプトを作成してください。上部に主要な統計値(最小値、四分位数、中央値、最大値)をラベル付けした軸なしのボックスプロット、下部に詳細なヒストグラムを配置した垂直2段構成にします。第1・第3四分位数には両グラフを隙間なく貫く赤い破線を引き、プロット間を密着させてください。

 また、最終的な出力画像は、図1になります。

fig01

図1 再実装版のCoDAによる出力例(左:正解例、右:CoDAによる出力)

 はじめに、Query Analyzerの出力は次のようになります。(英語で記載されたJSON形式のデータを日本語に翻訳して見やすく整形しています。そのほかのサブエージェントの出力例も同様です。)

【意図の解釈】
ユーザーは「data.csv」ファイルの「Woman’s millions of dollars(女性向け小売売上高)」の分布を表示するため、垂直に積み上げられた2部構成の可視化を作成することを求めています。上部は統計的な注釈が付いた軸表示のないボックスプロット、下部は詳細なヒストグラムで構成されます。重要な要件として、四分位数の位置に両方のプロットをシームレスに繋ぐ赤い垂直の破線を引き、これらの統計的尺度を強調する必要があります。


【可視化タイプ】
複合プロット(ボックスプロットおよびヒストグラム)


【プロットの重要事項】

  • 2つのサブプロットを垂直に積み上げたグラフを作成する。
  • 上段のサブプロットはボックスプロットとする。
  • 下段のサブプロットはヒストグラムとする。
  • 両方のプロットで「Woman’s millions of dollars」列のデータを可視化する。
  • ボックスプロットは、軸(枠線、目盛り、ラベル)を一切表示しない。
  • ボックスプロットの幅はデフォルトよりも狭く設定する。
  • ボックスプロットの直上に、最小値、第1四分位数(Q1)、中央値、第3四分位数(Q3)、最大値の数値をテキストラベルとして追加する。
  • ヒストグラムには軸を表示する。
  • ヒストグラムのビンサイズを小さくし、詳細な分布を表示する。
  • 下位および上位の四分位数の値に、2本の連続した赤い垂直破線を描く。
  • これらの四分位線は、ボックスプロットとヒストグラムの間で途切れることなくシームレスに延びている必要がある。
  • 線の連続性を確保するため、2つのサブプロット間の垂直方向の間隔(hspace)をゼロにしたタイトなレイアウトにする。
  • 両方のプロットのX軸は共有し、位置を整列させる。

【実施プラン】
ステップ1:データの読み込みと準備
詳細:data.csvをpandas DataFrameに読み込む。「Woman’s millions of dollars」列を抽出し、最小値、Q1(25パーセンタイル)、中央値(50パーセンタイル)、Q3(75パーセンタイル)、最大値の統計量を算出する。
使用関数:pd.read_csv, df.describe, series.quantile


ステップ2:図とサブプロットの設定
詳細:垂直に積み重なった2つのサブプロット(2行1列)を持つMatplotlibの図を作成する。X軸を共有させ、垂直方向の間隔(hspace)を0に設定する。
使用関数:plt.subplots(2, 1, sharex=True, gridspec_kw={’hspace’: 0})


ステップ3:ボックスプロットの作成
詳細:上段のサブプロット(ax[0])に横向きのボックスプロットを作成する。幅を狭く設定し、このサブプロットのすべての軸、枠線、目盛りを非表示にする。
使用関数:ax.boxplot, ax.spines, ax.tick_params


ステップ4:統計注釈の追加
詳細:上段のサブプロットに、事前に計算した最小、Q1、中央、Q3、最大値のテキスト注釈を追加する。分かりやすくするため、ボックスプロットの適切な上部位置に配置する。
使用関数:ax.text


ステップ5:ヒストグラムの作成
詳細:下段のサブプロット(ax[1])にデータのヒストグラムを作成する。きめ細かな分布を示すため、ビン数を多め(例:50)に設定する。
使用関数:ax.hist


ステップ6:四分位線の描画
詳細:両方のサブプロットにおいて、Q1とQ3の値の位置に赤い垂直破線を描く。
使用関数:ax.axvline


ステップ7:仕上げとスタイリング
詳細:図全体のタイトルを設定し、ヒストグラムのX軸ラベルを設定する。レイアウトを調整して各要素を綺麗に収め、ファイルに保存する。
使用関数:fig.suptitle, ax.set_xlabel, plt.tight_layout, plt.savefig


【全体のToDoリスト】
todo_1: 対象列が数値であることを確認し、主要な統計量(最小、Q1、中央、Q3、最大)を計算する。
todo_2: X軸を共有した上下2段の複合プロットとしての可視化マッピングを定義する。
todo_3: 軸なしボックスプロット、四分位用の赤い破線、隙間ゼロのレイアウト、統計ラベル配置などの詳細デザインを指定する。
todo_4: Matplotlibを使用してPythonコードを生成し、各プロットの描画とスタイリングを適用する。
todo_5: 最終的な可視化結果を評価し、軸の有無、線の連続性、ラベルの正確性を確認する。


【成功基準】

  • 出力が1つのPNG画像であること。
  • 画像内のボックスプロットがヒストグラムの真上に隙間なく積み重なっていること。
  • データ分布が正しく表現されていること。
  • 第1および第3四分位数を示す2本の赤い連続破線が、両方のプロットを貫いて表示されていること。
  • 上部のボックスプロットに軸がなく、下部のヒストグラムには軸があること。
  • 最小、Q1、中央、Q3、最大値の数値ラベルがボックスプロットの上に明確に表示されていること。
  • 全体的に構成が整っており、解釈が容易であること。

 ユーザーの指示文を解釈した上で、ユーザーが意図するグラフを作成するための考慮点やハイレベルな作業手順がまとめられています。次に、Data Processorの出力は、次のようになります。

【処理ステップ】

  1. 「data.csv」ファイルをpandasのDataFrameに読み込みます。
  2. 可視化のために「Woman’s millions of dollars」列を抽出します。このデータはすでに適切な数値形式になっているため、そのまま処理可能です。

【インサイト】

  • 主要な列:Woman’s millions of dollars
  • 必要な集計:なし
  • 品質上の問題:なし

【可視化のヒント】
単一の数値変数である「Woman’s millions of dollars」の分布を可視化するには、ボックスプロット(箱ひげ図)とヒストグラムを組み合わせた複合プロットが非常に適しています。これにより、要約統計量と度数分布の両方を効果的に表示できます。

 Data Processorは、実際にデータ処理を行うわけではなく、データの主要な統計値から、グラフの描画に必要な列や集計方法を提案する点に注意してください。この例では、「Woman’s millions of dollars」列のデータのみを使用するので、シンプルな出力になっています。ここまでが、「理解(Understanding)」のフェーズの処理になります。
 続いて、VizMapping Agentは、これらの情報に基づいて、より具体的なグラフの描画方法を提案します。具体的な出力例は、次のようになります。

【グラフの種類】
ヒストグラム(ボックスプロットとの複合)


【データマッピング】

  • X軸:Woman’s millions of dollars
  • Y軸、色、サイズ、カテゴリ:指定なし

【スタイルのヒント】

  • タイトル:Distribution of Women’s Clothing Retail Sales in U.S.
  • X軸ラベル:Woman’s millions of dollars
  • Y軸ラベル:Frequency(度数)
  • カラーパレット:四分位数に赤い破線を使用

【データ変換・処理】

  • 対象データの記述統計量(最小値、第1四分位数、中央値、第3四分位数、最大値)を算出する。
  • X軸を共有し、垂直に積み重なった2つのサブプロット(上がボックスプロット、下がヒストグラム)を作成する。
  • 垂直方向の間隔(hspace)を0に設定し、プロットを密着させる。
  • 第1四分位数(Q1)と第3四分位数(Q3)の位置に、上下のプロットを貫通する赤い垂直の破線を描画する。

【目的】
同期したボックスプロットとヒストグラムを組み合わせて使用することで、統計的な要約と度数密度の両面からデータの分布を可視化する。


【根拠】
複合プロットを採用することで、ヒストグラムが持つ詳細な分布形状の情報と、ボックスプロットが持つ堅牢な統計的要約を統合できる。共通のX軸と四分位を繋ぐ線を用いることで、統計的指標と実際のデータ密度を直接対比させることが可能になる。


【信頼度】
1.0

 この段階では、使用するデータとそれを表示するグラフの関係が端的にまとめられており、数学的な観点でグラフを描くのに必要十分な情報がまとめられています。ただし、実際にグラフを描く際は、数学的な正確性に加えて、見た目のわかりやすさも大切です。Design Explorerは、次のように、見た目(デザイン)に関する細かな条件をまとめます。

【デザイン目標】

  • 女性向け小売売上データの度数分布を明確に可視化する。
  • 分布と正確に一致した統計的ベンチマーク(四分位数、最小/最大、中央値)を提供する。
  • 抽象的な要約(ボックスプロット)と詳細な密度(ヒストグラム)を視覚的にシームレスに結合する。
  • ボックスプロットの軸など、不要な要素を排除してクリーンでプロフェッショナルな美しさを確保する。

【ターゲット層】

  • 主な対象:小売ビジネスのアナリストおよびステークホルダー
  • 専門レベル:中級
  • 利用シーン:レポート(報告書)
  • アクセシビリティ要件:背景に対してコントラストの高い赤い破線、統計注釈のための読みやすく明快なフォントサイズ。

【視覚的階層】

  • 主要要素:赤い破線の四分位線(Q1、Q3)、ヒストグラムのバー、ボックスプロットの構成要素。
  • 二次的要素:統計テキストラベル(Min、Q1、Median、Q3、Max)、X軸ラベルおよびタイトル。
  • 強調戦略:連結線に鮮やかな赤色を使用することで、メインのデータ表現に使用する中立色や寒色と対比させ、視線を垂直方向に誘導する。

【配色戦略】

  • 主要色:スチールブルー(#4682B4)、レッド(#FF0000)、ダークグレー(#333333)。
  • 色の意味:スチールブルーは中立性と専門性を示すデータ図形用。レッドは重要な統計的境界を示す破線用。ダークグレーはテキストと軸用。
  • 適合性:アクセシビリティ基準AAに準拠。ここでの赤は危険ではなく、境界への注目を促すために使用。

【レイアウト原則】

  • 構成アプローチ:グリッド
  • 間隔戦略:タイト(密接)
  • 整列システム:中央揃え
  • 比率:カスタム

【タイポグラフィ要件】

  • フォント階層:タイトル(20pt) > 軸ラベル(18pt) > 統計注釈(12-14pt) > 目盛り(16pt)
  • 優先事項:高い視認性
  • ブランド整合性:コーポレートスタイル

【インタラクションと技術制約】

  • インタラクション:静的グラフ
  • 出力形式:静止画
  • サイズ制限:スクリーンサイズ
  • パフォーマンス要件:標準的

【革新的なポイント】
2つの異なるプロットを赤い破線で垂直に統合することで、要約統計量と生の分布の間のギャップを埋め、統一された分析ビューを作り出しています。


【デザイン信頼度】
1.0

 配色やフォントサイズなど、見た目に関する条件がまとめられています。ここまでが、「計画(Planning)」のフェーズになります。この後は、VizMapping Agentの出力(数学的な観点での指示)とDesign Explorerの出力(デザインに関する指示)に基づいて、Code Generatorが実際にグラフを描くコードを生成する「生成(Generation)」のフェーズに進みます。また、その後の「自己反省(Self-Reflection)」のフェーズでは、コードが出力したグラフの画像データをVisual Evaluatorが評価して改善点を指摘します。指摘された改善点に基づいて、「計画(Planning)」と「生成(Generation)」のフェーズを再実行することで、より高品質なグラフへと改善していきます。なお、図1の例では、最初に出力した画像データに対して改善点の指摘はなく、1回の処理で実行が完了しています。

次回予告

 今回は、2025年に公開された論文「CoDA: Agentic Systems for Collaborative Data Visualization」に基づいて、データの可視化処理をマルチエージェントで実行するアーキテクチャー「CoDA(Collaborative Data-visualization Agents)」について、主要なサブエージェントの具体的な出力例を紹介しました。今回は、筆者が独自に再実装したコードによる出力例を紹介しましたが、次回は、再度、論文の内容に戻って、CoDA のベンチマークによる評価結果を紹介します。

Disclaimer:この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。

 

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes