d3.csv将数据映射为数组

时间:2013-10-25 02:20:46

标签: javascript csv d3.js dc.js

我目前正在使用dc.js,crossfilter.js和d3.js来渲染一些可视化。我发现了一个非常类似于我在这里寻找的帖子Crossfilter queryd3 csv data loading

我的目标是解析我的csv,对于某个列,将其解析为每个对象行中的数组。例如,我有:

我的数据目前显示为:

  

[
{FY:2011,proj_name:“project 1”,category:“fruit”,subcategory:“strawberry,mango”,total:1510},
  {FY:2011,proj_name:“project 2”,类别:“fruit”,子类别:“orange,mango”,总数:100},
  {FY:2011,proj_name:“project 2”,类别:“vegetable”,子类别:“celery”,总数:100}
]

但我希望将数据格式化为:

  

[
{FY:2011,proj_name:“project 1”,category:“fruit”,subcategory:[“strawberry”,“mango”],total:1510},
  {FY:2011,proj_name:“project 1”,类别:“fruit”,子类别:[“orange”,“mango”],总数:100},   
{FY:2011,proj_name:“project 1”,类别:“vegetable”,子类别:[“celery”],总数:100}
]

这是我可以放入data.forEach(function(d))的东西吗?

    d3.csv("data.csv", function(data) { 
    data.forEach(function (d) { 
        d.FY = +d.FY; 
        d.total = +d.total; 
        d.subcategory = d.subcategory.split(/,/); 
        }) 
    })

我不认为是正确的,它根本不起作用,但我在这里得到的是,这是需要在本专栏中重复完成的事情,以便我可以在以后将子类别作为标记打包在..任何想法/反馈?

非常感谢提前

1 个答案:

答案 0 :(得分:2)

D3已经涵盖了这一点,d3.csv的格式为:d3.csv(url[, accessor][, callback])其中,访问器是为csv中的每一行调用的函数,用于转换数据。试试这个:

d3.csv("data.csv", function(d) { 
  return {
    FY: +d.FY,
    total: +d.total,
    category: d.category,
    subcategory: d.subcategory.split(/,/)
  };
});