2012-05-14 1 views
15

Qual è il significato di questa affermazione?Come funziona d3.scale.quantile?

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

ho visto che il dominio è:

0 - 0
1 - 15

intervallo è 0-8 e quantize.quantiles

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

Come vengono calcolati i valori su quantize.quantiles? Ho provato a chiamare quantize(2) ma il risultato è stato 1. Come funziona quantile?

+0

Forse sai qual è il significato di quantile e come funziona? – user1365697

+3

Se vuoi capire meglio come funzionano queste scale, puoi giocare con questa [visualizzazione] interattiva (http://bl.ocks.org/aviddiviner/84d905e60c6788f77ee21d35f873b236) che ho creato. – Dave

risposta

4

Mi raccomando di leggere il quantile scale documentation, in particolare quella sulla quantize.quantiles()

Ma in fondo, d3 vede che ci sono 9 i valori nel campo di uscita per questa scala, così crea 9 quantili in base alla Set di dati di 2 valori: [0, 15].
Questo porta ai valori quantize.quantiles() che mostri nella tua domanda: [1.6, 3.3, .., 13.3], questi rappresentano i limiti dei quantili - qualcosa di meno di 1.6 sarà mappato al primo elemento di il campo di uscita (in questo caso zero). Qualsiasi valore inferiore a 3,3 e maggiore di 1,6 verrà mappato sul secondo elemento dell'intervallo di output (uno). Quindi quantize (2) = uno, come previsto.

21

La motivazione della scala quantile è di ottenere classi rappresentative della distribuzione effettiva dei valori nel set di dati. Pertanto, è necessario fornirlo durante la costruzione con l'elenco completo dei valori. La scala divide quindi il dominio di input (definito da questi valori) in intervalli (quantili), in modo che lo stesso numero di valori ricada in ciascuno degli intervalli.

Dalla documentazione:

per calcolare i quantili, il dominio di ingresso è ordinato, e trattato come una popolazione di valori discreti.

Quindi, quando si specifica il dominio che mano nella scala l'intero elenco di valori:

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

Se quindi si esegue:

scale.quantiles() 

Sarà uscita [2, 3 ] che significa che la nostra popolazione di valori è stata suddivisa in questi tre sottoinsiemi:

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

Si noti che questa scala deve essere evitata quando ci sono valori anomali nei dati che si desidera mostrare. Nell'esempio precedente 16 è un valore anomalo che cade nel quantile superiore. Viene assegnata la stessa classe di 3, che probabilmente non è il comportamento desiderato:

scale(3) // will output "red" 
scale(16) // will output "red"