开发者问题收集

D3.js 合并来自多个 csv 文件的数据

2016-06-24
2887

我是 D3 新手,负责创建一个用于显示油井数据的仪表板。数据位于 3 个 csv 文件中,标题如下。

  1. 公司数据: CompanyName、FacilityName、WellName、WellId、WellGasNRI、WellOilNRI、WellShrinkageFactor、WellYieldFactor

  2. 油井预算估算: WellId、Month、Year、DaysInMonth、GrossOil、GrossGas、GrossBOE、NetBOE

  3. 实际油井产量: WellId、Date、GrossOil、GrossGas、NetOil、NetGas、GasWithShrinkage、GasWithYield

我曾使用 d3.nest() 对每个文件中的记录进行分组,但我想将分组后的数组合并为一个结构。

主要显示内容之一是将预算估算与每口井每天的实际产量进行比较,然后再按设施进行比较。

如能得到任何帮助,我们将不胜感激。

1个回答

一种方法是嵌套多个 d3.csv 调用,如下所述: 在 D3 中从多个 csv 文件导入数据

d3.csv("file1.csv", function(data1) {
  d3.csv("file2.csv", function(data2) {
     d3.csv("file3.csv", function(data3) {
        // do something with the data
        console.log("CSV1", data1);
        console.log("CSV2", data2);
        console.log("CSV3", data3);
     });
  });
});

另一个选项(我更喜欢)是使用 d3.queue (这是一个插件 - 您需要单独导入 queue.js ):

queue()
    .defer(d3.csv, 'file1.csv')
    .defer(d3.csv, 'file2.csv')
    .defer(d3.csv, 'file3.csv')
    .await(processData);

function processData(data1, data2, data3) {
    // do something with the data
    console.log("CSV1", data1);
    console.log("CSV2", data2);
    console.log("CSV3", data3);
}

从那里,您可以使用 d3 和 JavaScript 数组操作函数来组合、合并、拆分以及对数据对象执行任何您想要的操作。例如,您可能希望使用 d3.nest().key() 来组织您的 CSV,以便可以使用 WellId 字段选择它们,然后使用嵌套 for 循环或其他机制将它们组合起来。以下是有关 D3 中数据操作的一些很好的教程和参考资料:

helderdarocha
2016-06-24