2016-07-09 11 views
1

Ich arbeite an einem Datenvisualisierungsprojekt und verwende die dc.js-Bibliothek. Nachdem die Daten in eine flache Datenstruktur umzuwandeln (zum Querfilter), sehen die Daten wie folgt:Wie kann Reductios Exception Aggregation-Funktion für mehrere Datenspalten verwendet werden?

[{"date":"2015-01-01","region":1,"cancer":10,"diabetes":5,"aqi_index":66,"pm2_5":20,"pm10":35},{"date":"2015-01-01","region":2,"cancer":30,"diabetes":25,"aqi_index":66,"pm2_5":20,"pm10":35}] 

I ein Liniendiagramm haben die Luftverschmutzung Daten und eine gestapelte Flächendiagramm zum Anzeigen der medizinischen Daten anzuzeigen.

Hier ist ich ein Problem. Wie Sie sehen können, enthält meine Tabelle zwei Zeilen für jedes Datum, eines für jede Region. Die medizinischen Daten unterscheiden sich nach Region; Die Luftverschmutzungsdaten sind jedoch für beide Regionen für das gleiche Datum identisch. Wie ich den folgenden Code verwenden, um die Handlung des Luftschadstoff Lesung gegen die Zeit zu erhalten:

für die Luftverschmutzung Daten
var ndx = crossfilter(data); 
var dateDim = ndx.dimension(function(d) {return d["date"];}); 

var aqi = dateDim.group().reduceSum(function(d) {return d["aqi_index"];}); 
var pm2_5 = dateDim.group().reduceSum(function(d) {return d["pm2_5"];}); 
var pm10 = dateDim.group().reduceSum(function(d) {return d["pm10"];}); 

Mein Diagramm wird ungenau, wie ich für jeden Tag die doppelte Menge an Schadstoffen anzuzeigen. Wie kann ich den eindeutigen Wert der einzelnen Schadstoffwerte (AQI-Index, PM 2.5, PM 10) für jedes Datum mit der Reductio-Ausnahmeaggregationsfunktion anzeigen? Beeinflusst das mein Diagramm für medizinische Daten?

Antwort

1

ich denke, das sollte funktionieren:

var ndx = crossfilter(data); 
var dateDim = ndx.dimension(function(d) {return d["date"];}); 
var dateGroup = dateDim.group() 
var reducer = reductio() 

// Value allows multiple aggregations on the same group. 
// Here aggregate all values on the "cancer" property for a date. 
reducer.value("cancer").sum("cancer") 

// Here aggregate only the first value of the "aqi_index" property for a date to 
// avoid double-counting 
reducer.value("aqi_index").exception("date").exceptionSum("aqi_index") 

reducer(dateGroup) 

so viele Wert Aggregationen hinzufügen, wie Sie alle Ihre Maßnahmen auf die Gruppe aggregieren möchten. Lassen Sie es mich wissen, wenn Sie einen Fehler erhalten.

Beispiel JSFiddle (siehe die Konsole für Ergebnisse): https://jsfiddle.net/esjewett/5onebhsd/1/

+0

bekam ich die folgende Fehlermeldung, wenn ich Ihren Code versucht: 'Typeerror: group.all keine Funktion ist. (In 'group.all()', 'group.all' ist undefined) ' –

+0

Ich sehe keinen Platz in Ihrer Frage oder in meinem Beispiel wo group.all aufgerufen würde. Hast du deinen kompletten Code gepostet? –

+0

Eigentlich wurde die Fehlermeldung in Bezug auf die dc.js-Datei ausgelöst, wenn ich Ihren Code hinzugefügt habe. Es gelang mir jedoch, das Problem zu umgehen, indem die Daten in zwei Tabellen aufgeteilt und zwei separate Crossfilter-Instanzen verwendet wurden. Anschließend wurde eine Ereignis-Listener-Methode hinzugefügt, um beide Diagramme beim Filtern miteinander zu verknüpfen (was für mein Projekt gut genug ist). Vielen Dank für Ihre Hilfe! :) –