J'ai un CSV qui contient les données suivantes
d3.csv('churn_status.csv') .then(function(data) { vm.graph.nodes = data.reduce(function(acc, line){ return acc.concat(Object.entries(line).map(function(column){ return {name: column[0], node: column[1]} }))}, []); vm.graph.nodes = vm.graph.nodes.sort(function(a,b) { return a.name > b.name ? -1 : 1}); }) .catch(function(error){ // handle error });
3 Réponses :
La fonction de fonction de carte D n'a pas de propriété "actuelle_month" et "valeur". Et votre SCV n'a pas non plus de champs avec ce nom. P>
Voici une façon de le faire, vous devez casser les lignes en clé / valeur en utilisant Note éditer: vous pouvez Utilisez également la fonction de réduction qui fonctionne de la même manière p> objet.entries () code>, puis appuyez sur vos nouveaux objets sur des nœuds.
Objet.entries ({A: 100}) code> renvoie un tableau
["a", 100] code> p>
Cela semble donner une sortie très étrange, pas comme la sortie que j'étais après ex. jsfiddle.net/6vy5w3hp
Oui, cela fonctionne lorsque vous utilisez d3.csvrse (données) code> non pas avec
d3.csvparserows (données) code> Ce sont deux méthodes différentes.
Ahh, d'accord, je vois maintenant. À travers une autre clé dans les travaux, j'avais juste montré un exemple parce que je ne pouvais pas obtenir un CSV en ligne. Vraiment, j'utilise d3.csv ("certains.csv ') code> Est-ce que cela fait une différence? Aussi, est-il possible de commander cela par les colonnes, de sorte que tous les this_year viennent d'abord, etc.?
Oui, vous pouvez simplement trier votre graphique.Nodes graphique.nodes.sort (fonction (A, B) {renvoyer A.Name> B.Name? -1: 1}) code> et si c'est le même avec
d3.csv () code> Mettez votre code à l'intérieur de la fonction
d3.csv ("quelque.csv ', fonction (sortie) {// Voici votre code}) code>
Désolé, j'ai un peu perdu sur où mettre la fonction de tri? Cela serait-il en dehors de la boucle?
Une fois que vous avez traité les nœuds, vous pouvez réaffecter graphique.nodes = graphique.nodes.sort (Fonction (A, B) {retour A.Name> B.Name? -1: 1}) < / code>
Merci, j'ai mis à jour mon message pour montrer ce que j'ai. Cependant, cependant, les deux solutions, il trie maintenant les données, mais il montre tous les doublons. Y a-t-il un moyen de les supprimer? Merci
La rangée 1 dans votre CSV sont les titres. Cela doit être répété dans l'objet Node en fonction de votre modèle. Vous pouvez y parvenir en bouclant via les titres, puis à l'analyse du reste du fichier CSV:
var d3 = require("d3"); let data = "this_year,minus_one_year,minus_two_year,minus_three_year\n1,2,2,3\n4,5,5,5\n2,2,2,2\n4,5,4,4\n1,2,3,3"; let output = d3.csvParseRows(data); let nodeTitles = output[0]; let graph = {"nodes" : []}; console.log(nodeTitles); for (var i = 0; i < nodeTitles.length; i++) { for (var j = 1; j < output.length; j++) { var obj = {name:output[j][i], node:nodeTitles[i]}; if (!graph.nodes.some(function(element) { return (element.name == output[j][i]) && (element.node == nodeTitles[i]); })) { graph.nodes.push(obj); } } } console.log(graph);
Merci, je l'ai testé et ça marche bien. Seul problème est que cela duplique des valeurs pour chaque colonne. Donc l'année_1 ne devrait avoir que 3 nœuds (1, 2 et 4), actuellement 5 par ex. jsfiddle.net/91xrbq6h
@kate_hudson, j'ai édité uniquement d'ajouter des articles uniques au tableau final
Merci beaucoup. Question aléatoire, je viens de découvrir que csvparserows code> renvoie un tableau car il suppose qu'il n'y a pas d'en-tête. Dans mon code réel, je ne lit pas dans une chaîne, mais un véritable fichier CSV, utilisant donc la fonction
CSV code> de D3, qui analyse des éléments comme objet. Lorsque j'applique ce code à cela, cela ne fonctionne évidemment pas. Savez-vous ce que je devrais faire pour le faire travailler avec un objet? Merci beaucoup
avez-vous regardé la sortie: tout est indéfini
Il est indéfini car il est d'accéder aux clés
d.current_montth code> et
d.value code> qui n'existe pas. Voulez-vous des groupes par des valeurs uniques? Ou faites simplement les nœuds comme exemple?
Bonjour, ce serait unique pour chaque colonne, de sorte qu'il se termine comme ma sortie. Désolé, Current_Month était censé être ceci_year, jouait avec elle.