Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/03/17 10:57:53 (7 years ago)
Author:
pfleck
Message:

#2709: merged branch to trunk

Location:
trunk/sources/HeuristicLab.DataPreprocessing.Views
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.DataPreprocessing.Views

  • trunk/sources/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs

    r14185 r15110  
    2121
    2222using System;
     23using System.Collections;
    2324using System.Collections.Generic;
     25using System.Linq;
    2426using System.Windows.Forms;
    2527using HeuristicLab.Core.Views;
     28using HeuristicLab.Data;
    2629using HeuristicLab.MainForm;
     30using HeuristicLab.MainForm.WindowsForms;
    2731
    2832namespace HeuristicLab.DataPreprocessing.Views {
    29 
    3033  [View("Statistics View")]
    3134  [Content(typeof(StatisticsContent), true)]
    3235  public partial class StatisticsView : ItemView {
    33 
    34     private List<List<string>> columnsRowsMatrix;
    35     private readonly int COLUMNS = 12;
     36    private bool horizontal = true;
     37    private StringMatrix statisticsMatrix;
     38    private static readonly string[] StatisticsNames = new[] {
     39      "Type",
     40      "Missing Values",
     41      "Min",
     42      "Max",
     43      "Median",
     44      "Average",
     45      "Std. Deviation",
     46      "Variance",
     47      "25th Percentile",
     48      "75th Percentile",
     49      "Most Common Value",
     50      "Num. diff. Values"
     51    };
    3652
    3753    public new StatisticsContent Content {
     
    4763      base.OnContentChanged();
    4864      if (Content == null) {
    49         txtRows.Text = "";
    50         txtColumns.Text = "";
    51         txtNumericColumns.Text = "";
    52         txtNominalColumns.Text = "";
    53         txtMissingValuesTotal.Text = "";
    54         dataGridView.Columns.Clear();
     65        rowsTextBox.Text = string.Empty;
     66        columnsTextBox.Text = string.Empty;
     67        numericColumnsTextBox.Text = string.Empty;
     68        nominalColumnsTextBox5.Text = string.Empty;
     69        missingValuesTextBox.Text = string.Empty;
     70        totalValuesTextBox.Text = string.Empty;
     71        stringMatrixView.Content = null;
     72        statisticsMatrix = null;
    5573      } else {
    5674        UpdateData();
     
    5876    }
    5977
    60     /// <summary>
    61     /// Adds eventhandlers to the current instance.
    62     /// </summary>
    6378    protected override void RegisterContentEvents() {
     79      base.RegisterContentEvents();
    6480      Content.Changed += Content_Changed;
    6581    }
    6682
    67 
    68     /// <summary>
    69     /// Removes the eventhandlers from the current instance.
    70     /// </summary>
    7183    protected override void DeregisterContentEvents() {
    7284      Content.Changed -= Content_Changed;
    73     }
    74 
    75     private void UpdateData() {
    76       var logic = Content.StatisticsLogic;
    77       var rowCount = logic.GetRowCount();
    78       txtRows.Text = rowCount.ToString();
    79       txtColumns.Text = logic.GetColumnCount().ToString();
    80       txtNumericColumns.Text = logic.GetNumericColumnCount().ToString();
    81       txtNominalColumns.Text = logic.GetNominalColumnCount().ToString();
    82       txtMissingValuesTotal.Text = logic.GetMissingValueCount().ToString();
    83 
    84       columnsRowsMatrix = new List<List<string>>();
    85       DataGridViewColumn[] columns = new DataGridViewColumn[COLUMNS];
    86       for (int i = 0; i < COLUMNS; ++i) {
    87         var column = new DataGridViewTextBoxColumn();
    88         column.SortMode = DataGridViewColumnSortMode.Automatic;
    89         column.FillWeight = 1;
    90         columns[i] = column;
    91       }
    92 
    93       columns[0].HeaderCell.Value = "Type";
    94       columns[1].HeaderCell.Value = "Missing Values";
    95       columns[2].HeaderCell.Value = "Min";
    96       columns[3].HeaderCell.Value = "Max";
    97       columns[4].HeaderCell.Value = "Median";
    98       columns[5].HeaderCell.Value = "Average";
    99       columns[6].HeaderCell.Value = "std. Deviation";
    100       columns[7].HeaderCell.Value = "Variance";
    101       columns[8].HeaderCell.Value = "25th Percentile";
    102       columns[9].HeaderCell.Value = "75th Percentile";
    103       columns[10].HeaderCell.Value = "Most Common Value";
    104       columns[11].HeaderCell.Value = "Num. diff. Values";
    105 
    106       if (rowCount > 0) {
    107         for (int i = 0; i < logic.GetColumnCount(); ++i) {
    108           columnsRowsMatrix.Add(GetList(i));
    109         }
    110       }
    111 
    112       dataGridView.Columns.Clear();
    113       dataGridView.Columns.AddRange(columns);
    114       dataGridView.RowCount = columnsRowsMatrix.Count;
    115 
    116       for (int i = 0; i < columnsRowsMatrix.Count; ++i) {
    117         dataGridView.Rows[i].HeaderCell.Value = logic.GetVariableName(i);
    118       }
    119 
    120       dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);
    121       dataGridView.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    122       dataGridView.AllowUserToResizeColumns = true;
    123     }
    124 
    125     private List<string> GetList(int i) {
     85      base.DeregisterContentEvents();
     86    }
     87
     88    private void UpdateData(Dictionary<string, bool> oldVisibility = null) {
     89      var logic = Content.StatisticsLogic;
     90      rowsTextBox.Text = logic.GetRowCount().ToString();
     91      columnsTextBox.Text = logic.GetColumnCount().ToString();
     92      numericColumnsTextBox.Text = logic.GetNumericColumnCount().ToString();
     93      nominalColumnsTextBox5.Text = logic.GetNominalColumnCount().ToString();
     94      missingValuesTextBox.Text = logic.GetMissingValueCount().ToString();
     95      totalValuesTextBox.Text = (logic.GetColumnCount() * logic.GetRowCount() - logic.GetMissingValueCount()).ToString();
     96
     97      var variableNames = Content.PreprocessingData.VariableNames.ToList();
     98      if (horizontal)
     99        statisticsMatrix = new StringMatrix(StatisticsNames.Length, Content.PreprocessingData.Columns) {
     100          RowNames = StatisticsView.StatisticsNames,
     101          ColumnNames = variableNames
     102        };
     103      else
     104        statisticsMatrix = new StringMatrix(Content.PreprocessingData.Columns, StatisticsNames.Length) {
     105          RowNames = variableNames,
     106          ColumnNames = StatisticsView.StatisticsNames
     107        };
     108
     109      for (int i = 0; i < logic.GetColumnCount(); i++) {
     110        var data = GetStatistics(i);
     111        for (int j = 0; j < data.Count; j++) {
     112          if (horizontal)
     113            statisticsMatrix[j, i] = data[j];
     114          else
     115            statisticsMatrix[i, j] = data[j];
     116        }
     117      }
     118
     119      stringMatrixView.Parent.SuspendRepaint();
     120      stringMatrixView.Content = statisticsMatrix;
     121
     122      var grid = stringMatrixView.DataGridView;
     123      int idx = 0;
     124      var list = horizontal ? grid.Columns : grid.Rows as IList;
     125      foreach (DataGridViewBand band in list) {
     126        var variable = variableNames[idx++];
     127        if (oldVisibility != null) {
     128          band.Visible = !oldVisibility.ContainsKey(variable) || oldVisibility[variable];
     129        }
     130      }
     131      if (horizontal)
     132        stringMatrixView.UpdateColumnHeaders();
     133      else
     134        stringMatrixView.UpdateRowHeaders();
     135
     136      stringMatrixView.DataGridView.AutoResizeColumns();
     137      stringMatrixView.Parent.ResumeRepaint(true);
     138    }
     139
     140    private List<string> GetStatistics(int varIdx) {
    126141      List<string> list;
    127142      var logic = Content.StatisticsLogic;
    128       if (logic.VariableHasType<double>(i)) {
    129         list = GetDoubleColumns(i);
    130       } else if (logic.VariableHasType<string>(i)) {
    131         list = GetStringColumns(i);
    132       } else if (logic.VariableHasType<DateTime>(i)) {
    133         list = GetDateTimeColumns(i);
     143      if (logic.VariableHasType<double>(varIdx)) {
     144        list = GetDoubleColumns(varIdx);
     145      } else if (logic.VariableHasType<string>(varIdx)) {
     146        list = GetStringColumns(varIdx);
     147      } else if (logic.VariableHasType<DateTime>(varIdx)) {
     148        list = GetDateTimeColumns(varIdx);
    134149      } else {
    135150        list = new List<string>();
    136         for (int j = 0; j < COLUMNS; ++j) {
     151        for (int j = 0; j < StatisticsNames.Length; ++j) {
    137152          list.Add("unknown column type");
    138153        }
     
    141156    }
    142157
    143     private List<string> GetDoubleColumns(int columnIndex) {
     158    private List<string> GetDoubleColumns(int statIdx) {
    144159      var logic = Content.StatisticsLogic;
    145160      return new List<string> {
    146         logic.GetColumnTypeAsString(columnIndex),
    147         logic.GetMissingValueCount(columnIndex).ToString(),
    148         logic.GetMin<double>(columnIndex,double.NaN).ToString(),
    149         logic.GetMax<double>(columnIndex,double.NaN).ToString(),
    150         logic.GetMedian(columnIndex).ToString(),
    151         logic.GetAverage(columnIndex).ToString(),
    152         logic.GetStandardDeviation(columnIndex).ToString(),
    153         logic.GetVariance(columnIndex).ToString(),
    154         logic.GetOneQuarterPercentile(columnIndex).ToString(),
    155         logic.GetThreeQuarterPercentile(columnIndex).ToString(),
    156         logic.GetMostCommonValue<double>(columnIndex,double.NaN).ToString(),
    157         logic.GetDifferentValuesCount<double>(columnIndex).ToString()
     161        logic.GetColumnTypeAsString(statIdx),
     162        logic.GetMissingValueCount(statIdx).ToString(),
     163        logic.GetMin<double>(statIdx, double.NaN).ToString(),
     164        logic.GetMax<double>(statIdx, double.NaN).ToString(),
     165        logic.GetMedian(statIdx).ToString(),
     166        logic.GetAverage(statIdx).ToString(),
     167        logic.GetStandardDeviation(statIdx).ToString(),
     168        logic.GetVariance(statIdx).ToString(),
     169        logic.GetOneQuarterPercentile(statIdx).ToString(),
     170        logic.GetThreeQuarterPercentile(statIdx).ToString(),
     171        logic.GetMostCommonValue<double>(statIdx, double.NaN).ToString(),
     172        logic.GetDifferentValuesCount<double>(statIdx).ToString()
    158173      };
    159174    }
    160175
    161     private List<string> GetStringColumns(int columnIndex) {
     176    private List<string> GetStringColumns(int statIdx) {
    162177      var logic = Content.StatisticsLogic;
    163178      return new List<string> {
    164         logic.GetColumnTypeAsString(columnIndex),
    165         logic.GetMissingValueCount(columnIndex).ToString(),
     179        logic.GetColumnTypeAsString(statIdx),
     180        logic.GetMissingValueCount(statIdx).ToString(),
    166181        "", //min
    167182        "", //max
     
    172187        "", //quarter percentile
    173188        "", //three quarter percentile
    174         logic.GetMostCommonValue<string>(columnIndex,string.Empty) ?? "",
    175         logic.GetDifferentValuesCount<string>(columnIndex).ToString()
     189        logic.GetMostCommonValue<string>(statIdx,string.Empty) ?? "",
     190        logic.GetDifferentValuesCount<string>(statIdx).ToString()
    176191      };
    177192    }
    178193
    179     private List<string> GetDateTimeColumns(int columnIndex) {
     194    private List<string> GetDateTimeColumns(int statIdx) {
    180195      var logic = Content.StatisticsLogic;
    181196      return new List<string> {
    182         logic.GetColumnTypeAsString(columnIndex),
    183         logic.GetMissingValueCount(columnIndex).ToString(),
    184         logic.GetMin<DateTime>(columnIndex,DateTime.MinValue).ToString(),
    185         logic.GetMax<DateTime>(columnIndex,DateTime.MinValue).ToString(),
    186         logic.GetMedianDateTime(columnIndex).ToString(),
    187         logic.GetAverageDateTime(columnIndex).ToString(),
    188         logic.GetStandardDeviation(columnIndex).ToString(),
    189         logic.GetVariance(columnIndex).ToString(), //variance
    190         logic.GetOneQuarterPercentile(columnIndex).ToString(),
    191         logic.GetThreeQuarterPercentile(columnIndex).ToString(),
    192         logic.GetMostCommonValue<DateTime>(columnIndex,DateTime.MinValue).ToString(),
    193         logic.GetDifferentValuesCount<DateTime>(columnIndex).ToString()
     197        logic.GetColumnTypeAsString(statIdx),
     198        logic.GetMissingValueCount(statIdx).ToString(),
     199        logic.GetMin<DateTime>(statIdx, DateTime.MinValue).ToString(),
     200        logic.GetMax<DateTime>(statIdx, DateTime.MinValue).ToString(),
     201        logic.GetMedianDateTime(statIdx).ToString(),
     202        logic.GetAverageDateTime(statIdx).ToString(),
     203        logic.GetStandardDeviation(statIdx).ToString(),
     204        logic.GetVariance(statIdx).ToString(),
     205        logic.GetOneQuarterPercentile(statIdx).ToString(),
     206        logic.GetThreeQuarterPercentile(statIdx).ToString(),
     207        logic.GetMostCommonValue<DateTime>(statIdx, DateTime.MinValue).ToString(),
     208        logic.GetDifferentValuesCount<DateTime>(statIdx).ToString()
    194209      };
    195210    }
    196211
    197     private void dataGridView_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) {
    198       if (Content != null && e.RowIndex < columnsRowsMatrix.Count && e.ColumnIndex < columnsRowsMatrix[0].Count) {
    199         e.Value = columnsRowsMatrix[e.RowIndex][e.ColumnIndex];
    200       }
    201     }
    202 
    203212    private void Content_Changed(object sender, DataPreprocessingChangedEventArgs e) {
    204       switch (e.Type) {
    205         case DataPreprocessingChangedEventType.DeleteColumn:
    206           columnsRowsMatrix.RemoveAt(e.Column);
    207           break;
    208         case DataPreprocessingChangedEventType.AddColumn:
    209           columnsRowsMatrix.Insert(e.Row, GetList(e.Column));
    210           dataGridView.RowCount++;
    211           break;
    212         case DataPreprocessingChangedEventType.ChangeItem:
    213           columnsRowsMatrix[e.Column] = GetList(e.Column);
    214           break;
    215         case DataPreprocessingChangedEventType.DeleteRow:
    216         case DataPreprocessingChangedEventType.AddRow:
    217         default:
    218           for (int i = 0; i < columnsRowsMatrix.Count; ++i) {
    219             columnsRowsMatrix[i] = GetList(e.Column);
    220           }
    221           break;
    222       }
    223       dataGridView.Refresh();
    224     }
     213      UpdateData();
     214    }
     215
     216    #region Show/Hide Variables
     217    private void checkInputsTargetButton_Click(object sender, EventArgs e) {
     218      var grid = stringMatrixView.DataGridView;
     219      var list = horizontal ? grid.Columns : grid.Rows as IList;
     220      var variableNames = Content.PreprocessingData.VariableNames.ToList();
     221      int idx = 0;
     222      foreach (DataGridViewBand band in list) {
     223        var variable = variableNames[idx++];
     224        bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable)
     225                             || Content.PreprocessingData.TargetVariable == variable;
     226        band.Visible = isInputTarget;
     227        if (horizontal)
     228          stringMatrixView.UpdateColumnHeaders();
     229        else
     230          stringMatrixView.UpdateRowHeaders();
     231      }
     232
     233    }
     234    private void checkAllButton_Click(object sender, EventArgs e) {
     235      var grid = stringMatrixView.DataGridView;
     236      var list = horizontal ? grid.Columns : grid.Rows as IList;
     237      foreach (DataGridViewBand band in list) {
     238        band.Visible = true;
     239      }
     240      if (horizontal)
     241        stringMatrixView.UpdateColumnHeaders();
     242      else
     243        stringMatrixView.UpdateRowHeaders();
     244    }
     245    private void uncheckAllButton_Click(object sender, EventArgs e) {
     246      var grid = stringMatrixView.DataGridView;
     247      var list = horizontal ? grid.Columns : grid.Rows as IList;
     248      foreach (DataGridViewBand band in list) {
     249        band.Visible = false;
     250      }
     251    }
     252    #endregion
     253
     254    #region Orientation
     255    private void horizontalRadioButton_CheckedChanged(object sender, EventArgs e) {
     256      var grid = stringMatrixView.DataGridView;
     257      var oldVisibility = new Dictionary<string, bool>();
     258      var variableNames = Content.PreprocessingData.VariableNames.ToList();
     259      if (stringMatrixView.Content != null) {
     260        var list = horizontal ? grid.Columns : grid.Rows as IList;
     261        int idx = 0;
     262        foreach (DataGridViewBand band in list) {
     263          var variable = variableNames[idx++];
     264          oldVisibility.Add(variable, band.Visible);
     265        }
     266      }
     267      horizontal = horizontalRadioButton.Checked;
     268      UpdateData(oldVisibility);
     269    }
     270    private void verticalRadioButton_CheckedChanged(object sender, EventArgs e) {
     271      // everything is handled in horizontalRadioButton_CheckedChanged
     272    }
     273    #endregion
    225274  }
    226275}
Note: See TracChangeset for help on using the changeset viewer.