ir_model の設計

設計目標

レポートが何を述べるかと、それがどう描かれるかを分離します。Plot IR は小さなバージョン付きのデータモデルで、report がイベントから生成し、任意のレンダラ(組み込みの SVG/HTML、ノートブック、ダッシュボード)が利用できます。

数学的背景

プロットは、カテゴリカルな xx、実数の yy、系列ラベル ss からなる点 (x,y,s)(x, y, s) の有限多重集合です。系列を通るレンダラの線は次の写像です

x↦yˉs(x)=1∣{ p:p.x=x, p.s=s }∣∑p.x=x, p.s=sp.y,x \mapsto \bar y_{s}(x) = \frac{1}{\lvert\{\,p : p.x = x,\ p.s = s\,\}\rvert} \sum_{p.x = x,\ p.s = s} p.y ,

これは系列が点を持つカテゴリ上で定義されます。点が保持されているので、他の要約(中央値、分位点)も同じ IR から情報を失わずに計算できます。要約だけの IR では点を復元できません。

設計上の決定

カテゴリカルな x

問題。 スケールは整数、形状、レイアウト、名前のいずれでもありえます。選択。 x は文字列です。理由。 1 つの表現ですべてのスケールの型をカバーでき、最初に現れた順序が生成側の選んだ順序になります。数値的な間隔を扱うには IR にスケールの型が必要になります。

要約ではなく生の点

点は生の値を持ちます。区間や要約のプロットは、点が要約であるプロットにすぎず、interval_kind でラベル付けされます。IR は、ある数値をどの統計量が生成したかを知る必要がありません。

プロットの隣にある差分の証拠

DifferentialReport はプロットと同じドキュメントに含まれます。レンダラは、同じ実行の正しさの証拠を手元に持たずに、その実行の計時値を表示することはできません。

すべてのドキュメントにバージョン

schema_version は PlotDocument::new によって mmks_1 に設定され、JSON 形式に書き込まれるため、利用者は理解できないドキュメントを拒否できます。

正しさと不変条件

  • PlotDocument::new は常に schema_version を V1 に設定します。
  • DifferentialReport::empty() は行を持たず、件数はゼロです。
  • レコードは単なるデータです。検証も派生フィールドもありません。

採用しなかった代替案

  • 単位付きの数値軸。 先送りしました。上記を参照してください。
  • プロットライブラリの仕様形式。 IR を 1 つのレンダラに縛ることになります。

境界

  • 描画(それは report の役割)、解析、統計は行いません。
  • コーパスの合計は他の件数と照合されません。
  • PlotKind::Pareto はカテゴリカルな散布図です。IR には 2 軸のフロントはありません。