データリシェイプ - 実装
これは VSeed の中でも特に面白く、かつ中核となるモジュールです。一見複雑に見えますが、実際には非常にシンプルで巧妙で、コードは 200 行にも満たない規模です。
foldMeasures と unfoldDimensions をうまく使えば、任意の指標と次元を固定された指標と次元へ変換でき、十分に自由度の高い可視化マッピングを実現できます。
foldMeasures
foldMeasures はすべての指標を 1 つの指標へ fold し、指標名次元 と 指標Id次元 を追加します。この過程で失われる可能性のある情報はすべて foldInfo に保存され、同時にデータ統計も行えます。
特徴
- 特性 1:
foldMeasuresの実行後は必ず指標フィールドが 1 つだけになります。つまり、複数指標で記述されたデータをすべて 1 つの指標に変換でき、任意の複数指標データを 1 つの図形要素に対応させられます。 - 特性 2: データ項目と図形要素(幾何要素)のデータが厳密に一致し、1 件のデータが 1 つの図形要素に対応します。
- 特性 3: この処理の中でデータ統計を行います。
1個の指標、0個の次元は、foldMeasures後に1個の指標、2個の次元(指標名と指標Idを含む)を得られます。4個の指標、1個の次元は、2回のfoldMeasures後に2個の指標、3個の次元(指標名と指標Idを含む)を得られ、双軸グラフなどのシーンをきれいにサポートできます。N個の指標、0個の次元は、Y(Y ≤ N)回のfoldMeasures後にY個の指標と2個の次元(指標名と指標Idを含む)を得られます。
最小実行可能例
unfoldDimensions
unfoldDimensions は情報を失わずに、任意の次元を 1 つの新しい次元へ concat します。追加された情報はすべて unfoldInfo に保存されます。
完全な unfoldDimensions == すべての次元値を指標へ変換 + 1 回の foldMeasures
ただし、dataset の走査コストは大きく、余分な foldMeasures を 1 回行うと性能低下につながります。
foldMeasures は 1 件のデータに指標が 1 つだけであることを直接保証できます。そのため、元データ上で単純な結合を行うだけで同等の効果を巧妙に実現でき、最終的に大きく性能を高められます。
検討の結果、理論上 unfoldDimensions は foldMeasures と完全に統合し、1 回の dataset 走査ですべてのデータ処理を完了できます。ただし、可読性と保守性のため、性能ボトルネックがない場合は現時点では統合しません。
特徴
特性 1: unfoldDimensions の実行後は必ず指標フィールドが 1 つだけになります。
特性 2: 元データを失わずに次元を結合できます。
foldMeasuresの後に実行すれば、最も単純なconcat操作だけで次元の展開と指標の結合を完了でき、非常に優れた性能を得られます。- 任意の次元をまったく新しい次元フィールドへ結合でき、任意の視覚チャネルマッピングを実現できます。
- それ自体は複雑ではないため、理論上は
foldMeasuresと統合して走査回数を減らし、性能を向上させることもできます。