D3.js从csv文件的列中获取唯一值

时间:2019-07-19 14:11:56

标签: javascript csv d3.js data-manipulation

我正在尝试使用d3.js从从csv文件加载的数据集中的一列中获取所有唯一值。

在阅读中我发现了如下解决方案:

d3.csv("Data/FabSDO.csv", function(data) {
  return d3.map(data, function(d){return d.Distretto;}).keys() 
})

我没有一个唯一值数组,而是一个“ Promise”,其中每一行都是所有数据列名称的数组:

Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: Array(500)
[0 … 99]
0: (14) ["", "Branca", "Dipartimento", "Distretto", "Gruppo erogatore", "Erogatore", "Matricola", "Regime", "DRG", "Mese", "Anno", "Volume", "Costo", "Valore"]

更新:

我找到了一种解决方法,我不知道这是否是最有效的解决方案。技巧是将列直接传递给then()函数。 我利用datalib库获得唯一性。

d3.csv("Data/FabSDO.csv", function(data) {
      return data.Distretto
    }).then(function(col) {
       return dl.unique(col)
    })

问题是我想通过列处理来保持csv的加载,但是如果我这样做:

 foo = d3.csv("Data/FabSDO.csv", function(data) {
          return data
        })
 foo.then(function(col) {
           return dl.unique(col.Distretto)
        })

我收到“ TypeError:无法读取未定义的属性'length'”。上校似乎不再具有Distretto属性。

UPDATE2

我想我找到了一种在第二次调用中访问列值的方法。这样可以。 (我使用jQuery each()提取列值)

foo = d3.csv("Data/FabSDO.csv", function(data) {
    return data
})
var group = 'Distretto'

foo.then(function(col) {
    var vals = []
    $.each(col, function(i, j){vals.push(j[group])})

    vals = dl.unique(vals)

})

0 个答案:

没有答案