2017-11-15 3 views
1

Ich benutze Numerics.mathdotnet, um das Histogramm der sortierten Daten zu berechnen. My-Datensatz sieht wie folgtHistogramm kategorisierte Daten in C#

row1, a, b, c

row2, x, y, z

...

und mein Histogramm berechnet wird, lassen Sie uns auf Spalte sagen 4 welches [c, z, ...] hat. Nach der Erstellung des Histogramms und dem Auftragen auf ein Diagramm (x-Achse: Buckets, y-Achse: Anzahl der Zeilen in diesem Bucket) möchte ich die Zeilen ermitteln, die in einen bestimmten Bucket fallen.

Meine Lösung: Ich übergebe den Anfang und das Ende des Buckets (berechnet mit Bucket-Breite) zur Funktion, iteriere über alle Zeilen und überprüfe, ob diese Zeile in den Bucket-Bereich fällt.

Problem: Für einige Bucket-Weiten zeigt count zu> 0 aber wenn ich es abholen findet es keine Zeilen in diesem Bucket.

Frage: Gibt es eine Möglichkeit, die Daten zusammen mit Histogramm-Ergebnissen zu erhalten? Beispiel: {bucketRange_start: x, bucketRange_end: y, zählen: n, Daten: [...]}

Antwort

0

Beispielprogramm:

// try Histogram 
      //using MathNet.Numerics.Statistics; // required header 

      // create random data 
      Random RanGen = new Random(); 
      double[][] d = new double[4][]; 
      for (int i = 0; i < 4; i++) d[i] = new double[100]; 
      for (int i = 0; i < 4; i++) { for (int j = 0; j < 100; j++) d[i][j] = RanGen.NextDouble(); } 

      // create histogram for 3rd array = d[2] ; 
      Histogram h2 = new Histogram(d[2], 10); 

      // write bucket info including max, min and count 
      for (int b = 0; b < 10; b++) Console.WriteLine(h2[b].ToString()); 

      // Write row number and row data for all rows for which d3 value is in bucket with index = 7; 
      for (int j = 0; j < 100; j++) 
      { 
       if (h2.GetBucketIndexOf(d[2][j]) == 7) Console.WriteLine(j + " " + d[0][j].ToString() + " " + d[1][j].ToString() + " " + d[2][j].ToString() + " " + d[3][j].ToString() + " "); 
      }