C# Stats Functions Example

← All NMath Code Examples

 

using System;
using System.IO;
using System.Collections;

using CenterSpace.NMath.Core;

namespace CenterSpace.NMath.Examples.CSharp
{
  /// <summary>
  /// A .NET example in C# showing how to use the descriptive statistics functions of the
  /// StatsFunctions class.
  /// </summary>
  class StatsFunctionsExample
  {

    static void Main( string[] args )
    {
      // Read in data from a comma-delimited file. Data has age, gender, grade
      // columns.

      // Specify the data file, whether it includes headers, whether it has row keys,
      // the delimiter, and whether to try to parse data into non-generic types.
      DataFrame data = DataFrame.Load( "StatsFunctionsExample.dat", true, false, ",", true );

      // Print out all data.
      Console.WriteLine();
      Console.WriteLine( data );
      Console.WriteLine();

      // Print out top grade
      Console.WriteLine( "highest grade.. " + StatsFunctions.MaxValue( data["Grade"] ) );
      Console.WriteLine();

      // How many male and female students are there?
      IDictionary counts = StatsFunctions.Counts( data["Gender"] );
      Console.Write( "There are " + counts["Male"] + " male students and " );
      Console.WriteLine( counts["Female"] + " female students." );
      Console.WriteLine();

      // Mean, median, mode grades
      Console.WriteLine( "mean grade: " + StatsFunctions.Mean( data["Grade"] ) );
      Console.WriteLine( "median grade: " + StatsFunctions.Median( data["Grade"] ) );
      Console.WriteLine( "most common grade: " + StatsFunctions.Mode( data["Grade"] ) );
      Console.WriteLine();

      // Is there a correlation between age and grade?
      double correlation = StatsFunctions.Correlation( data["Age"], data["Grade"] );
      if ( correlation > 0.0 )
      {
        Console.WriteLine( "There is a positive correlation of " + correlation.ToString( "F2" ) +
          " between age and grade." );
        Console.WriteLine();
      }

      // What percentage of students pass with a 50% passing rate?  60%?
      Console.WriteLine( "Percentage passing with 50% cutoff: " +
        ( 1.0 - StatsFunctions.PercentileRank( data["Grade"], 50 ) ).ToString( "P2" ) );
      Console.WriteLine( "Percentage passing with 50% cutoff: " +
        ( 1.0 - StatsFunctions.PercentileRank( data["Grade"], 60 ) ).ToString( "P2" ) );
      Console.WriteLine();

      // Percentiles
      Console.WriteLine( "Interquartile range is " + StatsFunctions.InterquartileRange( data["Grade"] ) );
      Console.WriteLine( "Whats the 80th percentile? " + StatsFunctions.Percentile( data["Grade"], 0.8 ) );
      Console.WriteLine();

      // Split by gender and do descriptive statistics
      Factor gender = data.GetFactor( "Gender" );
      Subset[] genderGroups = Subset.GetGroupings( gender );
      for ( int i = 0; i < genderGroups.Length; i++ )
      {
        DataFrame genderSpecific = data.GetRows( genderGroups[i] );
        Console.WriteLine( gender.Levels[i] + " students..." );
        Console.WriteLine( "mean grade: " + StatsFunctions.Mean( genderSpecific["Grade"] ).ToString( "F2" ) );
        Console.WriteLine( "median grade: " + StatsFunctions.Median( genderSpecific["Grade"] ) );
        Console.WriteLine( "most common grade: " + StatsFunctions.Mode( genderSpecific["Grade"] ) );
        Console.WriteLine();
      }

      // Young students
      DataFrame young = data[new Subset( StatsFunctions.If( data["Age"],
        new Func<double, bool>( Young ) ) ), Slice.All];
      Console.WriteLine( "Young students..." );
      Console.WriteLine( "mean grade: " + StatsFunctions.Mean( young["Grade"] ).ToString( "F2" ) );
      Console.WriteLine( "median grade: " + StatsFunctions.Median( young["Grade"] ) );
      Console.WriteLine( "most common grade: " + StatsFunctions.Mode( young["Grade"] ) );
      Console.WriteLine();

      // Top grade by a young student?
      double top = StatsFunctions.MaxValue( young["Grade"] );
      Console.WriteLine( "Top grade by a young student was... " + top );

      // What percentage of the whole group beat the top-ranked young student?
      Console.Write( "Percentage beating top-ranked young student... " );
      Console.WriteLine( ( 1.0 - StatsFunctions.PercentileRank( data["Grade"], top ) ).ToString( "P2" ) );

      Console.WriteLine();
      Console.WriteLine( "Press Enter Key" );
      Console.Read();

    }  // Main

    private static bool Young( double age )
    {
      return age < 20.0;
    }

  }  // class

}  // namespace


← All NMath Code Examples
Top