21

从文档中,定义是:

量化

..线性刻度的变体,具有离散而不是连续的范围。输入域仍然是连续的,并根据输出范围(的基数)中值的数量划分为均匀的段。

分位数

...将输入域映射到离散范围。尽管输入域是连续的并且标尺可以接受任何合理的输入值,但输入域被指定为一组离散的值。输出范围(的基数)中的值的数量决定了将从输入域计算的分位数的数量

这些似乎都将连续输入域映射到一组离散值。任何人都可以阐明区别吗?

4

4 回答 4

22

一般而言,差异类似于平均值和中位数之间的差异。

只有当输入域中的值的数量大于输出域中的值的数量时,这种差异才真正明显。最好用一个例子来说明。

对于quantize标尺,输入范围根据输出范围被分成均匀的段。也就是说,域中值的数量并不重要。因此它为 0.2 返回 1,因为 0.2 比 100 更接近 1。

比例基于输入域的quantile分位数,因此受其中值数量的影响。输出域中的值数量仅决定计算多少分位数。就其本质而言,分位数反映了实际的值列表,而不仅仅是范围。因此,0.2 的输入返回 100,因为相应的分位数更接近 100。

于 2013-10-09T08:58:47.840 回答
9

我自己也有同样的问题。所以我做了一个可视化来帮助理解它们是如何工作的。

理解 d3 scale quantize / quantile

于 2016-10-26T16:15:25.523 回答
9

着色图有一个很好的视觉解释。

量化:

分位数:

在散点图上,以前的水平条现在是垂直的,因为每个地方的颜色是由它的排名而不是值决定的。

这是 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]
于 2017-07-20T07:42:53.873 回答
5

据我所知,区别在于统计分位数是有限的、相等的、均匀分布的离散块/桶,您的结果只是落入其中。不同之处在于量化比例是基于离散输入的连续函数。

基本上:量化允许插值和外推,其中分位数将值强制到子集中。

因此,例如,如果学生的计算成绩在量化尺度上是 81.7%,那么百分位数的分位数尺度只会说它是第 81 个百分位。那里没有灵活的空间。

于 2013-10-09T03:59:52.687 回答