New Version 6.0!

Try it for free with our fully functional 60-day trial version.

Download now!

QuickStart Samples

Histograms QuickStart Sample (Visual Basic)

Illustrates how to create histograms using the Histogram class in the Extreme.DataAnalysis namespace in Visual Basic.

C# code F# code IronPython code Back to QuickStart Samples

Option Infer On

Imports Extreme.DataAnalysis
Imports Extreme.Mathematics

Namespace Extreme.Numerics.QuickStart.VB
    ' Illustrates how to create historgrams. 
    Module Histograms

        Sub Main()
            ' Histograms are used to summarize the distribution of data.
            ' This QuickStart sample creates a histogram from data 
            ' in a variety of ways.

            ' We use the test scores of students on a hypothetical national test.
            ' First we create a NumericalVariable that holds the test scores.
            Dim group1Results = Vector.Create(
                62, 77, 61, 94, 75, 82, 86, 83, 64, 84,
                68, 82, 72, 71, 85, 66, 61, 79, 81, 73)

            ' We can create a histogram with evenly spaced bins 
            ' by specifying the lower bound, the upper bound, 
            ' And the number of bins
            Dim histogram1 = Histogram.CreateEmpty(50, 100, 5)

            ' We can also provide the bounds explicitly
            Dim bounds = {50, 62, 74, 88, 100}
            Dim histogram2 = Histogram.CreateEmpty(bounds)

            ' Or we can first create an Index object
            Dim idx = Index.CreateBins(bounds)
            Dim histogram3 = Histogram.CreateEmpty(idx)

            ' To tally the results, we simply call the Tabulate method.
            ' The data can be supplied as a vector
            histogram1.Tabulate(group1Results)
            ' Or simply as any enumerable, including an array
            histogram2.Tabulate(group1Results.ToArray())

            ' You can add multiple data sets to the same histogram
            histogram2.Tabulate({74, 68, 89})
            ' Or you can add individual data points using the Increment method.
            ' This will increment the count of the bin that contains 
            ' the specified value
            histogram2.Increment(83)
            histogram2.Increment(78)

            ' Histograms are just vectors, so the SetToZero method 
            ' clears all the data
            histogram2.SetToZero()

            ' The Bins property returns an index of bins
            Dim bins = histogram1.Bins
            ' The Length property returns the total number of bins
            Console.WriteLine("# bins: {0}", bins.Length)
            ' For binned histograms, the bins are of type Interval<T>
            Dim bin = bins(2)
            ' Interval structures have a lower bound, an upper bound:
            Console.WriteLine("Bin 2 has lower bound {0}.", bin.LowerBound)
            Console.WriteLine("Bin 2 has upper bound {0}.", bin.UpperBound)
            ' You can get the value at a specific bin using the Get method:
            Console.WriteLine("Bin 2 has value {0}.", histogram1.Get(bin))

            ' The histogram's FindBin method returns the Histogram bin
            ' that contains a specified value:
            bin = histogram1.FindBin(83)
            Console.WriteLine("83 is in bin {0}", bin)

            ' You can use the BinsAndValues property to iterate through all the bins
            ' in a for-each loop:
            For Each pair In histogram1.BinsAndValues
                Console.WriteLine("Bin {0}: {1}", pair.Key, pair.Value)
            Next


            ' You can also create histograms for categorical data:
            Dim success = Vector.CreateCategorical(
                {True, False, True, True, False})
            Dim histogram4 = success.CreateHistogram()
            ' Bins for categorical histograms are just the categories:
            Dim successes = histogram4.Get(True)
            Console.WriteLine(successes)

            Console.Write("Press any key to exit.")
            Console.ReadLine()
        End Sub

    End Module

End Namespace