/ / Agregácia kategorických premenných w / Dimple.js - javascript, d3.js, dimple.js

Agregovanie kategorických premenných w / Dimple.js - javascript, d3.js, dimple.js

Pokúšam sa vytvoriť stohovaný stĺpcový grafzaložené na dvoch nečíselných premenných pomocou Dimple.js a D3. Súbor údajov obsahuje zhruba 50 000 bodov, z ktorých každá je rozdelená na dva spôsoby (odvetvia a kanály). Ideálne je, že os x je rad kategórií (kanálov), zatiaľ čo os y predstavuje počet tých istých kategórií. Dúfam, že sa stohový stĺpec postaví na základe druhej série kategórií (odvetví).

Nižšie uvedený kód vykonáva úlohu stohovania, ale ako vidno na obrázku, namiesto zobrazenia agregovaného počtu všetkých kanálov to len indikuje prítomnosť kanála v konkrétnom sektore.

var myChart = new dimple.chart(svg, data);
var x = myChart.addCategoryAxis("x", "channel");
myChart.addMeasureAxis("y","channel");
myChart.addSeries("channel", dimple.plot.bar);
myChart.draw();

obrázok: https://scontent-lga1-1.xx.fbcdn.net/hphotos-xpt1/t31.0-8/11223612_10207362634082002_162421922019209911_o.jpg

Existuje spôsob, ako pomocou tejto funkcie zhromažďovať program Dimple? Zdá sa, že to nie je v dokumentoch. Každý, kto je ochotný pomôcť / so skúsenosťami v práci s týmto problémom?

Ďakujem veľmi pekne!

odpovede:

1 pre odpoveď č. 1

Váš príklad kódu má preklep, ktorý tu nie je problém. Aby bolo jasné, či by si niekto čítal túto odpoveď v budúcnosti, mal by si to prečítať (inak moja odpoveď nemá zmysel!):

myChart.addSeries("segment", dimple.plot.bar);

Keď vytvoríte os merania v kategóriipočítá rozdielne hodnoty tejto kategórie, vo vašom prípade každý kanál / segment bude samozrejme mať jediný odlišný kanál, čo znamená, že dostane hodnotu 1.

Problémom, s ktorým sa stretávate, je, že je to Dimplezhromažďuje vaše údaje na najnižšiu úroveň definovanú vo vašom kóde (v tomto prípade v kanáli / segmente) skôr, ako urobí niečo iné. To znamená, že súbor údajov, ako je tento:

channel      segment    brand      sales
----------------------------------------
Ecommerce    Sports     Nike        2000
Ecommerce    Sports     Reebok      3000
Ecommerce    Sports     Adidas      4000
Retail       Sports     Nike        5000
Retail       Sports     Reebok      6000
Retail       Sports     Adidas      7000
Retail       Sports     Puma        8000

By sa stal:

channel      segment
--------------------
E-commerce   Sports
Retail       Sports

Takže všetky detaily počtu by sa stratili.

Preto máte dve možnosti, z ktorých obevyžadujú, aby ste niečo urobili, ak už ich nemáte k dispozícii. Prvý predpokladá, že v mojom príklade, ktorý by bol značkou, máte jedinečný stĺpec (alebo aspoň jedinečný pre každú kombináciu kanála / segmentu). To by znamenalo, že by ste mohli zmeniť váš kód na:

var myChart = new dimple.chart(svg, data);
var x = myChart.addCategoryAxis("x", "channel");
myChart.addMeasureAxis("y","brand");
myChart.addSeries("segment", dimple.plot.bar);
myChart.draw();

Vaše údaje budú teraz zoskupené ako:

channel      segment      dist brands
-------------------------------------
Ecommerce    Sports                 3
Retail       Sports                 4

Alternatívou je pridanie stĺpca 1s k vašim údajom:

channel      segment    brand      sales     count
--------------------------------------------------
Ecommerce    Sports     Nike        2000         1
Ecommerce    Sports     Reebok      3000         1
Ecommerce    Sports     Adidas      4000         1
Retail       Sports     Nike        5000         1
Retail       Sports     Reebok      6000         1
Retail       Sports     Adidas      7000         1
Retail       Sports     Puma        8000         1

Ktoré by boli sumarizované ako pri každom inom číselnom stĺpci:

var myChart = new dimple.chart(svg, data);
var x = myChart.addCategoryAxis("x", "channel");
myChart.addMeasureAxis("y","count");
myChart.addSeries("segment", dimple.plot.bar);
myChart.draw();

Ak chcete získať rovnaké výsledky

channel      segment      sum of count
--------------------------------------
Ecommerce    Sports                  3
Retail       Sports                  4