javascript - 使用交叉过滤器转换数据集

标签 javascript dc.js crossfilter

我正在尝试使用 dc.js 创建仪表板,并且想要自定义数据表的可视化方式。所以我的数据看起来像这样

agegroup    gender  group   scores  total
  18-24       M      1       0.04    1
  45-54       F      2       2.23    13
  25-34       M      1       0.74    6
  25-34       M      2       1.47    8
  18-24       F      1       2.88    7
  35-44       F      2       3.98    14

当我初始化数据表时,它看起来与我的原始 csv 相同。但是如果我想要怎么办

 agegroup    gender  group1.scores   group1.total  group2.scores  group2.total
      18-24       M      0.04              1           0.0               0
      18-24       F      2.88              1           0.0               0
      25-34       M      0.74              8           1.47              8
      25-34       F      0.0               0           0.0               0

这是我初始化和设置数据表的方法

dataTable = dc.dataTable('#data-table');
var tableDim = ndx.dimension(function(d) {
          return d.gender;
        });
      dataTable
            .width(400)
            .height(800)
            .dimension(tableDim)
              .group(function(d){
                return  "Counts"
              })
              .size(20)
            .columns([
                function(d){
                  return d.gender;},
                function(d){
                  return d.agegroup;
                },
                function(d){
                  return d.group;
                },
                function(d){
                  return d.scores;
                },
                function(d){
                  return d.total;
                }, 
            ])
            .order(d3.ascending)
            .sortBy(function(d){
              return d.gender;
            });

我知道交叉过滤器允许您快速过滤和子集数据,但我不确定它如何用于转换数据集。谢谢!

最佳答案

到目前为止,我暂时能够做到这一点。

var tableDim = ndx.dimension(function (d) {
    return d.agegroup;
});

var dataTable = dc.dataTable("#someTable");
dataTable.width(300).height(800)
    .dimension(tableDim)
    .group(function (d) {
    return "Counts";
})
    .columns([
function (d) {
    return d.agegroup;
},
function (d) {
    return d.gender;
},
function (d) {
    if (d.group == 1) return d.scores;
    else return 0;
},
function (d) {
    if (d.group == 1) return d.total;
    else return 0;
},
function (d) {
    if (d.group == 2) return d.scores;
    else return 0;
},
function (d) {
    if (d.group == 2) return d.total;
    else return 0;
}]);

dc.renderAll();

这是JSFiddle使用上面的代码。下次当您在 SO 上寻求此类解决方案时,请使用此解决方案或制作一个新的解决方案。

请记住,使用dc.dataTable您可能无法减少数据集中的行数。如果您确实想减少行数,可以尝试 group().reduce() 方法并为 group1.total、group1.scores 等创建新字段。

关于javascript - 使用交叉过滤器转换数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080716/

相关文章:

javascript - 使用 Browserify 全局覆盖 Backbone 同步

d3.js - 将过滤器从一个 Crossfilter 数据集应用到另一个 Crossfilter

javascript - 更新/重绘折线图时 dc.js 出现问题

javascript - 如何创建在 y 轴上具有唯一计数、在 x 轴上具有类别的基本条形图?

javascript - dc.js 饼图在 filterAll() 之后没有更新

javascript - dc.js 永久链接或 href 共享可视化过滤器状态?

javascript - 我不明白为什么我会收到此错误

javascript - HTML5 音频在 Firefox 中从错误的位置开始

javascript - 是否可以在不下载应用程序的情况下将文件上传到 github 帐户/存储库?

javascript - 删除条形图上的 X 轴