Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/03/17 14:33:09 (7 years ago)
Author:
pfleck
Message:

#2709

  • Added Check All/Inputs&Target/None Icons.
  • Improved location and formatting of the "Show Variables" groupbox in datagrid and statistics view.
  • Added an "Orientation" option for the statistics view.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataPreprocessing Enhancements/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs

    r14546 r14915  
    2121
    2222using System;
     23using System.Collections;
    2324using System.Collections.Generic;
     25using System.Linq;
    2426using System.Windows.Forms;
    2527using HeuristicLab.Core.Views;
    2628using HeuristicLab.Data;
    2729using HeuristicLab.MainForm;
     30using HeuristicLab.MainForm.WindowsForms;
    2831
    2932namespace HeuristicLab.DataPreprocessing.Views {
     
    3336  public partial class StatisticsView : ItemView {
    3437
     38    private bool horizontal = true;
     39
    3540    private StringMatrix statisticsMatrix;
    3641
    37     private static readonly string[] RowNames = new[] {
     42    private static readonly string[] StatisticsNames = new[] {
    3843      "Type",
    3944      "Missing Values",
     
    4247      "Median",
    4348      "Average",
    44       "std. Deviation",
     49      "Std. Deviation",
    4550      "Variance",
    4651      "25th Percentile",
     
    6267      base.OnContentChanged();
    6368      if (Content == null) {
    64         txtRows.Text = "";
    65         txtColumns.Text = "";
    66         txtNumericColumns.Text = "";
    67         txtNominalColumns.Text = "";
    68         txtMissingValuesTotal.Text = "";
     69        rowsTextBox.Text = string.Empty;
     70        columnsTextBox.Text = string.Empty;
     71        numericColumnsTextBox.Text = string.Empty;
     72        nominalColumnsTextBox5.Text = string.Empty;
     73        missingValuesTextBox.Text = string.Empty;
     74        totalValuesTextBox.Text = string.Empty;
    6975        stringMatrixView.Content = null;
    7076        statisticsMatrix = null;
     
    8490    }
    8591
    86     private void UpdateData() {
    87       var logic = Content.StatisticsLogic;
    88       var rowCount = logic.GetRowCount();
    89       txtRows.Text = logic.GetColumnCount().ToString();
    90       txtColumns.Text = rowCount.ToString();
    91       txtNumericColumns.Text = logic.GetNumericColumnCount().ToString();
    92       txtNominalColumns.Text = logic.GetNominalColumnCount().ToString();
    93       txtMissingValuesTotal.Text = logic.GetMissingValueCount().ToString();
    94 
    95       statisticsMatrix = new StringMatrix(RowNames.Length, Content.PreprocessingData.Columns) {
    96         RowNames = StatisticsView.RowNames,
    97         ColumnNames = Content.PreprocessingData.VariableNames
    98       };
    99 
    100       if (rowCount > 0) {
    101         for (int i = 0; i < logic.GetColumnCount(); ++i) {
    102           var data = GetList(i);
    103           for (int j = 0; j < data.Count; j++) {
     92    private void UpdateData(Dictionary<string, bool> oldVisibility = null) {
     93      var logic = Content.StatisticsLogic;
     94      rowsTextBox.Text = logic.GetColumnCount().ToString();
     95      columnsTextBox.Text = logic.GetRowCount().ToString();
     96      numericColumnsTextBox.Text = logic.GetNumericColumnCount().ToString();
     97      nominalColumnsTextBox5.Text = logic.GetNominalColumnCount().ToString();
     98      missingValuesTextBox.Text = logic.GetMissingValueCount().ToString();
     99      totalValuesTextBox.Text = (logic.GetColumnCount() * logic.GetRowCount() - logic.GetMissingValueCount()).ToString();
     100
     101      var variableNames = Content.PreprocessingData.VariableNames.ToList();
     102      if (horizontal)
     103        statisticsMatrix = new StringMatrix(StatisticsNames.Length, Content.PreprocessingData.Columns) {
     104          RowNames = StatisticsView.StatisticsNames,
     105          ColumnNames = variableNames
     106        };
     107      else
     108        statisticsMatrix = new StringMatrix(Content.PreprocessingData.Columns, StatisticsNames.Length) {
     109          RowNames = variableNames,
     110          ColumnNames = StatisticsView.StatisticsNames
     111        };
     112
     113      for (int i = 0; i < logic.GetColumnCount(); i++) {
     114        var data = GetStatistics(i);
     115        for (int j = 0; j < data.Count; j++) {
     116          if (horizontal)
    104117            statisticsMatrix[j, i] = data[j];
    105           }
    106         }
    107       }
     118          else
     119            statisticsMatrix[i, j] = data[j];
     120        }
     121      }
     122
     123      stringMatrixView.Parent.SuspendRepaint();
    108124      stringMatrixView.Content = statisticsMatrix;
    109125
    110       foreach (DataGridViewColumn column in stringMatrixView.DataGridView.Columns) {
    111         var variable = column.HeaderText;
    112         bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable)
    113                              || Content.PreprocessingData.TargetVariable == variable;
    114         column.Visible = isInputTarget;
    115       }
     126      var grid = stringMatrixView.DataGridView;
     127      int idx = 0;
     128      var list = horizontal ? grid.Columns : grid.Rows as IList;
     129      foreach (DataGridViewBand band in list) {
     130        var variable = variableNames[idx++];
     131        if (oldVisibility != null) {
     132          band.Visible = !oldVisibility.ContainsKey(variable) || oldVisibility[variable];
     133        }
     134      }
     135      if (horizontal)
     136        stringMatrixView.UpdateColumnHeaders();
     137      else
     138        stringMatrixView.UpdateRowHeaders();
     139
    116140      stringMatrixView.DataGridView.AutoResizeColumns();
    117 
    118       //foreach (DataGridViewRow row in stringMatrixView.DataGridView.Rows) {
    119       //  var variable = (string)row.HeaderCell.Value;
    120       //  bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable)
    121       //                       || Content.PreprocessingData.TargetVariable == variable;
    122       //  row.Visible = isInputTarget;
    123       //}
    124     }
    125 
    126     private List<string> GetList(int i) {
     141      stringMatrixView.Parent.ResumeRepaint(true);
     142    }
     143
     144    private List<string> GetStatistics(int varIdx) {
    127145      List<string> list;
    128146      var logic = Content.StatisticsLogic;
    129       if (logic.VariableHasType<double>(i)) {
    130         list = GetDoubleColumns(i);
    131       } else if (logic.VariableHasType<string>(i)) {
    132         list = GetStringColumns(i);
    133       } else if (logic.VariableHasType<DateTime>(i)) {
    134         list = GetDateTimeColumns(i);
     147      if (logic.VariableHasType<double>(varIdx)) {
     148        list = GetDoubleColumns(varIdx);
     149      } else if (logic.VariableHasType<string>(varIdx)) {
     150        list = GetStringColumns(varIdx);
     151      } else if (logic.VariableHasType<DateTime>(varIdx)) {
     152        list = GetDateTimeColumns(varIdx);
    135153      } else {
    136154        list = new List<string>();
    137         for (int j = 0; j < RowNames.Length; ++j) {
     155        for (int j = 0; j < StatisticsNames.Length; ++j) {
    138156          list.Add("unknown column type");
    139157        }
     
    142160    }
    143161
    144     private List<string> GetDoubleColumns(int columnIndex) {
     162    private List<string> GetDoubleColumns(int statIdx) {
    145163      var logic = Content.StatisticsLogic;
    146164      return new List<string> {
    147         logic.GetColumnTypeAsString(columnIndex),
    148         logic.GetMissingValueCount(columnIndex).ToString(),
    149         logic.GetMin<double>(columnIndex,double.NaN).ToString(),
    150         logic.GetMax<double>(columnIndex,double.NaN).ToString(),
    151         logic.GetMedian(columnIndex).ToString(),
    152         logic.GetAverage(columnIndex).ToString(),
    153         logic.GetStandardDeviation(columnIndex).ToString(),
    154         logic.GetVariance(columnIndex).ToString(),
    155         logic.GetOneQuarterPercentile(columnIndex).ToString(),
    156         logic.GetThreeQuarterPercentile(columnIndex).ToString(),
    157         logic.GetMostCommonValue<double>(columnIndex,double.NaN).ToString(),
    158         logic.GetDifferentValuesCount<double>(columnIndex).ToString()
     165        logic.GetColumnTypeAsString(statIdx),
     166        logic.GetMissingValueCount(statIdx).ToString(),
     167        logic.GetMin<double>(statIdx, double.NaN).ToString(),
     168        logic.GetMax<double>(statIdx, double.NaN).ToString(),
     169        logic.GetMedian(statIdx).ToString(),
     170        logic.GetAverage(statIdx).ToString(),
     171        logic.GetStandardDeviation(statIdx).ToString(),
     172        logic.GetVariance(statIdx).ToString(),
     173        logic.GetOneQuarterPercentile(statIdx).ToString(),
     174        logic.GetThreeQuarterPercentile(statIdx).ToString(),
     175        logic.GetMostCommonValue<double>(statIdx, double.NaN).ToString(),
     176        logic.GetDifferentValuesCount<double>(statIdx).ToString()
    159177      };
    160178    }
    161179
    162     private List<string> GetStringColumns(int columnIndex) {
     180    private List<string> GetStringColumns(int statIdx) {
    163181      var logic = Content.StatisticsLogic;
    164182      return new List<string> {
    165         logic.GetColumnTypeAsString(columnIndex),
    166         logic.GetMissingValueCount(columnIndex).ToString(),
     183        logic.GetColumnTypeAsString(statIdx),
     184        logic.GetMissingValueCount(statIdx).ToString(),
    167185        "", //min
    168186        "", //max
     
    173191        "", //quarter percentile
    174192        "", //three quarter percentile
    175         logic.GetMostCommonValue<string>(columnIndex,string.Empty) ?? "",
    176         logic.GetDifferentValuesCount<string>(columnIndex).ToString()
     193        logic.GetMostCommonValue<string>(statIdx,string.Empty) ?? "",
     194        logic.GetDifferentValuesCount<string>(statIdx).ToString()
    177195      };
    178196    }
    179197
    180     private List<string> GetDateTimeColumns(int columnIndex) {
     198    private List<string> GetDateTimeColumns(int statIdx) {
    181199      var logic = Content.StatisticsLogic;
    182200      return new List<string> {
    183         logic.GetColumnTypeAsString(columnIndex),
    184         logic.GetMissingValueCount(columnIndex).ToString(),
    185         logic.GetMin<DateTime>(columnIndex,DateTime.MinValue).ToString(),
    186         logic.GetMax<DateTime>(columnIndex,DateTime.MinValue).ToString(),
    187         logic.GetMedianDateTime(columnIndex).ToString(),
    188         logic.GetAverageDateTime(columnIndex).ToString(),
    189         logic.GetStandardDeviation(columnIndex).ToString(),
    190         logic.GetVariance(columnIndex).ToString(), //variance
    191         logic.GetOneQuarterPercentile(columnIndex).ToString(),
    192         logic.GetThreeQuarterPercentile(columnIndex).ToString(),
    193         logic.GetMostCommonValue<DateTime>(columnIndex,DateTime.MinValue).ToString(),
    194         logic.GetDifferentValuesCount<DateTime>(columnIndex).ToString()
     201        logic.GetColumnTypeAsString(statIdx),
     202        logic.GetMissingValueCount(statIdx).ToString(),
     203        logic.GetMin<DateTime>(statIdx, DateTime.MinValue).ToString(),
     204        logic.GetMax<DateTime>(statIdx, DateTime.MinValue).ToString(),
     205        logic.GetMedianDateTime(statIdx).ToString(),
     206        logic.GetAverageDateTime(statIdx).ToString(),
     207        logic.GetStandardDeviation(statIdx).ToString(),
     208        logic.GetVariance(statIdx).ToString(),
     209        logic.GetOneQuarterPercentile(statIdx).ToString(),
     210        logic.GetThreeQuarterPercentile(statIdx).ToString(),
     211        logic.GetMostCommonValue<DateTime>(statIdx, DateTime.MinValue).ToString(),
     212        logic.GetDifferentValuesCount<DateTime>(statIdx).ToString()
    195213      };
    196214    }
     
    200218    }
    201219
     220    #region Show/Hide Variables
    202221    private void checkInputsTargetButton_Click(object sender, EventArgs e) {
    203       foreach (DataGridViewColumn column in stringMatrixView.DataGridView.Columns) {
    204         var variable = column.HeaderText;
     222      var grid = stringMatrixView.DataGridView;
     223      var list = horizontal ? grid.Columns : grid.Rows as IList;
     224      var variableNames = Content.PreprocessingData.VariableNames.ToList();
     225      int idx = 0;
     226      foreach (DataGridViewBand band in list) {
     227        var variable = variableNames[idx++];
    205228        bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable)
    206229                             || Content.PreprocessingData.TargetVariable == variable;
    207         column.Visible = isInputTarget;
    208       }
    209     }
    210 
     230        band.Visible = isInputTarget;
     231        if (horizontal)
     232          stringMatrixView.UpdateColumnHeaders();
     233        else
     234          stringMatrixView.UpdateRowHeaders();
     235      }
     236
     237    }
    211238    private void checkAllButton_Click(object sender, EventArgs e) {
    212       foreach (DataGridViewColumn column in stringMatrixView.DataGridView.Columns) {
    213         column.Visible = true;
    214       }
    215     }
    216 
     239      var grid = stringMatrixView.DataGridView;
     240      var list = horizontal ? grid.Columns : grid.Rows as IList;
     241      foreach (DataGridViewBand band in list) {
     242        band.Visible = true;
     243      }
     244      if (horizontal)
     245        stringMatrixView.UpdateColumnHeaders();
     246      else
     247        stringMatrixView.UpdateRowHeaders();
     248    }
    217249    private void uncheckAllButton_Click(object sender, EventArgs e) {
    218       foreach (DataGridViewColumn column in stringMatrixView.DataGridView.Columns) {
    219         column.Visible = false;
    220       }
    221     }
     250      var grid = stringMatrixView.DataGridView;
     251      var list = horizontal ? grid.Columns : grid.Rows as IList;
     252      foreach (DataGridViewBand band in list) {
     253        band.Visible = false;
     254      }
     255    }
     256    #endregion
     257
     258    #region Orientation
     259    private void horizontalRadioButton_CheckedChanged(object sender, EventArgs e) {
     260      var grid = stringMatrixView.DataGridView;
     261      var oldVisibility = new Dictionary<string, bool>();
     262      var variableNames = Content.PreprocessingData.VariableNames.ToList();
     263      if (stringMatrixView.Content != null) {
     264        var list = horizontal ? grid.Columns : grid.Rows as IList;
     265        int idx = 0;
     266        foreach (DataGridViewBand band in list) {
     267          var variable = variableNames[idx++];
     268          oldVisibility.Add(variable, band.Visible);
     269        }
     270      }
     271      horizontal = horizontalRadioButton.Checked;
     272      UpdateData(oldVisibility);
     273    }
     274    private void verticalRadioButton_CheckedChanged(object sender, EventArgs e) {
     275      // everything is handled in horizontalRadioButton_CheckedChanged
     276    }
     277    #endregion
    222278  }
    223279}
Note: See TracChangeset for help on using the changeset viewer.