1

ビジュアライゼーション プロジェクト (JavaScript) 用に「モック データ」を作成したいと考えています。

できれば、ある確率分布関数、つまり正規または対数正規に従って、合計x ユニットz ステップ間隔y の異なるグループに割り当てたいと思います。

例:

正規密度関数を使用して、グループ 0 ~ 5000、5000 ~ 10000、[...]、75000 ~ 80000 に正確に 100 単位を割り当てます。

次のようにレンダリングする必要があります。

binNames = [ "0-5000", "5000-10000", [...] ]
binData = [ 0,0,0,1,2,10,12,14,12,10 [...] ] //SUM = 100

(単純なシード パラメータで歪度を導入できれば、それはおまけです。)

4

2 に答える 2

9

D3.js ライブラリには、このための便利なツールd3.random.normal(参照コード) があります。D3 を使用していない場合でも、関数を独自のコードにコピーできます。指定した平均と標準偏差に基づいて正規分布で乱数を生成するジェネレータ関数を返します。

その関数を使用すると、次のように、必要な形式でランダム データを作成できます。

// data generator
var bins = 16,
    target = 100,
    step = 5000,
    max = bins * step,
    stddev = max * .15,
    data = [],
    generator = d3.random.normal(max/2, stddev),
    x=0, y=0;

// set up bins
while (x++ < bins) data.push(0);
// add numbers
while (y++ < target) {
    // get a new number
    var number = generator();
    // don't allow numbers outside the desired range
    number = ~~Math.max(0, Math.min(number, max));
    // increment the bin
    bin = ~~(number / max * bins);
    data[bin]++;
}

例として、小さなアニメーションのヒストグラムを作成しました: http://bl.ocks.org/2034281

于 2012-03-14T05:48:25.150 に答える
0

探しているアルゴリズムは kd ツリーまたはツリーマップです。kd ツリーは、次元の複雑さを軽減します。ダウンロード可能な無料の jquery ツリーマップがあります。

于 2012-02-27T20:50:01.767 に答える