2016-01-18 1 views
0

J'utilise d3.nest.rollup pour compter les feuilles dans mes données. Les données proviennent de csv et sont converties en json par d3. Le csv ressemble à ceci:Comment comptabiliser des valeurs distinctes dans le cumul de d3 nid?

Color,ID,Animal 
Green,1,Dog 
Red,2,Cat 
Red,3,Cat 
Red,3,Dog 

Notez que ID # 3 a 2 animaux différents, mais je veux compter ID distincts dans ces données, de sorte que chaque couleur doit retourner count = 1.

Fonction simple rollup renverrait des comptes de toutes les feuilles, c.-à-d. 1, 1, 2, alors que je dois regrouper par couleur et compter des identifiants distincts dans ce groupe ...

Répondre

0

Vous devrez faire un deux niveau suivant (premier sur couleur, puis sur id), et roll-up sur le second groupe, quelque chose comme ceci:

var nested_data = d3.nest() 
.key(function(d) { return d.Color; }) 
.key(function(d) { return d.id; }) 
.rollup(function(ids) { 
    return ids.length; 
}) 
.entries(data); 

console.log(nested_data); 

qui vous donnera:

Console view of rolled-up and nested data

Il y a un grand tutoriel sur le nid et Rollup ici: http://bl.ocks.org/phoebebright/raw/3176159/

+0

Merci! Mais cela me donne toujours la longueur = 2 pour Red ... alors que j'ai besoin d'obtenir la longueur = 1 pour Red car il n'y a qu'un seul ID unique sous le groupe Red ... – Pavel

+0

Désolé, je ne suis pas tout à fait. En utilisant l'exemple CSV dans la question, "Vert" a un ID unique ("1"), et "Rouge" a deux ID uniques ("2" et "3"). Est-ce que je manque quelque chose? –

+0

Droit! Je ne peux pas sembler reproduire ceci sur les données réelles, qui a beaucoup d'autres colonnes ... ai-je besoin d'inclure la colonne d'identification dans les clés ou puis-je la contourner en quelque sorte? – Pavel