Simple Time Series QuickStart Sample (Visual Basic)

Illustrates how to perform simple operations on time series data using classes in the Extreme.Statistics.TimeSeriesAnalysis namespace in Visual Basic.

View this sample in: C# F# IronPython

Option Infer On

Imports Extreme.Data.Text
Imports Extreme.DataAnalysis
Imports Extreme.Statistics

    ' Illustrates the use of the TimeSeriesCollection class to represent
    ' and manipulate time series data.
    Module SimpleTimeSeries

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

        ' Time series data frames can be created in a variety of ways.
        ' Here we read from a CSV file And specify the column to use as the index
        Dim timeSeries = DelimitedTextFile.ReadDataFrame(Of DateTime)(
                "..\..\..\..\Data\MicrosoftStock.csv", "Date")

        ' The RowCount property returns the number of
        ' observations:
        Console.WriteLine("# observations: {0}", timeSeries.RowCount)

        '
        ' Accessing variables
        '

        ' Variables are accessed by name or numeric index.
        ' They need to be cast to the appropriate specialized
        ' type (NumericalVariable, DateTimeVariable, etc.)
        Dim close = timeSeries("Close").As(Of Double)
        Console.WriteLine("Average close price: ${0:F2}", close.Mean())

        ' Variables can also be accessed by numeric index:
        Console.WriteLine("3rd variable: {0}", timeSeries(2).Name)

        ' The GetSubset method returns the data from the specified range.
        Dim y2004 As DateTime = New DateTime(2004, 1, 1)
        Dim y2005 As DateTime = New DateTime(2005, 1, 1)
        Dim series2004 = timeSeries.GetRows(y2004, y2005)
        Console.WriteLine("Opening price on the first trading day of 2004: {0}",
                series2004("Open").GetValue(0))

        '
        ' Transforming the Frequency
        '

        ' The first step is to define the aggregator function
        ' for each variable. This function specifies how each
        ' observation in the new time series is calculated
        ' from the observations in the original series.

        ' The Aggregator class has a number of 
        ' pre-defined aggregator functions:
        Dim allAggregators = New Dictionary(Of String, AggregatorGroup)() From
            {
                {"Open", Aggregators.First},
                {"Close", Aggregators.Last},
                {"High", Aggregators.Max},
                {"Low", Aggregators.Min},
                {"Volume", Aggregators.Sum}
            }

        ' We can specify a subset of the series by providing
        ' the start and end dates.

        ' The TransformFrequency method returns a new series
        ' containing the aggregated data:

        Dim monthlySeries = timeSeries.GetRows(y2004, y2005).
                Resample(Recurrence.Monthly, allAggregators)

        ' We can now print the results:
        Console.WriteLine("Monthly statistics for Microsoft Corp. (MSFT)")
        Console.WriteLine(monthlySeries.Summarize())

        Console.WriteLine("Press Enter key to continue.")
        Console.ReadLine()
    End Sub

End Module