New Version 6.0!

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

Download now!

QuickStart Samples

Data Frames QuickStart Sample (Visual Basic)

Illustrates how to create and manipulate data frames using classes in the Extreme.DataAnalysis namespace in Visual Basic.

C# code F# code Back to QuickStart Samples

Option Infer On

Imports Extreme.DataAnalysis
Imports Extreme.Mathematics

Namespace Extreme.Numerics.QuickStart.CSharp

    ' <summary>
    ' Illustrates how to create And manipulate data frames.
    ' </summary>
    Module DataFrames

        Sub Main()

            ' Data frames can be constructed in a variety of ways.
            ' This example will use mostly static methods of the
            ' static DataFrame class.

            ' From a dictionary of column keys that map to collections:
            Dim dict = New Dictionary(Of String, Object)() From {
                    {"state", {"Ohio", "Ohio", "Ohio", "Nevada", "Nevada"}},
                    {"year", {2000, 2001, 2002, 2001, 2002}},
                    {"pop", {1.5, 1.7, 3.6, 2.4, 2.9}}}
            Dim df1 = DataFrame.FromColumns(dict)
            Console.WriteLine(df1)

            ' The data frame has a default index of row numbers.
            ' A row index can be specified as well:
            Dim df2 = DataFrame.FromColumns(New Dictionary(Of String, Object)() From {
                    {"first", {11.0, 14.0, 17.0, 93.0, 55.0}},
                    {"second", {22.0, 33.0, 43.0, 51.0, 69.0}}},
                    Index.CreateDateRange(New DateTime(2015, 4, 1), 5))
            Console.WriteLine(df2)

            ' Alternatively, the columns can be a list of collections.
            Dim rowIndex = Index.Create({"one", "two", "three", "four", "five"})
            Dim df3 = DataFrame.FromColumns(dict, rowIndex)
            Console.WriteLine(df3)
            ' If you supply a column index, only the columns with
            ' keys in the index will be retained:
            Dim columnIndex = Index.Create({"pop", "year"})
            Dim df4 = DataFrame.FromColumns(dict, rowIndex, columnIndex)
            Console.WriteLine(df4)

            ' Yet another way Is to use tuples:
            Dim CreateTuple As Func(Of String, Object, Tuple(Of String, Object)) =
                Function(x, y) Tuple.Create(x, y)
            Dim df5 = DataFrame.FromColumns(
                CreateTuple("state", {"Ohio", "Ohio", "Ohio", "Nevada", "Nevada"}),
                CreateTuple("year", {2000, 2001, 2002, 2001, 2002}),
                CreateTuple("pop", {1.5, 1.7, 3.6, 2.4, 2.9}))
            Console.WriteLine(df5)

            ' Data frames can be created from a sequence of objects.
            ' By default, all public properties are included as columns
            ' in the resulting data frame:
            Dim points =
            {
                New With {.X = 1, .Y = 5, .Z = 9},
                New With {.X = 2, .Y = 6, .Z = 10},
                New With {.X = 3, .Y = 7, .Z = 11},
                New With {.X = 4, .Y = 8, .Z = 12}
            }
            Dim df6 = DataFrame.FromObjects(points)
            Console.WriteLine(df6)
            ' It Is possible to select the properties:
            Dim df7 = DataFrame.FromObjects(points, {"Z", "X"})
            Console.WriteLine(df7)

            ' Vectors And matrices can be converted to data frames
            ' using their ToDataFrame method:
            Dim m = Matrix.CreateRandom(10, 2)
            Dim df8 = m.ToDataFrame(Index.Default(10), Index.Create({"A", "B"}))
            Dim v = Vector.CreateRandom(3)
            Dim df9 = v.ToDataFrame(Index.Create({"a", "b", "c"}), "values")

            '
            ' Import / export
            '

            ' Several methods exist for importing data frames directly
            ' from data sources Like text files, R data files, And databases.
            Dim dt = New System.Data.DataTable()
            dt.Columns.Add("x1", GetType(Double))
            dt.Columns.Add("x2", GetType(Double))
            dt.Rows.Add(New Object() {1.0, 2.0})
            dt.Rows.Add(New Object() {3.0, 4.0})
            dt.Rows.Add(New Object() {5.0, 6.0})
            Dim df11 = DataFrame.FromDataTable(dt)

            Const path = "..\..\..\..\data\"
            Dim df12 = DataFrame.ReadCsv(path + "iris.csv", hasHeaders:=False)
            ' By default, these methods return a data frame with a default
            ' index (row numbers). You can specify the column(s) to use
            ' for the index, And the data frame will use that column.
            Dim df13 = DataFrame.ReadCsv(Of Integer)(
                path + "titanic.csv", "PassengerId")
            df12.WriteCsv("irisCopy.csv", includeColumnKeys:=True,
                          includeRowKeys:=False)

            '
            ' Setting row And column indexes
            '

            ' You can use specific columns as the row index.
            ' Here we have a 2 level hierarchical index:
            Dim df1a = df1.WithRowIndex(Of String, Integer)("state", "year")

            '/ Column indexes can be changed as well:
            Dim df2b = df2.WithColumnIndex(New String() {"A", "B"})

            Console.Write("Press Enter key to exit...")
            Console.ReadLine()

        End Sub

    End Module

End Namespace