【问题标题】:d3.nest() to convert csv to jsond3.nest() 将 csv 转换为 json
【发布时间】:2017-10-14 00:55:46
【问题描述】:

我想使用 d3.nest() 从 csv 创建一个嵌套的 json 文件,但是我无法正确嵌套。我的输出如下所示:

接近但不完全-我希望这些值是 钥匙 价值观: 0:等 1:等

这是我的代码:

d3.csv("data/fifa-matches.csv", function(error, matchesCSV) {

    //Loads in the tree information from fifa-tree.csv and calls createTree(csvData) to render the tree.
    matchesCSV.forEach(function(d, i) {

        this.teamData = d3.nest()
            .key(function(d) {
                return d.Team;
            })

        .rollup(function(d) {
                return {
                    Result: { 'Label': d.Result, 'Rank': 'test' },

                    // total: d3.sum(v, function(d) { return d.amount; }),
                    // avg: d3.mean(v, function(d) { return d.amount; })
                }
            })
            .entries(matchesCSV);
        console.log(this.teamData);
    });

    d3.csv("data/fifa-tree.csv", function(error, treeCSV) {

        //Create a unique "id" field for each game
        treeCSV.forEach(function(d, i) {
            //console.log(d);
            d.id = d.Team + d.Opponent + i;
            d.type = d.Type;


        });

任何正确方向的信息将不胜感激!

这里是一个csv结构的例子:

球队、对手、进球数、失球数、Delta 进球数、胜利、失败、结果 巴西,德国,1,7,-6,0,1,半决赛 德国,阿根廷,1,0,1,1,0,获胜者 阿根廷,荷兰,0,0,0,1,0,半决赛 荷兰,巴西,3,0,3,1,0,第四名 巴西,哥伦比亚,2,1,1,1,0,四分之一决赛 法国,德国,0,1,-1,0,1,四分之一决赛

【问题讨论】:

  • 请更好地解释您想要的结果是什么(最好显示数组的确切结构),现在还不是很清楚。另外,请复制/粘贴几行 CSV(带有标题),以便我们提供running 解决方案。

标签: javascript json csv d3.js


【解决方案1】:

如果你想指定每个对象中对应一个键的内容,你可以使用.rollup()函数

this.teamData = d3.nest()
    .key(function(d) {
        return d.Team;
    }).rollup(function(match_object) { 
        return {
            opponent: match_object[0]["Opponent"],
            Goals Made: match_object[0]["Goals Made"],
            ..etc...
}).entries(matchesCSV);

并从 treeCSV 返回一个数组

function ReturnTeam(teamname){
    for(team in treeCSV) {
        if(teamname === team.Name) {
            return team;
        }
    }
}

【讨论】:

  • 嘿,谢谢您的回复-匹配对象是一个单独的对象,可以提供数据还是我可以通过“d”?
  • 没问题 :) match_objectd 是同一事物的不同名称,我只是认为 match_object 更具描述性
  • 嗯,有道理。所以汇总的结构很好,但值返回为未定义。我在汇总期间访问数据的方式有问题吗?
  • 我的 bizzle,汇总返回一个数组。使用teamData = d3.nest() .key(function(d) { return d.Team; }).rollup(function(match_object) { // console.log(match_object); return { opponent: match_object[0]["Opponent", "Goals Made": match_object[0]["Goals Made"] }; }).entries(matchesCSV);
  • 太棒了,非常感谢!还有一个问题,我用我更新的代码更新了我的问题——它将treesCSV与第一个数据集结合起来。理想情况下,我会将较低的treesCSV 数据作为this.teamData 中的一个数组。任何想法这里出了什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2014-11-24
  • 2015-08-23
  • 2019-08-21
  • 2011-04-27
相关资源
最近更新 更多