Changeset 15973 for branches/2522_RefactorPluginInfrastructure/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs
- Timestamp:
- 06/28/18 11:13:37 (6 years ago)
- Location:
- branches/2522_RefactorPluginInfrastructure
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2522_RefactorPluginInfrastructure
- Property svn:ignore
-
old new 24 24 protoc.exe 25 25 obj 26 .vs
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
branches/2522_RefactorPluginInfrastructure/HeuristicLab.DataPreprocessing.Views
- Property svn:mergeinfo changed
-
branches/2522_RefactorPluginInfrastructure/HeuristicLab.DataPreprocessing.Views/3.4
- Property svn:ignore
-
old new 1 1 ComparisonFilterView.resx 2 2 FilterView.resx 3 *.user
-
- Property svn:ignore
-
branches/2522_RefactorPluginInfrastructure/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs
r12889 r15973 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 21 21 22 22 using System; 23 using System.Collections; 23 24 using System.Collections.Generic; 25 using System.Linq; 24 26 using System.Windows.Forms; 25 27 using HeuristicLab.Core.Views; 28 using HeuristicLab.Data; 26 29 using HeuristicLab.MainForm; 30 using HeuristicLab.MainForm.WindowsForms; 27 31 28 32 namespace HeuristicLab.DataPreprocessing.Views { 29 30 33 [View("Statistics View")] 31 34 [Content(typeof(StatisticsContent), true)] 32 35 public partial class StatisticsView : ItemView { 33 34 private List<List<string>> columnsRowsMatrix; 35 private readonly int COLUMNS = 12; 36 private bool horizontal = false; 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 }; 36 52 37 53 public new StatisticsContent Content { … … 47 63 base.OnContentChanged(); 48 64 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; 55 73 } else { 56 74 UpdateData(); … … 58 76 } 59 77 60 /// <summary>61 /// Adds eventhandlers to the current instance.62 /// </summary>63 78 protected override void RegisterContentEvents() { 79 base.RegisterContentEvents(); 64 80 Content.Changed += Content_Changed; 65 81 } 66 82 67 68 /// <summary>69 /// Removes the eventhandlers from the current instance.70 /// </summary>71 83 protected override void DeregisterContentEvents() { 72 84 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 data = Content.PreprocessingData; 90 rowsTextBox.Text = data.Rows.ToString(); 91 columnsTextBox.Text = data.Columns.ToString(); 92 numericColumnsTextBox.Text = GetColumnCount<double>().ToString(); 93 nominalColumnsTextBox5.Text = GetColumnCount<string>().ToString(); 94 missingValuesTextBox.Text = data.GetMissingValueCount().ToString(); 95 totalValuesTextBox.Text = (data.Rows * data.Rows - data.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 < data.Columns; i++) { 110 var statistics = GetStatistics(i); 111 for (int j = 0; j < statistics.Count; j++) { 112 if (horizontal) 113 statisticsMatrix[j, i] = statistics[j]; 114 else 115 statisticsMatrix[i, j] = statistics[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 public int GetColumnCount<T>() { 141 int count = 0; 142 for (int i = 0; i < Content.PreprocessingData.Columns; ++i) { 143 if (Content.PreprocessingData.VariableHasType<T>(i)) { 144 ++count; 145 } 146 } 147 return count; 148 } 149 150 private List<string> GetStatistics(int varIdx) { 126 151 List<string> list; 127 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);152 var data = Content.PreprocessingData; 153 if (data.VariableHasType<double>(varIdx)) { 154 list = GetDoubleColumns(varIdx); 155 } else if (data.VariableHasType<string>(varIdx)) { 156 list = GetStringColumns(varIdx); 157 } else if (data.VariableHasType<DateTime>(varIdx)) { 158 list = GetDateTimeColumns(varIdx); 134 159 } else { 135 160 list = new List<string>(); 136 for (int j = 0; j < COLUMNS; ++j) {161 for (int j = 0; j < StatisticsNames.Length; ++j) { 137 162 list.Add("unknown column type"); 138 163 } … … 141 166 } 142 167 143 private List<string> GetDoubleColumns(int columnIndex) {144 var logic = Content.StatisticsLogic;168 private List<string> GetDoubleColumns(int statIdx) { 169 var data = Content.PreprocessingData; 145 170 return new List<string> { 146 logic.GetColumnTypeAsString(columnIndex),147 logic.GetMissingValueCount(columnIndex).ToString(),148 logic.GetMin<double>(columnIndex).ToString(),149 logic.GetMax<double>(columnIndex).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).ToString(),157 logic.GetDifferentValuesCount<double>(columnIndex).ToString()171 data.GetVariableType(statIdx).Name, 172 data.GetMissingValueCount(statIdx).ToString(), 173 data.GetMin<double>(statIdx, emptyValue: double.NaN).ToString(), 174 data.GetMax<double>(statIdx, emptyValue: double.NaN).ToString(), 175 data.GetMedian<double>(statIdx, emptyValue: double.NaN).ToString(), 176 data.GetMean<double>(statIdx, emptyValue: double.NaN).ToString(), 177 data.GetStandardDeviation<double>(statIdx, emptyValue: double.NaN).ToString(), 178 data.GetVariance<double>(statIdx, emptyValue: double.NaN).ToString(), 179 data.GetQuantile<double>(0.25, statIdx, emptyValue: double.NaN).ToString(), 180 data.GetQuantile<double>(0.75, statIdx, emptyValue: double.NaN).ToString(), 181 data.GetMode<double>(statIdx, emptyValue: double.NaN).ToString(), 182 data.GetDistinctValues<double>(statIdx).ToString() 158 183 }; 159 184 } 160 185 161 private List<string> GetStringColumns(int columnIndex) {162 var logic = Content.StatisticsLogic;186 private List<string> GetStringColumns(int statIdx) { 187 var data = Content.PreprocessingData; 163 188 return new List<string> { 164 logic.GetColumnTypeAsString(columnIndex),165 logic.GetMissingValueCount(columnIndex).ToString(),166 "", // min167 "", // max168 "", // median189 data.GetVariableType(statIdx).Name, 190 data.GetMissingValueCount(statIdx).ToString(), 191 "", // data.GetMin<string>(statIdx, emptyValue: string.Empty), //min 192 "", // data.GetMax<string>(statIdx, emptyValue: string.Empty), //max 193 "", // data.GetMedian<string>(statIdx, emptyValue: string.Empty), //median 169 194 "", //average 170 195 "", //standard deviation 171 196 "", //variance 172 "", // quarter percentile173 "", // three quarter percentile174 logic.GetMostCommonValue<string>(columnIndex) ?? "",175 logic.GetDifferentValuesCount<string>(columnIndex).ToString()197 "", // data.GetQuantile<string>(0.25, statIdx, emptyValue: string.Empty), //quarter percentile 198 "", // data.GetQuantile<string>(0.75, statIdx, emptyValue: string.Empty), //three quarter percentile 199 data.GetMode<string>(statIdx, emptyValue: string.Empty), 200 data.GetDistinctValues<string>(statIdx).ToString() 176 201 }; 177 202 } 178 203 179 private List<string> GetDateTimeColumns(int columnIndex) {180 var logic = Content.StatisticsLogic;204 private List<string> GetDateTimeColumns(int statIdx) { 205 var data = Content.PreprocessingData; 181 206 return new List<string> { 182 logic.GetColumnTypeAsString(columnIndex),183 logic.GetMissingValueCount(columnIndex).ToString(),184 logic.GetMin<DateTime>(columnIndex).ToString(),185 logic.GetMax<DateTime>(columnIndex).ToString(),186 logic.GetMedianDateTime(columnIndex).ToString(),187 logic.GetAverageDateTime(columnIndex).ToString(),188 logic.GetStandardDeviation(columnIndex).ToString(),189 logic.GetVariance(columnIndex).ToString(), //variance190 logic.GetOneQuarterPercentile(columnIndex).ToString(),191 logic.GetThreeQuarterPercentile(columnIndex).ToString(),192 logic.GetMostCommonValue<DateTime>(columnIndex).ToString(),193 logic.GetDifferentValuesCount<DateTime>(columnIndex).ToString()207 data.GetVariableType(statIdx).Name, 208 data.GetMissingValueCount(statIdx).ToString(), 209 data.GetMin<DateTime>(statIdx).ToString(), 210 data.GetMax<DateTime>(statIdx).ToString(), 211 data.GetMedian<DateTime>(statIdx).ToString(), 212 data.GetMean<DateTime>(statIdx).ToString(), 213 "", // should be of type TimeSpan //data.GetStandardDeviation<DateTime>(statIdx).ToString(), 214 "", // should be of type TimeSpan //data.GetVariance<DateTime>(statIdx).ToString(), 215 data.GetQuantile<DateTime>(0.25, statIdx).ToString(), 216 data.GetQuantile<DateTime>(0.75, statIdx).ToString(), 217 data.GetMode<DateTime>(statIdx).ToString(), 218 data.GetDistinctValues<DateTime>(statIdx).ToString() 194 219 }; 195 220 } 196 221 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 203 222 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 } 223 UpdateData(); 224 } 225 226 #region Show/Hide Variables 227 private void checkInputsTargetButton_Click(object sender, EventArgs e) { 228 var grid = stringMatrixView.DataGridView; 229 var list = horizontal ? grid.Columns : grid.Rows as IList; 230 var variableNames = Content.PreprocessingData.VariableNames.ToList(); 231 int idx = 0; 232 foreach (DataGridViewBand band in list) { 233 var variable = variableNames[idx++]; 234 bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable) 235 || Content.PreprocessingData.TargetVariable == variable; 236 band.Visible = isInputTarget; 237 if (horizontal) 238 stringMatrixView.UpdateColumnHeaders(); 239 else 240 stringMatrixView.UpdateRowHeaders(); 241 } 242 243 } 244 private void checkAllButton_Click(object sender, EventArgs e) { 245 var grid = stringMatrixView.DataGridView; 246 var list = horizontal ? grid.Columns : grid.Rows as IList; 247 foreach (DataGridViewBand band in list) { 248 band.Visible = true; 249 } 250 if (horizontal) 251 stringMatrixView.UpdateColumnHeaders(); 252 else 253 stringMatrixView.UpdateRowHeaders(); 254 } 255 private void uncheckAllButton_Click(object sender, EventArgs e) { 256 var grid = stringMatrixView.DataGridView; 257 var list = horizontal ? grid.Columns : grid.Rows as IList; 258 foreach (DataGridViewBand band in list) { 259 band.Visible = false; 260 } 261 } 262 #endregion 263 264 #region Orientation 265 private void horizontalRadioButton_CheckedChanged(object sender, EventArgs e) { 266 var grid = stringMatrixView.DataGridView; 267 var oldVisibility = new Dictionary<string, bool>(); 268 var variableNames = Content.PreprocessingData.VariableNames.ToList(); 269 if (stringMatrixView.Content != null) { 270 var list = horizontal ? grid.Columns : grid.Rows as IList; 271 int idx = 0; 272 foreach (DataGridViewBand band in list) { 273 var variable = variableNames[idx++]; 274 oldVisibility.Add(variable, band.Visible); 275 } 276 } 277 horizontal = horizontalRadioButton.Checked; 278 UpdateData(oldVisibility); 279 } 280 private void verticalRadioButton_CheckedChanged(object sender, EventArgs e) { 281 // everything is handled in horizontalRadioButton_CheckedChanged 282 } 283 #endregion 225 284 } 226 285 }
Note: See TracChangeset
for help on using the changeset viewer.