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> etd.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.