Free cookie consent management tool by TermsFeed Policy Generator

Changeset 10624


Ignore:
Timestamp:
03/19/14 14:02:37 (11 years ago)
Author:
mleitner
Message:

Filter undefined values on statistics

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/StatisticsLogic.cs

    r10613 r10624  
    2525using HeuristicLab.Common;
    2626
    27 namespace HeuristicLab.DataPreprocessing {
    28 
    29   public class StatisticsLogic : IStatisticsLogic {
     27namespace HeuristicLab.DataPreprocessing
     28{
     29
     30  public class StatisticsLogic : IStatisticsLogic
     31  {
    3032
    3133    private readonly ITransactionalPreprocessingData preprocessingData;
    3234    private readonly ISearchLogic searchLogic;
    3335
    34     public StatisticsLogic(ITransactionalPreprocessingData thePreprocessingData, ISearchLogic theSearchLogic) {
     36    public StatisticsLogic(ITransactionalPreprocessingData thePreprocessingData, ISearchLogic theSearchLogic)
     37    {
    3538      preprocessingData = thePreprocessingData;
    3639      searchLogic = theSearchLogic;
    3740    }
    3841
    39     public int GetColumnCount() {
     42    public int GetColumnCount()
     43    {
    4044      return preprocessingData.Columns;
    4145    }
    4246
    43     public int GetRowCount() {
     47    public int GetRowCount()
     48    {
    4449      return preprocessingData.Rows;
    4550    }
    4651
    47     public int GetNumericColumnCount() {
     52    public int GetNumericColumnCount()
     53    {
    4854      int count = 0;
    4955
    50       for (int i = 0; i < preprocessingData.Columns; ++i) {
    51         if (preprocessingData.IsType<double>(i)) {
     56      for (int i = 0; i < preprocessingData.Columns; ++i)
     57      {
     58        if (preprocessingData.IsType<double>(i))
     59        {
    5260          ++count;
    5361        }
     
    5664    }
    5765
    58     public int GetNominalColumnCount() {
     66    public int GetNominalColumnCount()
     67    {
    5968      return preprocessingData.Columns - GetNumericColumnCount();
    6069    }
    6170
    62     public int GetMissingValueCount() {
     71    public int GetMissingValueCount()
     72    {
    6373      int count = 0;
    64       for (int i = 0; i < preprocessingData.Columns; ++i) {
     74      for (int i = 0; i < preprocessingData.Columns; ++i)
     75      {
    6576        count += GetMissingValueCount(i);
    6677      }
     
    6879    }
    6980
    70     public int GetMissingValueCount(int columnIndex) {
     81    public int GetMissingValueCount(int columnIndex)
     82    {
    7183      return searchLogic.GetMissingValueIndices(columnIndex).Count();
    7284    }
    7385
    74     public T GetMin<T>(int columnIndex) where T : IComparable<T> {
     86    public T GetMin<T>(int columnIndex) where T : IComparable<T>
     87    {
    7588      return preprocessingData.GetValues<T>(columnIndex).Min();
    7689    }
    7790
    78     public T GetMax<T>(int columnIndex) where T : IComparable<T> {
     91    public T GetMax<T>(int columnIndex) where T : IComparable<T>
     92    {
    7993      return preprocessingData.GetValues<T>(columnIndex).Max();
    8094    }
    8195
    82     public double GetMedian(int columnIndex) {
     96    public double GetMedian(int columnIndex)
     97    {
    8398      double median = double.NaN;
    84       if (preprocessingData.IsType<double>(columnIndex)) {
    85         median = preprocessingData.GetValues<double>(columnIndex).Median();
     99      if (preprocessingData.IsType<double>(columnIndex))
     100      {
     101        median = GetValuesWithoutNaN<double>(columnIndex).Median();
    86102      }
    87103      return median;
    88104    }
    89105
    90     public double GetAverage(int columnIndex) {
     106    public double GetAverage(int columnIndex)
     107    {
    91108      double avg = double.NaN;
    92       if (preprocessingData.IsType<double>(columnIndex)) {
    93         avg = preprocessingData.GetValues<double>(columnIndex).Average();
     109      if (preprocessingData.IsType<double>(columnIndex))
     110      {
     111        avg = GetValuesWithoutNaN<double>(columnIndex).Where(x => !double.IsNaN(x)).Average();
    94112      }
    95113      return avg;
    96114    }
    97115
    98     public DateTime GetMedianDateTime(int columnIndex) {
     116    public DateTime GetMedianDateTime(int columnIndex)
     117    {
    99118      DateTime median = new DateTime();
    100       if (preprocessingData.IsType<DateTime>(columnIndex)) {
     119      if (preprocessingData.IsType<DateTime>(columnIndex))
     120      {
    101121        median = GetSecondsAsDateTime(GetDateTimeAsSeconds(columnIndex).Median());
    102122      }
     
    104124    }
    105125
    106     public DateTime GetAverageDateTime(int columnIndex) {
     126    public DateTime GetAverageDateTime(int columnIndex)
     127    {
    107128      DateTime avg = new DateTime();
    108       if (preprocessingData.IsType<DateTime>(columnIndex)) {
     129      if (preprocessingData.IsType<DateTime>(columnIndex))
     130      {
    109131        avg = GetSecondsAsDateTime(GetDateTimeAsSeconds(columnIndex).Average());
    110132      }
     
    112134    }
    113135
    114     public T GetMostCommonValue<T>(int columnIndex) {
     136    public T GetMostCommonValue<T>(int columnIndex)
     137    {
    115138      var t = preprocessingData.GetValues<T>(columnIndex);
    116139      var t2 = t.GroupBy(x => x);
     
    125148
    126149
    127     public double GetStandardDeviation(int columnIndex) {
     150    public double GetStandardDeviation(int columnIndex)
     151    {
    128152      double stdDev = double.NaN;
    129       if (preprocessingData.IsType<double>(columnIndex)) {
    130         stdDev = preprocessingData.GetValues<double>(columnIndex).StandardDeviation();
    131       } else if (preprocessingData.IsType<DateTime>(columnIndex)) {
     153      if (preprocessingData.IsType<double>(columnIndex))
     154      {
     155        stdDev = GetValuesWithoutNaN<double>(columnIndex).StandardDeviation();
     156      }
     157      else if (preprocessingData.IsType<DateTime>(columnIndex))
     158      {
    132159        stdDev = GetDateTimeAsSeconds(columnIndex).StandardDeviation();
    133160      }
     
    135162    }
    136163
    137     public double GetVariance(int columnIndex) {
     164    public double GetVariance(int columnIndex)
     165    {
    138166      double variance = double.NaN;
    139       if (preprocessingData.IsType<double>(columnIndex)) {
     167      if (preprocessingData.IsType<double>(columnIndex))
     168      {
    140169        variance = preprocessingData.GetValues<double>(columnIndex).Variance();
    141       } else if (preprocessingData.IsType<DateTime>(columnIndex)) {
     170      }
     171      else if (preprocessingData.IsType<DateTime>(columnIndex))
     172      {
    142173        variance = GetDateTimeAsSeconds(columnIndex).Variance();
    143174      }
     
    145176    }
    146177
    147     public int GetDifferentValuesCount<T>(int columnIndex) {
     178    public int GetDifferentValuesCount<T>(int columnIndex)
     179    {
    148180      return preprocessingData.GetValues<T>(columnIndex).GroupBy(x => x).Count();
    149181    }
    150182
    151     public int GetRowMissingValueCount(int rowIndex) {
     183    public int GetRowMissingValueCount(int rowIndex)
     184    {
    152185      int count = 0;
    153       for (int i = 0; i < preprocessingData.Columns; ++i) {
    154         if (searchLogic.IsMissingValue(i, rowIndex)) {
     186      for (int i = 0; i < preprocessingData.Columns; ++i)
     187      {
     188        if (searchLogic.IsMissingValue(i, rowIndex))
     189        {
    155190          ++count;
    156191        }
     
    159194    }
    160195
    161     public string GetVariableName(int columnIndex) {
     196    public string GetVariableName(int columnIndex)
     197    {
    162198      return preprocessingData.GetVariableName(columnIndex);
    163199    }
    164200
    165     public bool IsType<T>(int columnIndex) {
     201    public bool IsType<T>(int columnIndex)
     202    {
    166203      return preprocessingData.IsType<T>(columnIndex);
    167204    }
    168205
    169     public string GetColumnTypeAsString(int columnIndex) {
    170       if (preprocessingData.IsType<double>(columnIndex)) {
     206    public string GetColumnTypeAsString(int columnIndex)
     207    {
     208      if (preprocessingData.IsType<double>(columnIndex))
     209      {
    171210        return "double";
    172       } else if (preprocessingData.IsType<string>(columnIndex)) {
     211      }
     212      else if (preprocessingData.IsType<string>(columnIndex))
     213      {
    173214        return "string";
    174       } else if (preprocessingData.IsType<DateTime>(columnIndex)) {
     215      }
     216      else if (preprocessingData.IsType<DateTime>(columnIndex))
     217      {
    175218        return "DateTime";
    176219      }
    177220      return "Unknown Type";
    178221    }
    179     private IEnumerable<double> GetDateTimeAsSeconds(int columnIndex) {
    180       return preprocessingData.GetValues<DateTime>(columnIndex).Select(x => (double)x.Ticks / TimeSpan.TicksPerSecond);
    181     }
    182 
    183     private DateTime GetSecondsAsDateTime(double seconds) {
     222
     223    private List<T> GetValuesWithoutNaN<T>(int columnIndex)
     224    {
     225      IEnumerable<int> missing = searchLogic.GetMissingValueIndices(columnIndex);
     226      return (List<T>)preprocessingData.GetValues<T>(columnIndex).Select((v, i) => new { i, v }).Where(x => !missing.Contains(x.i));
     227    }
     228    private IEnumerable<double> GetDateTimeAsSeconds(int columnIndex)
     229    {
     230      return GetValuesWithoutNaN<DateTime>(columnIndex).Select(x => (double)x.Ticks / TimeSpan.TicksPerSecond);
     231    }
     232
     233    private DateTime GetSecondsAsDateTime(double seconds)
     234    {
    184235      DateTime dateTime = new DateTime();
    185236      return dateTime.AddSeconds(seconds);
    186237    }
    187238
    188     public event DataPreprocessingChangedEventHandler Changed {
     239    public event DataPreprocessingChangedEventHandler Changed
     240    {
    189241      add { preprocessingData.Changed += value; }
    190242      remove { preprocessingData.Changed -= value; }
Note: See TracChangeset for help on using the changeset viewer.