В чем разница между d3.scale.quantize() и d3.scale.quantile()?
В документах определены следующие определения:
квантование
.. вариант линейных шкал с дискретным, а не непрерывным диапазоном. Входной домен все еще непрерывный и разделен на равномерные сегменты на основе количества значений в (мощности) выходного диапазона.
квантиль
... сопоставить входной домен с дискретным диапазоном. Хотя входной домен является непрерывным и шкала примет любое разумное входное значение, входной домен указывается как дискретный набор значений. Количество значений в (мощности) выходного диапазона определяет количество квантилей, которые будут вычисляться из входного домена
Кажется, что они отображают непрерывные входные домены в набор дискретных значений. Может ли кто-нибудь осветить разницу?
Ответы
Ответ 1
"Карты раскраски" имеет большое визуальное объяснение.
Квантование:
![F5mSQ.png]()
Quantile:
![S7tKB.png]()
На графике рассеяния ранее горизонтальные полосы теперь вертикальны, так как цвета каждого места определяются его рангом, а не значением.
Здесь фрагмент кода в D3 v4, который показывает разные результаты в квантовании и квантиле.
const purples = [
'purple1',
'purple2',
'purple3',
'purple4',
'purple5'
]
const dataset = [1, 1, 1, 1, 2, 3, 4, 5] // try [1, 2, 3, 4, 5] as well
const quantize = d3.scaleQuantize()
.domain(d3.extent(dataset)) // pass the min and max of the dataset
.range(purples)
const quantile = d3.scaleQuantile()
.domain(dataset) // pass the entire dataset
.range(purples)
console.log(quantize(3)) // purples[3]
console.log(quantile(3)) // purples[4]
Ответ 2
В общих чертах разница аналогична разнице между средним и средним.
Разница очевидна только тогда, когда количество значений во входном домене больше, чем количество значений в выходном домене. Лучше всего иллюстрируется примером .
Для шкалы quantize
входной диапазон делится на равномерные сегменты в зависимости от выходного диапазона. То есть, количество значений в домене не имеет большого значения. Следовательно, он возвращает 1 для 0,2, так как 0,2 ближе к 1, чем 100.
Масштаб quantile
основан на квантилях входного домена и как таковой влияет на количество значений в нем. Количество значений в выходном домене определяет только количество квантилей. По самой своей природе квантилиты отражают фактический список значений, а не только диапазон. Таким образом, ввод 0,2 возвращает 100 в качестве соответствующего квантиля ближе к 100.
Ответ 3
У меня был такой же вопрос. Поэтому я сделал визуализацию чтобы понять, как они работают.
![Understanding d3 scale quantize / quantile]()
Ответ 4
Разница, насколько я могу судить, заключается в том, что статистически квантили являются конечными, равными и равномерно распределенными дискретными блоками/ведрами, в которые ваши результаты просто падают. Разница заключается в том, что квантованный масштаб является непрерывной функцией, основанной на вашем дискретном вводе.
В принципе: квантование позволяет интерполяцию и экстраполяцию, когда квантиль заставляет значение в подмножество.
Так, например, если студент рассчитал оценку в 81,7% в квантованном масштабе, шкала квантилей процентилей просто скажет, что она имеет 81-ю процентиль. Там нет места для гибкости.