【发布时间】:2017-07-01 18:12:02
【问题描述】:
我的原始 CSV 中有此类数据:
id, lat, long, data_type_1, data_type_2, data_type_3
1 , 50, 1, 10, 20, 40
而我需要把它改造成这种结构:
id, lat, long, data_type, value,
1 , 50, 1, 1, 10,
1 , 50, 1, 2, 20,
1 , 50, 1, 3, 40,
我查看了 d3.csv 和 question 或两个的 devdocs。
我有这段代码,从这个 bl.ocks.org 页面压缩/修改。
d3.csv("traffic_data.csv", function(d) {
numericColHeaders.forEach(header => d[header] = parseInt(d[height]));
console.error(d); // to inspect in the console
return d;
}, function(error, data) {
if (error) throw error;
var root = d3.stratify()
.id(function(d) {
return d.data_type;
})
.parentId(function(d) {
return d.id;
})
(data)
.sum(function(d) {
return d.value;
})
.sort(function(a, b) {
return b.height - a.height || b.value - a.value;
});
treemap(root);
// do more stuff
})
当我控制台输出数据时,它会打印一行,但要使我的数据标准化,我需要将其“扩展”成多行,我不知道如何做到这一点.我想不出如何用map、filter 或reduce 来做到这一点。如果有什么我想要减少的反面。
我怎样才能做到这一点?
【问题讨论】:
-
您需要将 CSV 中的每条记录转换为 3 条记录(每个 data_type 一条。您希望将
push()它们转换为一个新的数据数组并在您的可视化中使用它 -
@genestd 在 csv 函数或回调中?如果它在 csv 函数中,我将得到嵌套数组...
-
在回调中执行,然后将新变量作为
(data)传递给您的stratify()函数
标签: javascript csv d3.js