使用交叉过滤器转换数据集
Transforming a dataset with crossfilter
我正在尝试使用 dc.js 创建仪表板,我想自定义数据 table 的可视化方式。所以我的数据看起来像这样
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
当我初始化数据 table 时,它看起来与我的原始 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
下面是我如何初始化和设置我的数据table
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;
});
我知道 crossfilter 允许您快速过滤和子集数据,但我不确定它如何转换数据集。谢谢!
到目前为止,我暂时可以做到这一点。
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 等创建新字段。
我正在尝试使用 dc.js 创建仪表板,我想自定义数据 table 的可视化方式。所以我的数据看起来像这样
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
当我初始化数据 table 时,它看起来与我的原始 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
下面是我如何初始化和设置我的数据table
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;
});
我知道 crossfilter 允许您快速过滤和子集数据,但我不确定它如何转换数据集。谢谢!
到目前为止,我暂时可以做到这一点。
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 等创建新字段。