- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 dc.js 和 Crossfilter 时遇到了一个奇怪的问题。想象一下下面的数据和代码
test_data = [{date: d3.time.format("%Y-%m-%dT%H:%M:%S+0100").parse("2014-11-24T12:00:00+0100"), cnt: 1},
{date: d3.time.format("%Y-%m-%dT%H:%M:%S+0100").parse("2014-11-24T11:00:00+0100"), cnt: 2},
{date: d3.time.format("%Y-%m-%dT%H:%M:%S+0100").parse("2014-11-24T12:00:00+0100"), cnt: 3}],
test_ndx = crossfilter(test_data),
test_dim = test_ndx.dimension(function(d) { return d.date; }),
test_grp = test_dim.group(function(d) { return d.getHours(); });
test_grp.all()
返回 [{key: 11, value: 1}, {key: 12, value: 2}]
正如我所料。
如果我将最后一行更改为
test_grp = test_dim.group(function(d) { return -d.getHours(); });
test_grp.all()
返回 [{key: -11, value: 3}]
.
为什么不返回 [{key: -11, value: 1}, {key: -12, value: 2}]
?
最佳答案
我认为这不是 crossfilter 的问题;我认为这是你违反了 crossfilter API,它指出:
Like the value function, groupValue must return a naturally-ordered value; furthermore, this order must be consistent with the dimension's value function!
https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension_group
由于减号,groupValue 函数返回的值的顺序与维度 value 函数的值的顺序相反。
我过度简化了,但在下面,交叉过滤器组正试图按照与维度具有自己的所有值的索引相同的顺序保持 bin 的索引。如果组索引中的值乱序,将无法正确确定 bin 边界。这种简单的假设是使交叉过滤器如此之快的部分原因。
这是一个不使用具有相同行为的日期的更简单的示例:
test_data = [{date: 12, cnt: 1},
{date: 11, cnt: 2},
{date: 12, cnt: 3}],
test_ndx = crossfilter(test_data),
test_dim = test_ndx.dimension(function(d) { return d.date; }),
test_grp = test_dim.group(function(d) { return -d; });
这test_grp
还包含 [{"key":-11,"value":3}]
事实上,任何date.getAnything()
函数通常不会在组值函数(具有维度值函数的日期)中工作,除非观察恰好跨越 Anything。
例如,假设您使用 date.getMonth()
- 如果所有的日子都是从一个月开始的,那么你没问题,因为维度的顺序与组的顺序相匹配。但是如果日期是 3 月 29 日、3 月 31 日、4 月 1 日、4 月 2 日,crossfilter 可能会决定它可以在 3 月 29 日结束时创建一个组边界,并将最后三个日期粘贴在第二个 bin 中,或者将组边界粘贴在4 月 1 日结束,其中包含前三个日期。
同样,我正在简化,这并不是 crossfilter 所做的。但是它的算法是依赖<
和 <=
对维度值的处理方式与对组值的处理方式相同。如果这不是真的,它不会检测到问题(因为那样会很慢)——它只会默默地创建错误的聚合。
关于 NaN
的常见提示不起作用,因为它没有正确排序,在 crossfilter 之上有一个验证库的空间。但是您仍然需要根据其假设设置交叉过滤器,这使得它的工作非常高效。
关于crossfilter - Crossfilter 组函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455989/
我在使用 dc.js 和 Crossfilter 时遇到了一个奇怪的问题。想象一下下面的数据和代码 test_data = [{date: d3.time.format("%Y-%m-%dT%H:%M
在 Crossfilter documentation ,它说明了以下内容。 a grouping intersects the crossfilter's current filters, exce
我有两个数据集,它们具有相似的列/维度,但按行分组并包含不同的度量。 前任: 数据集 1 Year Category SubCategory Value01 Value02 200
我想知道如何从 dc.js 组返回最大值。 例如: var dateDim = data.dimension(function(d) {return d.page_id;}); var hit
在我看来,Crossfilter 永远不会从减少结果中排除一个组,即使应用的过滤器已经排除了该组中的所有行。过滤掉所有行的组只返回聚合值 0(或任何 reduceInitial 返回的值)。 这样做的
我想知道是否有任何已知的方法可以有效地将“重新排序”功能添加到我在 dc.js 中的数据表中。如果我的用户在使用图表完成选择后,可以决定根据哪一列对过滤后的行进行排序(例如,通过单击列标题),那就太好
我有一个 crossfilter.dimension .如何在其上设置当前过滤器(例如,如果它是由图表中的画笔设置的)? 例子: dimension.filterRange([1,15]) // re
我有几个用 dc.js 构建的图表。我可以通过将回调附加到每个 dc.js 图表的 .on("filterted", function(chart) {}) 来实现所需的功能,但这很烦人,因为我必须将
我可能错过了一些微不足道的东西。我想我还没有完全理解一些基本的交叉过滤器概念 无论如何,我创建了一个带有几个维度的交叉过滤器,并在维度上使用过滤器。我现在想知道过滤值(不是键)的最小值/最大值。 我将
我是 js 新手...现在我面临 crossfilter 的问题。 假设我使用以下方法创建了一个 crossfilter 实例: var instance = crossfilter(data); 我
在 Crossfilter API据说,当从维度创建组时,它不会考虑应用于该维度的过滤器。是否可以以某种方式创建一个忽略多个维度(而不是一个维度)上的过滤器的组? 例如:我有 3 个维度,用户可以在其
我的情况与此 question 类似.考虑到相同的数据集,我如何通过交叉过滤器执行此功能。我是 dc.js 和 crossfilter 的新手。我正在尝试执行此 example 中的条形图和面积图.即
我有一个非常高维的数据集,希望用户选择要过滤的维度(将它们添加到交叉过滤器)。我了解无法删除尺寸。是否有关于如何添加维度/过滤器的建议? 谢谢 最佳答案 您只需将字段名称用作维度函数中的变量即可。 我
我一直在玩 crossfilter,发现它很棒,但最近碰壁了。我不知道我的问题是否需要 crossfilter,很高兴听到任何替代解决方案。 我的数据是这样的: [{ year: "1987", co
我有一个这样的数据对象数组: { index: "M1", first: "First", last: "Last", distance: 5, specialties: ["Pe
创建新维度后(按日期,javascript 的日期对象)。 var byDate = cf.dimension(function (d) { return d.date; }); 我过滤维度以删除日期
我发现的所有 Crossfilter 示例都使用这样的平面结构: [ { name: “Rusty”, type: “human”, legs: 2 }, { name: “Alex”,
我正在尝试获取一个包含 csv 文件值总和的组,但我想删除所有零值。 我的 csv 文件示例: Continents Function Value South Asia
我的数据有不同的列,其中两个是“日期”和“节点”。我创建了一个名为 dateDim 的日期维度,非常简单。现在我想根据某个节点的值过滤该维度,即从 dateDim 中获取节点值等于某个字符串的所有值。
我使用 dc.js 创建了一个仪表板。在我的仪表板中,有一个复选框允许用户在计数和金额之间切换仪表板行为。为此,我为所有组重新创建了具有不同 reduceSum 的 crossfilter。 (尽管,
我是一名优秀的程序员,十分优秀!