- Timestamp:
- 07/03/17 10:57:53 (7 years ago)
- Location:
- trunk/sources/HeuristicLab.DataPreprocessing.Views
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.DataPreprocessing.Views
- Property svn:mergeinfo changed
-
trunk/sources/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs
r14185 r15110 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 = 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 }; 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 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) { 126 141 List<string> list; 127 142 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); 134 149 } else { 135 150 list = new List<string>(); 136 for (int j = 0; j < COLUMNS; ++j) {151 for (int j = 0; j < StatisticsNames.Length; ++j) { 137 152 list.Add("unknown column type"); 138 153 } … … 141 156 } 142 157 143 private List<string> GetDoubleColumns(int columnIndex) {158 private List<string> GetDoubleColumns(int statIdx) { 144 159 var logic = Content.StatisticsLogic; 145 160 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() 158 173 }; 159 174 } 160 175 161 private List<string> GetStringColumns(int columnIndex) {176 private List<string> GetStringColumns(int statIdx) { 162 177 var logic = Content.StatisticsLogic; 163 178 return new List<string> { 164 logic.GetColumnTypeAsString( columnIndex),165 logic.GetMissingValueCount( columnIndex).ToString(),179 logic.GetColumnTypeAsString(statIdx), 180 logic.GetMissingValueCount(statIdx).ToString(), 166 181 "", //min 167 182 "", //max … … 172 187 "", //quarter percentile 173 188 "", //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() 176 191 }; 177 192 } 178 193 179 private List<string> GetDateTimeColumns(int columnIndex) {194 private List<string> GetDateTimeColumns(int statIdx) { 180 195 var logic = Content.StatisticsLogic; 181 196 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(), //variance190 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() 194 209 }; 195 210 } 196 211 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 212 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 225 274 } 226 275 }
Note: See TracChangeset
for help on using the changeset viewer.