Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/05/17 15:12:27 (7 years ago)
Author:
pfleck
Message:

#2709

  • Uses StringMatrix for statistics instead of winforms datagrid.
  • Precheck input/target variables only for statistics.
File:
1 edited

Legend:

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

    r14185 r14545  
    2424using System.Windows.Forms;
    2525using HeuristicLab.Core.Views;
     26using HeuristicLab.Data;
    2627using HeuristicLab.MainForm;
    2728
     
    3233  public partial class StatisticsView : ItemView {
    3334
    34     private List<List<string>> columnsRowsMatrix;
    35     private readonly int COLUMNS = 12;
     35    private StringMatrix statisticsMatrix;
     36
     37    private static readonly string[] RowNames = new[] {
     38      "Type",
     39      "Missing Values",
     40      "Min",
     41      "Max",
     42      "Median",
     43      "Average",
     44      "std. Deviation",
     45      "Variance",
     46      "25th Percentile",
     47      "75th Percentile",
     48      "Most Common Value",
     49      "Num. diff. Values"
     50    };
    3651
    3752    public new StatisticsContent Content {
     
    5267        txtNominalColumns.Text = "";
    5368        txtMissingValuesTotal.Text = "";
    54         dataGridView.Columns.Clear();
     69        stringMatrixView.Content = null;
     70        statisticsMatrix = null;
    5571      } else {
    5672        UpdateData();
     
    5874    }
    5975
    60     /// <summary>
    61     /// Adds eventhandlers to the current instance.
    62     /// </summary>
    6376    protected override void RegisterContentEvents() {
     77      base.RegisterContentEvents();
    6478      Content.Changed += Content_Changed;
    6579    }
    6680
    67 
    68     /// <summary>
    69     /// Removes the eventhandlers from the current instance.
    70     /// </summary>
    7181    protected override void DeregisterContentEvents() {
    7282      Content.Changed -= Content_Changed;
     83      base.DeregisterContentEvents();
    7384    }
    7485
     
    7687      var logic = Content.StatisticsLogic;
    7788      var rowCount = logic.GetRowCount();
    78       txtRows.Text = rowCount.ToString();
    79       txtColumns.Text = logic.GetColumnCount().ToString();
     89      txtRows.Text = logic.GetColumnCount().ToString();
     90      txtColumns.Text = rowCount.ToString();
    8091      txtNumericColumns.Text = logic.GetNumericColumnCount().ToString();
    8192      txtNominalColumns.Text = logic.GetNominalColumnCount().ToString();
    8293      txtMissingValuesTotal.Text = logic.GetMissingValueCount().ToString();
    8394
    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";
     95      statisticsMatrix = new StringMatrix(RowNames.Length, Content.PreprocessingData.Columns) {
     96        RowNames = StatisticsView.RowNames,
     97        ColumnNames = Content.PreprocessingData.VariableNames
     98      };
    10599
    106100      if (rowCount > 0) {
    107101        for (int i = 0; i < logic.GetColumnCount(); ++i) {
    108           columnsRowsMatrix.Add(GetList(i));
     102          var data = GetList(i);
     103          for (int j = 0; j < data.Count; j++) {
     104            statisticsMatrix[j, i] = data[j];
     105          }
    109106        }
    110107      }
    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;
     108      stringMatrixView.Content = statisticsMatrix;
     109
     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      }
     116      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      //}
    123124    }
    124125
     
    134135      } else {
    135136        list = new List<string>();
    136         for (int j = 0; j < COLUMNS; ++j) {
     137        for (int j = 0; j < RowNames.Length; ++j) {
    137138          list.Add("unknown column type");
    138139        }
     
    195196    }
    196197
    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 
    203198    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();
     199      UpdateData();
     200      //switch (e.Type) {
     201      //  case DataPreprocessingChangedEventType.DeleteColumn:
     202      //    statisticsMatrix.RemoveAt(e.Column);
     203      //    break;
     204      //  case DataPreprocessingChangedEventType.AddColumn:
     205      //    statisticsMatrix.Insert(e.Row, GetList(e.Column));
     206      //    stringMatrixView.Content.Rows++;
     207      //    break;
     208      //  case DataPreprocessingChangedEventType.ChangeItem:
     209      //    statisticsMatrix[e.Column] = GetList(e.Column);
     210      //    break;
     211      //  case DataPreprocessingChangedEventType.DeleteRow:
     212      //  case DataPreprocessingChangedEventType.AddRow:
     213      //  default:
     214      //    for (int i = 0; i < statisticsMatrix.Count; ++i) {
     215      //      statisticsMatrix[i] = GetList(e.Column);
     216      //    }
     217      //    break;
     218      //}
    224219    }
    225220  }
Note: See TracChangeset for help on using the changeset viewer.