2017-10-14 5 views
0

Je veux créer un fichier json imbriqué à partir d'un fichier csv en utilisant d3.nest(), mais j'ai du mal à obtenir l'imbrication correcte. Ma sortie ressemble à ceci: enter image description hered3.nest() pour convertir csv en json

qui est proche mais pas quite- je voudrais les valeurs à principales valeurs: 0 : etc 1: etc

Voici mon code:

d3.csv ("data/fifa-matches.csv", la fonction (erreur, 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; 


     }); 

Toute info dans la bonne direction serait soyez grandement apprécié!

Voici un exemple de la structure du csv:

équipe, Adversaire, buts composØs, Buts encaissés, objectifs Delta, victoires, défaites, Résultat Brésil, en Allemagne, 1,7, -6,0 , 1, Demi-finales Allemagne, Argentine, 1,0,1,1,0, Vainqueur Argentine, Pays-Bas, 0,0,0,1,0, Demi-finales Pays-Bas, Brésil, 3,0,3,1 , 0, Quatrième place Brésil, Colombie, 2,1,1,1,0, Quarts de finale France, Allemagne, 0,1, -1,0,1, Quarts de finale

+0

S'il vous plaît, mieux expliquer ce que le résultat souhaité est (montrant de préférence la structure exacte du tableau), il est en ce moment pas exactement clair. De plus, veuillez copier/coller quelques lignes de votre fichier CSV (avec l'en-tête) afin de pouvoir fournir une solution ** en cours d'exécution **. –

Répondre

1

Si vous voulez spécifier ce qui est dans chacun des objets qui correspondent à une touche, vous pouvez n utiliser la fonction .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); 

et retourner un tableau de treeCSV

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

Hey merci pour l'objet de réponse-match serait un objet séparé qui fournirait des données ou je serais en mesure de passer 'd' à travers? – jrogers12

+0

pas de problème :) 'match_object' et' d' sont des noms différents pour la même chose, je pensais juste 'match_object' est plus descriptif –

+0

Ah cela a du sens. Donc la structure du rollup est géniale mais les valeurs reviennent indéfinies. Est-ce que quelque chose ne va pas avec comment j'accède aux données pendant le rollup? – jrogers12