Charting riesige Mengen von Daten

Sind wir derzeit mit ZedGraph und zeichnen Sie eine Linie Diagramm der Daten. Die input-Daten von einer Datei beliebiger Größe, daher wir nicht wissen, was die maximale Anzahl der Datenpunkte im Voraus. Jedoch, indem Sie die Datei öffnen und Lesen der header, können wir herausfinden, wie viele Datenpunkte sind in der Datei.

Das format der Datei ist im wesentlichen [Zeit (Doppel -), Wert (double)]. Allerdings werden die Einträge nicht einheitlich in der Zeit-Achse. Es kann nicht sein, alle Punkte, die zwischen, sagen wir t = 0 s und t = 10 sec, aber es könnte sein, 100K Einträge zwischen t = 10 s und t = 11 s und so weiter.

Als Beispiel, unsere test-dataset Datei ist ~2,6 GB und es hat 324 Punkte. Wir möchten zeigen das gesamte Diagramm, um den Benutzer, und lassen Sie Sie navigieren durch das Diagramm. Jedoch, Belastung bis 324 Punkte zu ZedGraph ist nicht nur unmöglich (wir sind auf einem 32-bit-Maschine), aber auch nicht sinnvoll, da es keinen Punkt gibt, der mit so viele Punkte auf dem Bildschirm.

Mithilfe der FilteredPointList Funktion von ZedGraph erscheint auch nicht in Frage, denn das erfordert das laden der gesamten Daten zuerst und dann filtern von Daten.

So, es sei denn, wir verpassen nichts, es scheint, dass unsere einzige Lösung ist -irgendwie - dezimieren die Daten, aber wir arbeiten weiter daran, wir laufen in eine Menge Probleme:

1 - Wie wir dezimieren die Daten, die nicht ankommen, die gleichmäßig in der Zeit?

2 - Da die gesamten Daten können nicht in den Speicher geladen, jeder Algorithmus muss die Arbeit auf der Platte und so muss sorgfältig ausgelegt werden.

3 - Wie gehen wir mit Zoomen in und aus, vor allem, wenn die Daten nicht einheitlich auf der x-Achse.

Wenn die Daten gleichmäßig ist, nach anfänglichen laden der Grafik, wir könnten Seek() durch vordefinierte Menge der Einträge in der Datei, und wählen Sie alle N anderen Proben und es zu versorgen, zu ZedGraph. Jedoch, da die Daten nicht einheitlich ist, müssen wir intelligenter bei der Auswahl der Proben auf dem display, und wir können nicht kommen mit einem intelligenten Algorithmus, der nicht die gesamte Datei zu Lesen.

Bitte ich zu entschuldigen, da die Frage nicht auf die gestochen scharfen Spezifität, aber ich hoffe, ich konnte erklären, die Art und den Umfang unserer problem.

Sind wir auf einer Windows-32-bit, .NET 4.0.

Schreibe einen Kommentar