Try it now

Latest version 8.1.20 (August 2023)

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

nuget Get from
Nuget

QuickStart Samples

Histograms QuickStart Sample (Visual Basic)

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

View this sample in: C# F# IronPython

Option Infer On

Imports Extreme.DataAnalysis
Imports Extreme.Mathematics

' Illustrates how to create historgrams. 
Module Histograms

    Sub Main()
        ' The license is verified at runtime. We're using
        ' a demo license here. For more information, see
        ' https://www.extremeoptimization.com/trialkey
        Extreme.License.Verify("Demo license")

        ' 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