[TOC]
using System;
using CenterSpace.NMath.Core;
using CenterSpace.NMath.Stats;
namespace CenterSpace.NMath.Stats.Examples.CSharp
{
/// <summary>
/// A .NET example in C# showing how to use the Apply and Transform methods on
/// a DataFrame and its columns.
/// </summary>
class ApplyTransformExample
{
private static DataFrame data;
static void Main(string[] args)
{
Console.WriteLine();
data = new DataFrame();
data.AddColumn(new DFStringColumn("first"));
data.AddColumn(new DFStringColumn("last"));
data.AddColumn(new DFDateTimeColumn("birthdate"));
data.AddColumn(new DFNumericColumn("test1"));
data.AddColumn(new DFNumericColumn("test2"));
InitializeData();
Console.WriteLine();
Console.WriteLine("Original data...");
Console.WriteLine();
Console.WriteLine(data);
// Combine first name and last name columns into a new
// column and then add it to the data frame.
NMathFunctions.StringBinaryFunction concatenate = new NMathFunctions.StringBinaryFunction(CombineNames);
DFStringColumn fullNames = ((DFStringColumn)data["first"]).Apply("full names", concatenate, (DFStringColumn)data["last"]);
data.InsertColumn(0, fullNames);
// Remove first name, last name columns
data.RemoveColumn("first");
data.RemoveColumn("last");
Console.WriteLine();
Console.WriteLine("Concatenate first and last names...");
Console.WriteLine();
Console.WriteLine(data);
/// Scale all test2 scores up by 10 points
((DFNumericColumn)data["test2"]).Transform(new NMathFunctions.DoubleUnaryFunction(Scale));
Console.WriteLine();
Console.WriteLine("Scale test2 up by 10%...");
Console.WriteLine();
Console.WriteLine(data);
// Cap all grades at 95
((DFNumericColumn)data["test1"]).Transform(new NMathFunctions.DoubleUnaryFunction(Cap));
((DFNumericColumn)data["test2"]).Transform(new NMathFunctions.DoubleUnaryFunction(Cap));
Console.WriteLine();
Console.WriteLine("Cap grades at 95%...");
Console.WriteLine();
Console.WriteLine(data);
// Add a new column which is the weighted average of the two tests
NMathFunctions.DoubleBinaryFunction weighted = new NMathFunctions.DoubleBinaryFunction(Weighted);
DFNumericColumn final = ((DFNumericColumn)data["test1"]).Apply("final", weighted, (DFNumericColumn)data["test2"]);
data.AddColumn(final);
Console.WriteLine();
Console.WriteLine("Final weighted average...");
Console.WriteLine();
Console.WriteLine(data);
// Round all numeric values to the nearest whole number
((DFNumericColumn)data["test1"]).Transform(new NMathFunctions.DoubleIntFunction(System.Math.Round), 1);
((DFNumericColumn)data["test1"]).NumericFormat = "F1";
((DFNumericColumn)data["test2"]).Transform(new NMathFunctions.DoubleIntFunction(System.Math.Round), 1);
((DFNumericColumn)data["test2"]).NumericFormat = "F1";
((DFNumericColumn)data["final"]).Transform(new NMathFunctions.DoubleIntFunction(System.Math.Round), 1);
((DFNumericColumn)data["final"]).NumericFormat = "F1";
Console.WriteLine();
Console.WriteLine("Round to one decimal place...");
Console.WriteLine();
Console.WriteLine(data);
Console.WriteLine();
Console.WriteLine("Press Enter Key");
Console.Read();
}
private static void InitializeData()
{
data.AddRow(1, "Jack", "Cooper", "1/29/1968", 55.4, 63.3);
data.AddRow(2, "Henri", "Robert", "12/4/1978", 85.6, 90.2);
data.AddRow(3, "Sasha", "Klein", "5/7/1947", 65.4, 64.3);
data.AddRow(4, "Gail", "Blake", "8/4/1985", 75.1, 48.2);
data.AddRow(5, "Paul", "Norton", "9/21/1981", 55.4, 62.3);
data.AddRow(6, "Harry", "Liu", "10/12/1972", 85.6, 87.3);
data.AddRow(7, "Roberto", "Ortiz", "11/3/1978", 59.2, 93.3);
data.AddRow(8, "Marie", "Flint", "4/5/1972", 66.7, 38.2);
}
private static string CombineNames(string first, string last)
{
return first + " " + last;
}
private static double Scale(double score)
{
return score + 10.0;
}
private static double Cap(double score)
{
return score > 95.0 ? 95.0 : score;
}
private static double Weighted(double test1, double test2)
{
return (0.4 * test1) + (0.6 * test2);
}
// private static bool
} // class
} // namespace
[TOC]