2012-05-14 5 views
15

この声明の意味はなんですか?d3.scale.quantileはどのように機能しますか?

quantize = d3.scale.quantile().domain([0, 15]).range(d3.range(9)); 

私はドメインであることを見た: - 0
1 -

0~15

範囲は0〜8であり、

0 - 1.6 
1 - 3.3 
2 - 4.9 
3 - 6.6 
4 - 8.3 
5 - 9.9 
6 -11.6 
7 -13.3 
をquantize.quantiles

quantize.quantilesの値はどのように計算されますか? quantize(2)に電話しましたが、結果は1でした。 quantileはどのように機能しますか?

+0

多分、quantileの意味とその働きは分かりますか? – user1365697

+3

これらのスケールがどのように機能するかをよりよく理解したい場合は、このインタラクティブな[ビジュアル化](http://bl.ocks.org/aviddiviner/84d905e60c6788f77ee21d35f873b236)で遊ぶことができます。 – Dave

答えて

4

私は(quantize.quantilesでその特に、quantile scale documentation上で読書をお勧めします)

しかし、基本的に、D3は、このスケールの出力範囲の9つの値があることを認識し、それが基づいて9分位を作成し、 2値データセット:[0,15]。
これはあなたの質問に表示されるquantize.quantiles()値につながります:[1.6,3.3、..、13.3]、これらはクオンタイルの境界を表します。1.6未満のものは、出力範囲(この場合はゼロ)。 3.3未満で1.6より大きい値は、出力範囲の1つ目の要素にマップされます。したがって、期待通りにquantize(2)= 1になります。

21

量子化スケールの動機付けは、データセット内の値の実際の分布を表すクラスを得ることです。したがって、建設中に値の完全なリストを提供する必要があります。次に、スケールは、入力ドメイン(これらの値で定義)を間隔(分位数)に分割します。これにより、ほぼ同じ数の値が各間隔に入ります。

ドキュメントから:

分位数を計算するために、入力されたドメインがソートされ、離散値の集団として扱われます。私たちはその後、実行している場合は

var scale = d3.scale.quantile() 
    .domain([1, 1, 2, 3, 2, 3, 16]) 
    .range(['blue', 'white', 'red']); 

:ドメインを指定するとき

はしたがって、我々はスケールの値のリスト全体を手

scale.quantiles() 

それが出力されます[2、3 ]これは、私たちの人口がこれら3つのサブセットに分割されたことを意味します:

[1, 1] [2, 2] [3, 3, 16] 

表示するデータに異常値がある場合は、この縮尺を避ける必要があります。上記の例では、16は外れ値が上位の分位列に入っています。これは3と同じクラスに割り当てられていますが、これはおそらく望ましい動作ではありません。

scale(3) // will output "red" 
scale(16) // will output "red" 
関連する問題