Changeset 15535
- Timestamp:
- 12/18/17 16:17:39 (7 years ago)
- Location:
- stable
- Files:
-
- 3 deleted
- 36 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
stable ¶
- Property svn:mergeinfo changed
/trunk/sources merged: 15518,15534
- Property svn:mergeinfo changed
-
stable/HeuristicLab.DataPreprocessing ¶
- Property svn:mergeinfo changed
-
stable/HeuristicLab.DataPreprocessing.Views ¶
- Property svn:mergeinfo changed
-
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/CheckedTransformationListView.cs ¶
r15242 r15535 51 51 // TODO: Avoid accessing parent view 52 52 var transformationView = (TransformationView)Parent; 53 var columnNames = transformationView.Content. Data.VariableNames;53 var columnNames = transformationView.Content.PreprocessingData.VariableNames; 54 54 55 55 return (ITransformation)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType(new[] { columnNames }); -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/DataCompletenessView.cs ¶
r15242 r15535 52 52 53 53 private void InitData() { 54 IDictionary<int, IList<int>> missingValueIndices = Content.SearchLogic.GetMissingValueIndices(); 55 56 bool[,] valueMissing = new bool[Content.SearchLogic.Rows, Content.SearchLogic.Columns]; 57 foreach (var columnMissingValues in missingValueIndices) { 58 var column = columnMissingValues.Key; 59 foreach (var missingValueIndex in columnMissingValues.Value) 60 valueMissing[missingValueIndex, column] = true; 54 bool[,] valueMissing = new bool[Content.PreprocessingData.Rows, Content.PreprocessingData.Columns]; 55 for (int row = 0; row < Content.PreprocessingData.Rows; row++) { 56 for (int column = 0; column < Content.PreprocessingData.Columns; column++) 57 valueMissing[row, column] = Content.PreprocessingData.IsCellEmpty(column, row); 61 58 } 62 59 … … 78 75 //custom x axis label 79 76 double from = 0.5; 80 foreach (String columnName in Content. SearchLogic.VariableNames) {77 foreach (String columnName in Content.PreprocessingData.VariableNames) { 81 78 double to = from + 1; 82 79 chart.ChartAreas[0].AxisX.CustomLabels.Add(from, to, columnName); -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.Designer.cs ¶
r15242 r15535 54 54 this.mostCommonToolStripMenuItem_Column = new System.Windows.Forms.ToolStripMenuItem(); 55 55 this.interpolationToolStripMenuItem_Column = new System.Windows.Forms.ToolStripMenuItem(); 56 this.smoothingToolStripMenuItem_Column = new System.Windows.Forms.ToolStripMenuItem();57 56 this.replaceValueOverSelectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 58 57 this.averageToolStripMenuItem_Selection = new System.Windows.Forms.ToolStripMenuItem(); … … 63 62 this.btnReplace = new System.Windows.Forms.Button(); 64 63 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 65 this.checkInputsTargetButton = new System.Windows.Forms.Button(); 66 this.uncheckAllButton = new System.Windows.Forms.Button(); 67 this.checkAllButton = new System.Windows.Forms.Button(); 64 this.shuffleWithinPartitionsCheckBox = new System.Windows.Forms.CheckBox(); 68 65 this.addRowButton = new System.Windows.Forms.Button(); 69 66 this.addColumnButton = new System.Windows.Forms.Button(); 70 67 this.renameColumnsButton = new System.Windows.Forms.Button(); 71 68 this.showVariablesGroupBox = new System.Windows.Forms.GroupBox(); 69 this.shuffleAllButton = new System.Windows.Forms.Button(); 70 this.checkInputsTargetButton = new System.Windows.Forms.Button(); 71 this.uncheckAllButton = new System.Windows.Forms.Button(); 72 this.checkAllButton = new System.Windows.Forms.Button(); 72 73 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); 73 74 this.contextMenuCell.SuspendLayout(); … … 127 128 this.randomToolStripMenuItem_Column, 128 129 this.mostCommonToolStripMenuItem_Column, 129 this.interpolationToolStripMenuItem_Column, 130 this.smoothingToolStripMenuItem_Column}); 130 this.interpolationToolStripMenuItem_Column}); 131 131 this.replaceValueOverColumnToolStripMenuItem.Name = "replaceValueOverColumnToolStripMenuItem"; 132 132 this.replaceValueOverColumnToolStripMenuItem.Size = new System.Drawing.Size(223, 22); … … 167 167 this.interpolationToolStripMenuItem_Column.Text = "Interpolation"; 168 168 this.interpolationToolStripMenuItem_Column.Click += new System.EventHandler(this.ReplaceWithInterpolation_Column_Click); 169 //170 // smoothingToolStripMenuItem_Column171 //172 this.smoothingToolStripMenuItem_Column.Name = "smoothingToolStripMenuItem_Column";173 this.smoothingToolStripMenuItem_Column.Size = new System.Drawing.Size(155, 22);174 this.smoothingToolStripMenuItem_Column.Text = "Smoothing";175 this.smoothingToolStripMenuItem_Column.Click += new System.EventHandler(this.ReplaceWithSmoothing_Selection_Click);176 169 // 177 170 // replaceValueOverSelectionToolStripMenuItem … … 236 229 this.btnReplace.Click += new System.EventHandler(this.btnReplace_Click); 237 230 // 231 // shuffleWithinPartitionsCheckBox 232 // 233 this.shuffleWithinPartitionsCheckBox.AutoSize = true; 234 this.shuffleWithinPartitionsCheckBox.Location = new System.Drawing.Point(444, 30); 235 this.shuffleWithinPartitionsCheckBox.Name = "shuffleWithinPartitionsCheckBox"; 236 this.shuffleWithinPartitionsCheckBox.Size = new System.Drawing.Size(102, 17); 237 this.shuffleWithinPartitionsCheckBox.TabIndex = 20; 238 this.shuffleWithinPartitionsCheckBox.Text = "Within Partitions"; 239 this.toolTip.SetToolTip(this.shuffleWithinPartitionsCheckBox, "If checked, the Training and Test partitions are shuffled separately. Otherwise a" + 240 "ll data is shuffled."); 241 this.shuffleWithinPartitionsCheckBox.UseVisualStyleBackColor = true; 242 // 243 // addRowButton 244 // 245 this.addRowButton.Location = new System.Drawing.Point(338, 26); 246 this.addRowButton.Name = "addRowButton"; 247 this.addRowButton.Size = new System.Drawing.Size(83, 23); 248 this.addRowButton.TabIndex = 10; 249 this.addRowButton.Text = "Add Datarow"; 250 this.addRowButton.UseVisualStyleBackColor = true; 251 this.addRowButton.Click += new System.EventHandler(this.addRowButton_Click); 252 // 253 // addColumnButton 254 // 255 this.addColumnButton.Location = new System.Drawing.Point(338, 0); 256 this.addColumnButton.Name = "addColumnButton"; 257 this.addColumnButton.Size = new System.Drawing.Size(83, 23); 258 this.addColumnButton.TabIndex = 10; 259 this.addColumnButton.Text = "Add Variable"; 260 this.addColumnButton.UseVisualStyleBackColor = true; 261 this.addColumnButton.Click += new System.EventHandler(this.addColumnButton_Click); 262 // 263 // renameColumnsButton 264 // 265 this.renameColumnsButton.Location = new System.Drawing.Point(228, 26); 266 this.renameColumnsButton.Name = "renameColumnsButton"; 267 this.renameColumnsButton.Size = new System.Drawing.Size(104, 23); 268 this.renameColumnsButton.TabIndex = 11; 269 this.renameColumnsButton.Text = "Rename Variables"; 270 this.renameColumnsButton.UseVisualStyleBackColor = true; 271 this.renameColumnsButton.Click += new System.EventHandler(this.renameColumnsButton_Click); 272 // 273 // showVariablesGroupBox 274 // 275 this.showVariablesGroupBox.Controls.Add(this.checkInputsTargetButton); 276 this.showVariablesGroupBox.Controls.Add(this.uncheckAllButton); 277 this.showVariablesGroupBox.Controls.Add(this.checkAllButton); 278 this.showVariablesGroupBox.Location = new System.Drawing.Point(564, 0); 279 this.showVariablesGroupBox.Name = "showVariablesGroupBox"; 280 this.showVariablesGroupBox.Size = new System.Drawing.Size(97, 49); 281 this.showVariablesGroupBox.TabIndex = 17; 282 this.showVariablesGroupBox.TabStop = false; 283 this.showVariablesGroupBox.Text = "Show Variables"; 284 // 285 // shuffleAllButton 286 // 287 this.shuffleAllButton.Location = new System.Drawing.Point(444, 0); 288 this.shuffleAllButton.Name = "shuffleAllButton"; 289 this.shuffleAllButton.Size = new System.Drawing.Size(102, 23); 290 this.shuffleAllButton.TabIndex = 19; 291 this.shuffleAllButton.Text = "Shuffle"; 292 this.shuffleAllButton.UseVisualStyleBackColor = true; 293 this.shuffleAllButton.Click += new System.EventHandler(this.shuffleAllButton_Click); 294 // 238 295 // checkInputsTargetButton 239 296 // … … 269 326 this.checkAllButton.Click += new System.EventHandler(this.checkAllButton_Click); 270 327 // 271 // addRowButton272 //273 this.addRowButton.Location = new System.Drawing.Point(338, 26);274 this.addRowButton.Name = "addRowButton";275 this.addRowButton.Size = new System.Drawing.Size(83, 23);276 this.addRowButton.TabIndex = 10;277 this.addRowButton.Text = "Add Datarow";278 this.addRowButton.UseVisualStyleBackColor = true;279 this.addRowButton.Click += new System.EventHandler(this.addRowButton_Click);280 //281 // addColumnButton282 //283 this.addColumnButton.Location = new System.Drawing.Point(338, 0);284 this.addColumnButton.Name = "addColumnButton";285 this.addColumnButton.Size = new System.Drawing.Size(83, 23);286 this.addColumnButton.TabIndex = 10;287 this.addColumnButton.Text = "Add Variable";288 this.addColumnButton.UseVisualStyleBackColor = true;289 this.addColumnButton.Click += new System.EventHandler(this.addColumnButton_Click);290 //291 // renameColumnsButton292 //293 this.renameColumnsButton.Location = new System.Drawing.Point(228, 26);294 this.renameColumnsButton.Name = "renameColumnsButton";295 this.renameColumnsButton.Size = new System.Drawing.Size(104, 23);296 this.renameColumnsButton.TabIndex = 11;297 this.renameColumnsButton.Text = "Rename Variables";298 this.renameColumnsButton.UseVisualStyleBackColor = true;299 this.renameColumnsButton.Click += new System.EventHandler(this.renameColumnsButton_Click);300 //301 // showVariablesGroupBox302 //303 this.showVariablesGroupBox.Controls.Add(this.checkInputsTargetButton);304 this.showVariablesGroupBox.Controls.Add(this.uncheckAllButton);305 this.showVariablesGroupBox.Controls.Add(this.checkAllButton);306 this.showVariablesGroupBox.Location = new System.Drawing.Point(448, 0);307 this.showVariablesGroupBox.Name = "showVariablesGroupBox";308 this.showVariablesGroupBox.Size = new System.Drawing.Size(97, 49);309 this.showVariablesGroupBox.TabIndex = 17;310 this.showVariablesGroupBox.TabStop = false;311 this.showVariablesGroupBox.Text = "Show Variables";312 //313 328 // DataGridContentView 314 329 // 315 330 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 316 331 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 332 this.Controls.Add(this.shuffleWithinPartitionsCheckBox); 333 this.Controls.Add(this.shuffleAllButton); 317 334 this.Controls.Add(this.showVariablesGroupBox); 318 335 this.Controls.Add(this.renameColumnsButton); … … 335 352 this.Controls.SetChildIndex(this.columnsTextBox, 0); 336 353 this.Controls.SetChildIndex(this.showVariablesGroupBox, 0); 354 this.Controls.SetChildIndex(this.shuffleAllButton, 0); 355 this.Controls.SetChildIndex(this.shuffleWithinPartitionsCheckBox, 0); 337 356 ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); 338 357 this.contextMenuCell.ResumeLayout(false); … … 361 380 private System.Windows.Forms.Button btnReplace; 362 381 private System.Windows.Forms.ToolTip toolTip; 363 private System.Windows.Forms.ToolStripMenuItem smoothingToolStripMenuItem_Column;364 382 private System.Windows.Forms.Button addRowButton; 365 383 private System.Windows.Forms.Button addColumnButton; … … 369 387 private System.Windows.Forms.Button uncheckAllButton; 370 388 private System.Windows.Forms.Button checkAllButton; 389 private System.Windows.Forms.Button shuffleAllButton; 390 private System.Windows.Forms.CheckBox shuffleWithinPartitionsCheckBox; 371 391 } 372 392 } -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs ¶
r15242 r15535 85 85 base.RegisterContentEvents(); 86 86 Content.Changed += Content_Changed; 87 Content. FilterLogic.FilterChanged += FilterLogic_FilterChanged;87 Content.PreprocessingData.FilterChanged += FilterLogic_FilterChanged; 88 88 } 89 89 … … 91 91 base.DeregisterContentEvents(); 92 92 Content.Changed -= Content_Changed; 93 Content. FilterLogic.FilterChanged -= FilterLogic_FilterChanged;93 Content.PreprocessingData.FilterChanged -= FilterLogic_FilterChanged; 94 94 } 95 95 … … 98 98 searchIterator = null; 99 99 if (findAndReplaceDialog != null && !findAndReplaceDialog.IsDisposed) { 100 if (Content. FilterLogic.IsFiltered) {100 if (Content.PreprocessingData.IsFiltered) { 101 101 findAndReplaceDialog.DisableReplace(); 102 102 } else { … … 104 104 } 105 105 } 106 btnReplace.Enabled = !Content. FilterLogic.IsFiltered;106 btnReplace.Enabled = !Content.PreprocessingData.IsFiltered; 107 107 } 108 108 … … 126 126 string errorMessage; 127 127 if (!String.IsNullOrEmpty(e.FormattedValue.ToString())) { 128 if (dataGridView.IsCurrentCellInEditMode && Content. FilterLogic.IsFiltered) {128 if (dataGridView.IsCurrentCellInEditMode && Content.PreprocessingData.IsFiltered) { 129 129 errorMessage = "A filter is active, you cannot modify data. Press ESC to exit edit mode."; 130 130 } else { … … 167 167 168 168 ReplaceTransaction(() => { 169 Content.Pre ProcessingData.InTransaction(() => {169 Content.PreprocessingData.InTransaction(() => { 170 170 for (int row = containsHeader ? 1 : 0; row < values.GetLength(1); row++) { 171 171 for (int col = 0; col < values.GetLength(0); col++) { … … 177 177 if (string.IsNullOrWhiteSpace(firstRow[i])) 178 178 firstRow[i] = string.Format("<{0}>", i); 179 Content.Pre ProcessingData.RenameColumns(firstRow);179 Content.PreprocessingData.RenameColumns(firstRow); 180 180 } 181 181 }); … … 224 224 if (e.Button == MouseButtons.Middle) { 225 225 int newIndex = e.ColumnIndex >= 0 ? e.ColumnIndex : 0; 226 Content.Pre ProcessingData.InsertColumn<double>(newIndex.ToString(), newIndex);226 Content.PreprocessingData.InsertColumn<double>(newIndex.ToString(), newIndex); 227 227 } else if (e.Button == MouseButtons.Right && Content.SortableView) { 228 228 SortColumn(e.ColumnIndex); … … 235 235 if (e.Button == MouseButtons.Middle) { 236 236 int newIndex = e.RowIndex >= 0 ? e.RowIndex : 0; 237 Content.Pre ProcessingData.InsertRow(newIndex);237 Content.PreprocessingData.InsertRow(newIndex); 238 238 } 239 239 } … … 248 248 } 249 249 250 private void btnApplySort_Click(object sender, System.EventArgs e) {251 Content. ManipulationLogic.ReOrderToIndices(virtualRowIndices);250 private void btnApplySort_Click(object sender, EventArgs e) { 251 Content.ReOrderToIndices(virtualRowIndices); 252 252 OnContentChanged(); 253 253 } … … 271 271 searchIterator = null; 272 272 DataGridView.SelectionChanged += DataGridView_SelectionChanged_FindAndReplace; 273 if (Content. FilterLogic.IsFiltered) {273 if (Content.PreprocessingData.IsFiltered) { 274 274 findAndReplaceDialog.DisableReplace(); 275 275 } … … 405 405 ComparisonOperation comparisonOperation = findAndReplaceDialog.GetComparisonOperation(); 406 406 var foundCells = new Dictionary<int, IList<int>>(); 407 for (int i = 0; i < Content. FilterLogic.PreprocessingData.Columns; i++) {407 for (int i = 0; i < Content.PreprocessingData.Columns; i++) { 408 408 var filters = CreateFilters(match, comparisonOperation, i); 409 409 410 bool[] filteredRows = Content.FilterLogic.GetFilterResult(filters, true);410 bool[] filteredRows = GetFilterResult(filters, true); 411 411 var foundIndices = new List<int>(); 412 412 for (int idx = 0; idx < filteredRows.Length; ++idx) { … … 427 427 } 428 428 429 private bool[] GetFilterResult(IList<IFilter> filters, bool isAndCombination) { 430 IList<IFilter> activeFilters = filters.Where(f => f.Active && f.ConstraintData != null).ToList(); 431 432 if (activeFilters.Count == 0) { 433 return Enumerable.Repeat(false, Content.PreprocessingData.Rows).ToArray(); ; 434 } 435 436 var result = Enumerable.Repeat(!isAndCombination, Content.PreprocessingData.Rows).ToArray(); 437 foreach (IFilter filter in activeFilters) { 438 bool[] filterResult = filter.Check(); 439 for (int row = 0; row < result.Length; ++row) { 440 result[row] = isAndCombination ? result[row] || filterResult[row] : result[row] && filterResult[row]; 441 } 442 } 443 return result; 444 } 445 429 446 private List<IFilter> CreateFilters(string match, ComparisonOperation comparisonOperation, int columnIndex) { 430 IPreprocessingData preprocessingData = Content. FilterLogic.PreprocessingData;447 IPreprocessingData preprocessingData = Content.PreprocessingData; 431 448 IStringConvertibleValue value; 432 449 if (preprocessingData.VariableHasType<double>(columnIndex)) { … … 473 490 switch (findAndReplaceDialog.GetReplaceAction()) { 474 491 case ReplaceAction.Value: 475 Content. ManipulationLogic.ReplaceIndicesByValue(cells, findAndReplaceDialog.GetReplaceText());492 Content.ReplaceIndicesByString(cells, findAndReplaceDialog.GetReplaceText()); 476 493 break; 477 494 case ReplaceAction.Average: 478 Content. ManipulationLogic.ReplaceIndicesByAverageValue(cells, false);495 Content.ReplaceIndicesByMean(cells, false); 479 496 break; 480 497 case ReplaceAction.Median: 481 Content. ManipulationLogic.ReplaceIndicesByMedianValue(cells, false);498 Content.ReplaceIndicesByMedianValue(cells, false); 482 499 break; 483 500 case ReplaceAction.Random: 484 Content. ManipulationLogic.ReplaceIndicesByRandomValue(cells, false);501 Content.ReplaceIndicesByRandomValue(cells, false); 485 502 break; 486 503 case ReplaceAction.MostCommon: 487 Content. ManipulationLogic.ReplaceIndicesByMostCommonValue(cells, false);504 Content.ReplaceIndicesByMode(cells, false); 488 505 break; 489 506 case ReplaceAction.Interpolation: 490 Content. ManipulationLogic.ReplaceIndicesByLinearInterpolationOfNeighbours(cells);507 Content.ReplaceIndicesByLinearInterpolationOfNeighbours(cells); 491 508 break; 492 509 } … … 506 523 507 524 #endregion FindAndReplaceDialog 508 509 525 private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { 510 526 if (Content == null) return; … … 531 547 medianToolStripMenuItem_Selection.Enabled = 532 548 randomToolStripMenuItem_Column.Enabled = 533 randomToolStripMenuItem_Selection.Enabled = !Content.PreProcessingData.AreAllStringColumns(columnIndices); 534 535 smoothingToolStripMenuItem_Column.Enabled = 536 interpolationToolStripMenuItem_Column.Enabled = !dataGridView.SelectedCells.Contains(dataGridView[e.ColumnIndex, 0]) 537 && !dataGridView.SelectedCells.Contains(dataGridView[e.ColumnIndex, Content.Rows - 1]) 538 && !Content.PreProcessingData.AreAllStringColumns(columnIndices); 549 randomToolStripMenuItem_Selection.Enabled = !Content.PreprocessingData.AreAllStringColumns(columnIndices); 539 550 540 551 replaceValueOverColumnToolStripMenuItem.Visible = true; … … 547 558 base.dataGridView_KeyDown(sender, e); 548 559 //data is in read only mode.... 549 if (Content. FilterLogic.IsFiltered) return;560 if (Content.PreprocessingData.IsFiltered) return; 550 561 551 562 if (e.KeyCode == Keys.Delete) { … … 581 592 } 582 593 583 foreach (var selectedCell in dataGridView.SelectedCells) { 584 var cell = (DataGridViewCell)selectedCell; 594 foreach (DataGridViewCell cell in dataGridView.SelectedCells) { 585 595 if (!selectedCells.ContainsKey(cell.ColumnIndex)) 586 selectedCells.Add(cell.ColumnIndex, new List<int>( 1024));596 selectedCells.Add(cell.ColumnIndex, new List<int>()); 587 597 selectedCells[cell.ColumnIndex].Add(cell.RowIndex); 588 598 } … … 591 601 } 592 602 593 private void StartReplacing() {603 private void ReplaceTransaction(Action action) { 594 604 SuspendRepaint(); 595 } 596 597 private void StopReplacing() { 605 action(); 598 606 ResumeRepaint(true); 599 }600 601 private void ReplaceTransaction(Action action) {602 StartReplacing();603 action();604 StopReplacing();605 607 } 606 608 … … 616 618 617 619 #region ContextMenu Events 618 619 620 private void ReplaceWithAverage_Column_Click(object sender, EventArgs e) { 620 621 ReplaceTransaction(() => { 621 Content. ManipulationLogic.ReplaceIndicesByAverageValue(GetSelectedCells(), false);622 Content.ReplaceIndicesByMean(GetSelectedCells(), false); 622 623 }); 623 624 } 624 625 private void ReplaceWithAverage_Selection_Click(object sender, EventArgs e) { 625 626 ReplaceTransaction(() => { 626 Content. ManipulationLogic.ReplaceIndicesByAverageValue(GetSelectedCells(), true);627 Content.ReplaceIndicesByMean(GetSelectedCells(), true); 627 628 }); 628 629 } … … 630 631 private void ReplaceWithMedian_Column_Click(object sender, EventArgs e) { 631 632 ReplaceTransaction(() => { 632 Content. ManipulationLogic.ReplaceIndicesByMedianValue(GetSelectedCells(), false);633 Content.ReplaceIndicesByMedianValue(GetSelectedCells(), false); 633 634 }); 634 635 } 635 636 private void ReplaceWithMedian_Selection_Click(object sender, EventArgs e) { 636 637 ReplaceTransaction(() => { 637 Content. ManipulationLogic.ReplaceIndicesByMedianValue(GetSelectedCells(), true);638 Content.ReplaceIndicesByMedianValue(GetSelectedCells(), true); 638 639 }); 639 640 } … … 641 642 private void ReplaceWithRandom_Column_Click(object sender, EventArgs e) { 642 643 ReplaceTransaction(() => { 643 Content. ManipulationLogic.ReplaceIndicesByRandomValue(GetSelectedCells(), false);644 Content.ReplaceIndicesByRandomValue(GetSelectedCells(), false); 644 645 }); 645 646 } 646 647 private void ReplaceWithRandom_Selection_Click(object sender, EventArgs e) { 647 648 ReplaceTransaction(() => { 648 Content. ManipulationLogic.ReplaceIndicesByRandomValue(GetSelectedCells(), true);649 Content.ReplaceIndicesByRandomValue(GetSelectedCells(), true); 649 650 }); 650 651 } … … 652 653 private void ReplaceWithMostCommon_Column_Click(object sender, EventArgs e) { 653 654 ReplaceTransaction(() => { 654 Content. ManipulationLogic.ReplaceIndicesByMostCommonValue(GetSelectedCells(), false);655 Content.ReplaceIndicesByMode(GetSelectedCells(), false); 655 656 }); 656 657 } 657 658 private void ReplaceWithMostCommon_Selection_Click(object sender, EventArgs e) { 658 659 ReplaceTransaction(() => { 659 Content. ManipulationLogic.ReplaceIndicesByMostCommonValue(GetSelectedCells(), true);660 Content.ReplaceIndicesByMode(GetSelectedCells(), true); 660 661 }); 661 662 } … … 663 664 private void ReplaceWithInterpolation_Column_Click(object sender, EventArgs e) { 664 665 ReplaceTransaction(() => { 665 Content.ManipulationLogic.ReplaceIndicesByLinearInterpolationOfNeighbours(GetSelectedCells()); 666 }); 667 } 668 669 private void ReplaceWithSmoothing_Selection_Click(object sender, EventArgs e) { 670 ReplaceTransaction(() => { 671 Content.ManipulationLogic.ReplaceIndicesBySmoothing(GetSelectedCells()); 666 Content.ReplaceIndicesByLinearInterpolationOfNeighbours(GetSelectedCells()); 672 667 }); 673 668 } … … 675 670 676 671 private void addRowButton_Click(object sender, EventArgs e) { 677 Content.Pre ProcessingData.InsertRow(Content.Rows);672 Content.PreprocessingData.InsertRow(Content.Rows); 678 673 } 679 674 680 675 private void addColumnButton_Click(object sender, EventArgs e) { 681 Content.Pre ProcessingData.InsertColumn<double>(Content.Columns.ToString(), Content.Columns);676 Content.PreprocessingData.InsertColumn<double>(Content.Columns.ToString(), Content.Columns); 682 677 } 683 678 … … 686 681 687 682 if (renameDialog.ShowDialog(this) == DialogResult.OK) { 688 Content.Pre ProcessingData.RenameColumns(renameDialog.ColumnNames);683 Content.PreprocessingData.RenameColumns(renameDialog.ColumnNames); 689 684 } 690 685 } … … 693 688 foreach (DataGridViewColumn column in DataGridView.Columns) { 694 689 var variable = column.HeaderText; 695 bool isInputTarget = Content.Pre ProcessingData.InputVariables.Contains(variable)696 || Content.Pre ProcessingData.TargetVariable == variable;690 bool isInputTarget = Content.PreprocessingData.InputVariables.Contains(variable) 691 || Content.PreprocessingData.TargetVariable == variable; 697 692 column.Visible = isInputTarget; 698 693 } … … 710 705 } 711 706 } 707 708 private void shuffleAllButton_Click(object sender, EventArgs e) { 709 Content.Shuffle(shuffleWithinPartitionsCheckBox.Checked); 710 } 712 711 } 713 712 } -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/DataPreprocessingView.cs ¶
r15381 r15535 49 49 if (Content != null) { 50 50 var data = Content.Data; 51 var filterLogic = new FilterLogic(data);52 var searchLogic = new SearchLogic(data, filterLogic);53 var statisticsLogic = new StatisticsLogic(data, searchLogic);54 var manipulationLogic = new ManipulationLogic(data, searchLogic, statisticsLogic);55 51 56 52 var viewShortcuts = new ItemList<IViewShortcut> { 57 new DataGridContent(data , manipulationLogic, filterLogic),58 new StatisticsContent(data , statisticsLogic),53 new DataGridContent(data), 54 new StatisticsContent(data), 59 55 60 56 new LineChartContent(data), … … 63 59 new MultiScatterPlotContent(data), 64 60 new CorrelationMatrixContent(Content), 65 new DataCompletenessChartContent( searchLogic),66 67 new FilterContent( filterLogic),68 new ManipulationContent( manipulationLogic, searchLogic, filterLogic),69 new TransformationContent(data , filterLogic)61 new DataCompletenessChartContent(data), 62 63 new FilterContent(data), 64 new ManipulationContent(data), 65 new TransformationContent(data) 70 66 }; 71 67 -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/FilterView.Designer.cs ¶
r15242 r15535 46 46 private void InitializeComponent() { 47 47 this.groupBoxFilter = new System.Windows.Forms.GroupBox(); 48 this.checkedFilterView = new HeuristicLab.DataPreprocessing.Views.CheckedFilterCollectionView();49 48 this.groupBoxFilterInfo = new System.Windows.Forms.GroupBox(); 50 49 this.lblPercentage = new System.Windows.Forms.Label(); … … 63 62 this.label3 = new System.Windows.Forms.Label(); 64 63 this.bottomPanel = new System.Windows.Forms.Panel(); 64 this.checkedFilterView = new HeuristicLab.DataPreprocessing.Views.CheckedFilterCollectionView(); 65 65 this.groupBoxFilter.SuspendLayout(); 66 66 this.groupBoxFilterInfo.SuspendLayout(); … … 80 80 this.groupBoxFilter.TabStop = false; 81 81 this.groupBoxFilter.Text = "Filter"; 82 //83 // checkedFilterView84 //85 this.checkedFilterView.Caption = "filterView";86 this.checkedFilterView.Content = null;87 this.checkedFilterView.Dock = System.Windows.Forms.DockStyle.Fill;88 this.checkedFilterView.Location = new System.Drawing.Point(3, 16);89 this.checkedFilterView.Name = "checkedFilterView";90 this.checkedFilterView.ReadOnly = false;91 this.checkedFilterView.ShowDetails = true;92 this.checkedFilterView.Size = new System.Drawing.Size(652, 308);93 this.checkedFilterView.TabIndex = 0;94 82 // 95 83 // groupBoxFilterInfo … … 185 173 this.rBtnOr.AutoSize = true; 186 174 this.rBtnOr.Cursor = System.Windows.Forms.Cursors.Default; 187 this.rBtnOr.Enabled = false;188 175 this.rBtnOr.Location = new System.Drawing.Point(53, 6); 189 176 this.rBtnOr.Name = "rBtnOr"; … … 199 186 this.rBtnAnd.Checked = true; 200 187 this.rBtnAnd.Cursor = System.Windows.Forms.Cursors.Default; 201 this.rBtnAnd.Enabled = false;202 188 this.rBtnAnd.Location = new System.Drawing.Point(3, 6); 203 189 this.rBtnAnd.Name = "rBtnAnd"; … … 273 259 this.bottomPanel.Size = new System.Drawing.Size(670, 30); 274 260 this.bottomPanel.TabIndex = 13; 261 // 262 // checkedFilterView 263 // 264 this.checkedFilterView.Caption = "filterView"; 265 this.checkedFilterView.Content = null; 266 this.checkedFilterView.Dock = System.Windows.Forms.DockStyle.Fill; 267 this.checkedFilterView.Location = new System.Drawing.Point(3, 16); 268 this.checkedFilterView.Name = "checkedFilterView"; 269 this.checkedFilterView.ReadOnly = false; 270 this.checkedFilterView.ShowDetails = true; 271 this.checkedFilterView.Size = new System.Drawing.Size(652, 308); 272 this.checkedFilterView.TabIndex = 0; 275 273 // 276 274 // FilterView -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/FilterView.cs ¶
r15242 r15535 21 21 22 22 using System; 23 using System.Collections.Generic;24 23 using System.Linq; 25 24 using HeuristicLab.Collections; … … 44 43 } 45 44 46 private void InitData() {47 checkedFilterView.Content = Content.Filters;48 checkedFilterView.Content.ItemsAdded += Content_ItemsAdded;49 checkedFilterView.Content.ItemsRemoved += Content_ItemsRemoved;50 checkedFilterView.Content.CheckedItemsChanged += Content_CheckedItemsChanged;51 }52 53 45 protected override void OnContentChanged() { 54 46 base.OnContentChanged(); 55 47 if (Content != null) { 56 InitData(); 57 UpdateFilterInfo(); 48 checkedFilterView.Content = Content.Filters; 49 rBtnAnd.Checked = Content.IsAndCombination; 50 rBtnOr.Checked = !Content.IsAndCombination; 51 UpdateFilter(); 52 } else { 53 checkedFilterView.Content = null; 58 54 } 59 55 } 56 protected override void RegisterContentEvents() { 57 base.RegisterContentEvents(); 58 Content.Filters.ItemsAdded += Content_ItemsAdded; 59 Content.Filters.ItemsRemoved += Content_ItemsRemoved; 60 Content.Filters.CheckedItemsChanged += Content_CheckedItemsChanged; 61 } 62 protected override void DeregisterContentEvents() { 63 Content.Filters.ItemsAdded -= Content_ItemsAdded; 64 Content.Filters.ItemsRemoved -= Content_ItemsRemoved; 65 Content.Filters.CheckedItemsChanged -= Content_CheckedItemsChanged; 66 base.DeregisterContentEvents(); 67 } 60 68 69 private void UpdateFilter() { 70 bool activeFilters = Content.ActiveFilters.Any(); 71 applyFilterButton.Enabled = activeFilters; 72 73 Content.PreprocessingData.ResetFilter(); 74 75 int numTotal = Content.PreprocessingData.Rows; 76 int numRemaining = numTotal; 77 78 if (activeFilters) { 79 var remainingRows = Content.GetRemainingRows(); 80 numRemaining = remainingRows.Count(x => x); 81 82 if (numRemaining < numTotal) { 83 Content.PreprocessingData.SetFilter(remainingRows); 84 } 85 } 86 87 tbRemaining.Text = numRemaining.ToString(); 88 double ratio = numTotal > 0 ? numRemaining / (double)numTotal : 0.0; 89 tbPercentage.Text = ratio.ToString("P4"); 90 tbTotal.Text = numTotal.ToString(); 91 } 92 93 94 #region Content Events 95 //whenever a new filter is added the preprocessing data is set to the filter 96 private void Content_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IFilter> e) { 97 if (Content != null) { 98 foreach (IFilter filter in e.Items) { 99 filter.ConstrainedValue = Content.PreprocessingData; 100 } 101 } 102 } 103 private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IFilter> e) { 104 if (Content != null) { 105 UpdateFilter(); 106 } 107 } 61 108 private void Content_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<IFilter> e) { 62 109 if (Content != null) { … … 64 111 filter.Active = checkedFilterView.Content.ItemChecked(filter); 65 112 } 66 UpdateFilter Info();113 UpdateFilter(); 67 114 } 68 115 } 116 #endregion 69 117 70 private void UpdateFilterInfo() { 71 List<IFilter> filters = Content.Filters.ToList(); 72 int activeFilters = filters.Count(c => c.Active); 73 applyFilterButton.Enabled = (activeFilters > 0); 74 rBtnAnd.Enabled = (activeFilters > 0); 75 rBtnOr.Enabled = (activeFilters > 0); 76 Content.FilterLogic.Reset(); 77 bool[] result = Content.FilterLogic.Preview(filters, rBtnAnd.Checked); 78 79 int filteredCnt = result.Count(c => !c); 80 81 tbRemaining.Text = filteredCnt.ToString(); 82 double percentage = result.Length == 0 ? 0.0 : filteredCnt * 100 / (double)result.Length; 83 tbPercentage.Text = String.Format("{0:0.0000}%", percentage); 84 tbTotal.Text = result.Length.ToString(); 118 #region Controls Events 119 private void rBtnAnd_CheckedChanged(object sender, EventArgs e) { 120 if (Content != null) { 121 Content.IsAndCombination = rBtnAnd.Checked; 122 UpdateFilter(); 123 } 85 124 } 86 87 125 private void applyFilterButton_Click(object sender, EventArgs e) { 88 126 if (Content != null) { 89 List<IFilter> filters = Content.Filters.ToList();90 127 //apply filters 91 Content.FilterLogic.Apply(filters, rBtnAnd.Checked); 128 Content.PreprocessingData.PersistFilter(); 129 Content.PreprocessingData.ResetFilter(); 92 130 //deactivate checked filters 93 filters = checkedFilterView.Content.CheckedItems.ToList(); 94 foreach (IFilter filter in filters) { 131 foreach (var filter in Content.Filters.CheckedItems.ToList()) { 95 132 checkedFilterView.Content.SetItemCheckedState(filter, false); 96 133 filter.Active = false; 97 134 } 98 UpdateFilter Info();135 UpdateFilter(); 99 136 } 100 137 } 101 102 //whenever a new filter is added the preprocessing data is set to the filter 103 private void Content_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IFilter> e) { 104 if (Content != null) { 105 foreach (IFilter filter in e.Items) { 106 filter.ConstrainedValue = Content.FilterLogic.PreprocessingData; 107 } 108 } 109 } 110 111 private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IFilter> e) { 112 if (Content != null) { 113 UpdateFilterInfo(); 114 } 115 } 116 117 private void rBtnAnd_CheckedChanged(object sender, EventArgs e) { 118 if (Content != null) { 119 UpdateFilterInfo(); 120 Content.IsAndCombination = rBtnAnd.Checked; 121 } 122 } 138 #endregion 123 139 } 124 140 } -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.Designer.cs ¶
r14186 r15535 62 62 this.txtDeleteRowsInfo = new System.Windows.Forms.TextBox(); 63 63 this.label5 = new System.Windows.Forms.Label(); 64 this.tabReplaceMissingValues = new System.Windows.Forms.TabPage();65 this.txtReplaceValue = new System.Windows.Forms.TextBox();66 this.cmbVariableNames = new System.Windows.Forms.ComboBox();67 this.cmbReplaceWith = new System.Windows.Forms.ComboBox();68 this.lblValueColon = new System.Windows.Forms.Label();69 this.label8 = new System.Windows.Forms.Label();70 this.label10 = new System.Windows.Forms.Label();71 this.tabDataShuffle = new System.Windows.Forms.TabPage();72 this.shuffleSeparatelyCheckbox = new System.Windows.Forms.CheckBox();73 this.lblShuffleProperties = new System.Windows.Forms.Label();74 64 this.grpBoxPreview = new System.Windows.Forms.GroupBox(); 75 65 this.tabsPreview = new System.Windows.Forms.TabControl(); … … 77 67 this.lblPreviewInActive = new System.Windows.Forms.Label(); 78 68 this.tabPreviewDeleteColumnsInfo = new System.Windows.Forms.TabPage(); 69 this.panel1 = new System.Windows.Forms.Panel(); 79 70 this.lblPreviewColumnsInfo = new System.Windows.Forms.Label(); 80 71 this.tabPreviewDeleteColumnsVariance = new System.Windows.Forms.TabPage(); 72 this.panel2 = new System.Windows.Forms.Panel(); 73 this.lblPreviewColumnsVariance = new System.Windows.Forms.Label(); 81 74 this.label12 = new System.Windows.Forms.Label(); 82 this.lblPreviewColumnsVariance = new System.Windows.Forms.Label();83 75 this.tabPreviewDeleteRowsInfo = new System.Windows.Forms.TabPage(); 84 76 this.lblPreviewRowsInfo = new System.Windows.Forms.Label(); 85 this.tabPreviewReplaceMissingValues = new System.Windows.Forms.TabPage();86 this.lblPreviewReplaceMissingValues = new System.Windows.Forms.Label();87 this.tabPreviewShuffle = new System.Windows.Forms.TabPage();88 this.lblPreviewShuffle = new System.Windows.Forms.Label();89 77 this.label9 = new System.Windows.Forms.Label(); 90 this.panel1 = new System.Windows.Forms.Panel();91 this.panel2 = new System.Windows.Forms.Panel();92 78 this.grpBoxData.SuspendLayout(); 93 79 this.tabsData.SuspendLayout(); … … 96 82 this.tabDataDeleteColumnsVariance.SuspendLayout(); 97 83 this.tabDataDeleteRowsInfo.SuspendLayout(); 98 this.tabReplaceMissingValues.SuspendLayout();99 this.tabDataShuffle.SuspendLayout();100 84 this.grpBoxPreview.SuspendLayout(); 101 85 this.tabsPreview.SuspendLayout(); 102 86 this.tabPreviewInactive.SuspendLayout(); 103 87 this.tabPreviewDeleteColumnsInfo.SuspendLayout(); 88 this.panel1.SuspendLayout(); 104 89 this.tabPreviewDeleteColumnsVariance.SuspendLayout(); 90 this.panel2.SuspendLayout(); 105 91 this.tabPreviewDeleteRowsInfo.SuspendLayout(); 106 this.tabPreviewReplaceMissingValues.SuspendLayout();107 this.tabPreviewShuffle.SuspendLayout();108 this.panel1.SuspendLayout();109 this.panel2.SuspendLayout();110 92 this.SuspendLayout(); 111 93 // 112 94 // lstMethods 113 95 // 114 this.lstMethods.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 96 this.lstMethods.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 115 97 | System.Windows.Forms.AnchorStyles.Right))); 116 98 this.lstMethods.FormattingEnabled = true; 117 this.lstMethods.ItemHeight = 16;118 99 this.lstMethods.Items.AddRange(new object[] { 119 100 "Delete Columns with insufficient Information", 120 101 "Delete Columns with insufficient Variance", 121 "Delete Rows with insufficient Information", 122 "Replace Missing Values", 123 "Shuffle Data"}); 124 this.lstMethods.Location = new System.Drawing.Point(4, 4); 125 this.lstMethods.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 102 "Delete Rows with insufficient Information"}); 103 this.lstMethods.Location = new System.Drawing.Point(3, 3); 126 104 this.lstMethods.Name = "lstMethods"; 127 this.lstMethods.Size = new System.Drawing.Size( 976, 116);105 this.lstMethods.Size = new System.Drawing.Size(733, 95); 128 106 this.lstMethods.Sorted = true; 129 107 this.lstMethods.TabIndex = 0; … … 134 112 this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 135 113 this.btnApply.Enabled = false; 136 this.btnApply.Location = new System.Drawing.Point(804, 615); 137 this.btnApply.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 114 this.btnApply.Location = new System.Drawing.Point(603, 500); 138 115 this.btnApply.Name = "btnApply"; 139 this.btnApply.Size = new System.Drawing.Size(1 72, 28);116 this.btnApply.Size = new System.Drawing.Size(129, 23); 140 117 this.btnApply.TabIndex = 2; 141 118 this.btnApply.Text = "Apply Manipulation"; … … 145 122 // grpBoxData 146 123 // 147 this.grpBoxData.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 124 this.grpBoxData.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 148 125 | System.Windows.Forms.AnchorStyles.Right))); 149 126 this.grpBoxData.Controls.Add(this.tabsData); 150 this.grpBoxData.Location = new System.Drawing.Point(5, 129); 151 this.grpBoxData.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 127 this.grpBoxData.Location = new System.Drawing.Point(4, 105); 152 128 this.grpBoxData.Name = "grpBoxData"; 153 this.grpBoxData.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4); 154 this.grpBoxData.Size = new System.Drawing.Size(976, 233); 129 this.grpBoxData.Size = new System.Drawing.Size(732, 189); 155 130 this.grpBoxData.TabIndex = 3; 156 131 this.grpBoxData.TabStop = false; … … 159 134 // tabsData 160 135 // 161 this.tabsData.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 136 this.tabsData.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 162 137 | System.Windows.Forms.AnchorStyles.Right))); 163 138 this.tabsData.Controls.Add(this.tabPage1); … … 165 140 this.tabsData.Controls.Add(this.tabDataDeleteColumnsVariance); 166 141 this.tabsData.Controls.Add(this.tabDataDeleteRowsInfo); 167 this.tabsData.Controls.Add(this.tabReplaceMissingValues);168 this.tabsData.Controls.Add(this.tabDataShuffle);169 142 this.tabsData.ItemSize = new System.Drawing.Size(58, 18); 170 this.tabsData.Location = new System.Drawing.Point(8, 23); 171 this.tabsData.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 143 this.tabsData.Location = new System.Drawing.Point(6, 19); 172 144 this.tabsData.Name = "tabsData"; 173 145 this.tabsData.SelectedIndex = 0; 174 this.tabsData.Size = new System.Drawing.Size( 959, 202);146 this.tabsData.Size = new System.Drawing.Size(719, 164); 175 147 this.tabsData.TabIndex = 3; 176 148 // … … 179 151 this.tabPage1.Controls.Add(this.label7); 180 152 this.tabPage1.Location = new System.Drawing.Point(4, 22); 181 this.tabPage1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);182 153 this.tabPage1.Name = "tabPage1"; 183 this.tabPage1.Padding = new System.Windows.Forms.Padding( 4, 4, 4, 4);184 this.tabPage1.Size = new System.Drawing.Size( 951, 176);154 this.tabPage1.Padding = new System.Windows.Forms.Padding(3); 155 this.tabPage1.Size = new System.Drawing.Size(711, 138); 185 156 this.tabPage1.TabIndex = 5; 186 157 this.tabPage1.Text = "tabDataInactive"; … … 191 162 this.label7.AutoSize = true; 192 163 this.label7.Enabled = false; 193 this.label7.Location = new System.Drawing.Point(4, 4); 194 this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 164 this.label7.Location = new System.Drawing.Point(3, 3); 195 165 this.label7.Name = "label7"; 196 this.label7.Size = new System.Drawing.Size( 345, 17);166 this.label7.Size = new System.Drawing.Size(259, 13); 197 167 this.label7.TabIndex = 1; 198 168 this.label7.Text = "Please select one of the manipulation methods above"; … … 204 174 this.tabDataDeleteColumnsInformation.Controls.Add(this.label1); 205 175 this.tabDataDeleteColumnsInformation.Location = new System.Drawing.Point(4, 22); 206 this.tabDataDeleteColumnsInformation.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);207 176 this.tabDataDeleteColumnsInformation.Name = "tabDataDeleteColumnsInformation"; 208 this.tabDataDeleteColumnsInformation.Padding = new System.Windows.Forms.Padding( 4, 4, 4, 4);209 this.tabDataDeleteColumnsInformation.Size = new System.Drawing.Size( 951, 176);177 this.tabDataDeleteColumnsInformation.Padding = new System.Windows.Forms.Padding(3); 178 this.tabDataDeleteColumnsInformation.Size = new System.Drawing.Size(711, 138); 210 179 this.tabDataDeleteColumnsInformation.TabIndex = 0; 211 180 this.tabDataDeleteColumnsInformation.Text = "del columns info"; … … 215 184 // 216 185 this.label2.AutoSize = true; 217 this.label2.Location = new System.Drawing.Point(272, 4); 218 this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 186 this.label2.Location = new System.Drawing.Point(204, 3); 219 187 this.label2.Name = "label2"; 220 this.label2.Size = new System.Drawing.Size( 120, 17);188 this.label2.Size = new System.Drawing.Size(89, 13); 221 189 this.label2.TabIndex = 5; 222 190 this.label2.Text = "% missing values."; … … 224 192 // txtDeleteColumnsInfo 225 193 // 226 this.txtDeleteColumnsInfo.Location = new System.Drawing.Point(219, 0); 227 this.txtDeleteColumnsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 194 this.txtDeleteColumnsInfo.Location = new System.Drawing.Point(164, 0); 228 195 this.txtDeleteColumnsInfo.Name = "txtDeleteColumnsInfo"; 229 this.txtDeleteColumnsInfo.Size = new System.Drawing.Size( 44, 22);196 this.txtDeleteColumnsInfo.Size = new System.Drawing.Size(34, 20); 230 197 this.txtDeleteColumnsInfo.TabIndex = 4; 231 198 this.txtDeleteColumnsInfo.TextChanged += new System.EventHandler(this.txtDeleteColumnsInfo_TextChanged); … … 234 201 // 235 202 this.label1.AutoSize = true; 236 this.label1.Location = new System.Drawing.Point(4, 4); 237 this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 203 this.label1.Location = new System.Drawing.Point(3, 3); 238 204 this.label1.Name = "label1"; 239 this.label1.Size = new System.Drawing.Size( 205, 17);205 this.label1.Size = new System.Drawing.Size(155, 13); 240 206 this.label1.TabIndex = 3; 241 207 this.label1.Text = "Delete columns with more than "; … … 246 212 this.tabDataDeleteColumnsVariance.Controls.Add(this.label4); 247 213 this.tabDataDeleteColumnsVariance.Location = new System.Drawing.Point(4, 22); 248 this.tabDataDeleteColumnsVariance.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);249 214 this.tabDataDeleteColumnsVariance.Name = "tabDataDeleteColumnsVariance"; 250 this.tabDataDeleteColumnsVariance.Padding = new System.Windows.Forms.Padding( 4, 4, 4, 4);251 this.tabDataDeleteColumnsVariance.Size = new System.Drawing.Size( 951, 176);215 this.tabDataDeleteColumnsVariance.Padding = new System.Windows.Forms.Padding(3); 216 this.tabDataDeleteColumnsVariance.Size = new System.Drawing.Size(711, 138); 252 217 this.tabDataDeleteColumnsVariance.TabIndex = 1; 253 218 this.tabDataDeleteColumnsVariance.Text = "del columns variance"; … … 256 221 // txtDeleteColumnsVariance 257 222 // 258 this.txtDeleteColumnsVariance.Location = new System.Drawing.Point(305, 0); 259 this.txtDeleteColumnsVariance.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 223 this.txtDeleteColumnsVariance.Location = new System.Drawing.Point(229, 0); 260 224 this.txtDeleteColumnsVariance.Name = "txtDeleteColumnsVariance"; 261 this.txtDeleteColumnsVariance.Size = new System.Drawing.Size(1 79, 22);225 this.txtDeleteColumnsVariance.Size = new System.Drawing.Size(135, 20); 262 226 this.txtDeleteColumnsVariance.TabIndex = 4; 263 227 this.txtDeleteColumnsVariance.TextChanged += new System.EventHandler(this.txtDeleteColumnsVariance_TextChanged); … … 266 230 // 267 231 this.label4.AutoSize = true; 268 this.label4.Location = new System.Drawing.Point(4, 4); 269 this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 232 this.label4.Location = new System.Drawing.Point(3, 3); 270 233 this.label4.Name = "label4"; 271 this.label4.Size = new System.Drawing.Size(2 92, 17);234 this.label4.Size = new System.Drawing.Size(220, 13); 272 235 this.label4.TabIndex = 3; 273 236 this.label4.Text = "Delete columns with a variance smaller than "; … … 279 242 this.tabDataDeleteRowsInfo.Controls.Add(this.label5); 280 243 this.tabDataDeleteRowsInfo.Location = new System.Drawing.Point(4, 22); 281 this.tabDataDeleteRowsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);282 244 this.tabDataDeleteRowsInfo.Name = "tabDataDeleteRowsInfo"; 283 this.tabDataDeleteRowsInfo.Padding = new System.Windows.Forms.Padding( 4, 4, 4, 4);284 this.tabDataDeleteRowsInfo.Size = new System.Drawing.Size( 951, 176);245 this.tabDataDeleteRowsInfo.Padding = new System.Windows.Forms.Padding(3); 246 this.tabDataDeleteRowsInfo.Size = new System.Drawing.Size(711, 138); 285 247 this.tabDataDeleteRowsInfo.TabIndex = 2; 286 248 this.tabDataDeleteRowsInfo.Text = "del rows info"; … … 290 252 // 291 253 this.label3.AutoSize = true; 292 this.label3.Location = new System.Drawing.Point(252, 4); 293 this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 254 this.label3.Location = new System.Drawing.Point(189, 3); 294 255 this.label3.Name = "label3"; 295 this.label3.Size = new System.Drawing.Size( 120, 17);256 this.label3.Size = new System.Drawing.Size(89, 13); 296 257 this.label3.TabIndex = 8; 297 258 this.label3.Text = "% missing values."; … … 299 260 // txtDeleteRowsInfo 300 261 // 301 this.txtDeleteRowsInfo.Location = new System.Drawing.Point(196, 0); 302 this.txtDeleteRowsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 262 this.txtDeleteRowsInfo.Location = new System.Drawing.Point(147, 0); 303 263 this.txtDeleteRowsInfo.Name = "txtDeleteRowsInfo"; 304 this.txtDeleteRowsInfo.Size = new System.Drawing.Size( 44, 22);264 this.txtDeleteRowsInfo.Size = new System.Drawing.Size(34, 20); 305 265 this.txtDeleteRowsInfo.TabIndex = 7; 306 266 this.txtDeleteRowsInfo.TextChanged += new System.EventHandler(this.txtDeleteRowsInfo_TextChanged); … … 309 269 // 310 270 this.label5.AutoSize = true; 311 this.label5.Location = new System.Drawing.Point(4, 4); 312 this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 271 this.label5.Location = new System.Drawing.Point(3, 3); 313 272 this.label5.Name = "label5"; 314 this.label5.Size = new System.Drawing.Size(1 82, 17);273 this.label5.Size = new System.Drawing.Size(138, 13); 315 274 this.label5.TabIndex = 6; 316 275 this.label5.Text = "Delete rows with more than "; 317 276 // 318 // tabReplaceMissingValues319 //320 this.tabReplaceMissingValues.Controls.Add(this.txtReplaceValue);321 this.tabReplaceMissingValues.Controls.Add(this.cmbVariableNames);322 this.tabReplaceMissingValues.Controls.Add(this.cmbReplaceWith);323 this.tabReplaceMissingValues.Controls.Add(this.lblValueColon);324 this.tabReplaceMissingValues.Controls.Add(this.label8);325 this.tabReplaceMissingValues.Controls.Add(this.label10);326 this.tabReplaceMissingValues.Location = new System.Drawing.Point(4, 22);327 this.tabReplaceMissingValues.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);328 this.tabReplaceMissingValues.Name = "tabReplaceMissingValues";329 this.tabReplaceMissingValues.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);330 this.tabReplaceMissingValues.Size = new System.Drawing.Size(951, 176);331 this.tabReplaceMissingValues.TabIndex = 6;332 this.tabReplaceMissingValues.Text = "repl missing vals";333 this.tabReplaceMissingValues.UseVisualStyleBackColor = true;334 //335 // txtReplaceValue336 //337 this.txtReplaceValue.Location = new System.Drawing.Point(231, 33);338 this.txtReplaceValue.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);339 this.txtReplaceValue.Name = "txtReplaceValue";340 this.txtReplaceValue.Size = new System.Drawing.Size(132, 22);341 this.txtReplaceValue.TabIndex = 2;342 this.txtReplaceValue.TextChanged += new System.EventHandler(this.txtReplaceValue_TextChanged);343 //344 // cmbVariableNames345 //346 this.cmbVariableNames.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;347 this.cmbVariableNames.FormattingEnabled = true;348 this.cmbVariableNames.Location = new System.Drawing.Point(189, 0);349 this.cmbVariableNames.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);350 this.cmbVariableNames.Name = "cmbVariableNames";351 this.cmbVariableNames.Size = new System.Drawing.Size(160, 24);352 this.cmbVariableNames.TabIndex = 1;353 this.cmbVariableNames.SelectedIndexChanged += new System.EventHandler(this.cmbReplaceWith_SelectedIndexChanged);354 //355 // cmbReplaceWith356 //357 this.cmbReplaceWith.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;358 this.cmbReplaceWith.FormattingEnabled = true;359 this.cmbReplaceWith.Items.AddRange(new object[] {360 "Value",361 "Average",362 "Median",363 "Most Common",364 "Random"});365 this.cmbReplaceWith.Location = new System.Drawing.Point(47, 33);366 this.cmbReplaceWith.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);367 this.cmbReplaceWith.Name = "cmbReplaceWith";368 this.cmbReplaceWith.Size = new System.Drawing.Size(160, 24);369 this.cmbReplaceWith.TabIndex = 1;370 this.cmbReplaceWith.SelectedIndexChanged += new System.EventHandler(this.cmbReplaceWith_SelectedIndexChanged);371 //372 // lblValueColon373 //374 this.lblValueColon.AutoSize = true;375 this.lblValueColon.Location = new System.Drawing.Point(209, 37);376 this.lblValueColon.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);377 this.lblValueColon.Name = "lblValueColon";378 this.lblValueColon.Size = new System.Drawing.Size(12, 17);379 this.lblValueColon.TabIndex = 0;380 this.lblValueColon.Text = ":";381 //382 // label8383 //384 this.label8.AutoSize = true;385 this.label8.Location = new System.Drawing.Point(4, 37);386 this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);387 this.label8.Name = "label8";388 this.label8.Size = new System.Drawing.Size(32, 17);389 this.label8.TabIndex = 0;390 this.label8.Text = "with";391 //392 // label10393 //394 this.label10.AutoSize = true;395 this.label10.Location = new System.Drawing.Point(4, 4);396 this.label10.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);397 this.label10.Name = "label10";398 this.label10.Size = new System.Drawing.Size(177, 17);399 this.label10.TabIndex = 0;400 this.label10.Text = "Replace missing values for";401 //402 // tabDataShuffle403 //404 this.tabDataShuffle.Controls.Add(this.shuffleSeparatelyCheckbox);405 this.tabDataShuffle.Controls.Add(this.lblShuffleProperties);406 this.tabDataShuffle.Location = new System.Drawing.Point(4, 22);407 this.tabDataShuffle.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);408 this.tabDataShuffle.Name = "tabDataShuffle";409 this.tabDataShuffle.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);410 this.tabDataShuffle.Size = new System.Drawing.Size(951, 176);411 this.tabDataShuffle.TabIndex = 4;412 this.tabDataShuffle.Text = "shuffle";413 this.tabDataShuffle.UseVisualStyleBackColor = true;414 //415 // shuffleSeparatelyCheckbox416 //417 this.shuffleSeparatelyCheckbox.AutoSize = true;418 this.shuffleSeparatelyCheckbox.Location = new System.Drawing.Point(8, 2);419 this.shuffleSeparatelyCheckbox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);420 this.shuffleSeparatelyCheckbox.Name = "shuffleSeparatelyCheckbox";421 this.shuffleSeparatelyCheckbox.Size = new System.Drawing.Size(312, 21);422 this.shuffleSeparatelyCheckbox.TabIndex = 1;423 this.shuffleSeparatelyCheckbox.Text = "Shuffle training and test partitions separately";424 this.shuffleSeparatelyCheckbox.UseVisualStyleBackColor = true;425 //426 // lblShuffleProperties427 //428 this.lblShuffleProperties.AutoSize = true;429 this.lblShuffleProperties.Enabled = false;430 this.lblShuffleProperties.Location = new System.Drawing.Point(4, 4);431 this.lblShuffleProperties.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);432 this.lblShuffleProperties.Name = "lblShuffleProperties";433 this.lblShuffleProperties.Size = new System.Drawing.Size(154, 17);434 this.lblShuffleProperties.TabIndex = 0;435 this.lblShuffleProperties.Text = "No properties available";436 //437 277 // grpBoxPreview 438 278 // 439 this.grpBoxPreview.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 440 | System.Windows.Forms.AnchorStyles.Left) 279 this.grpBoxPreview.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 280 | System.Windows.Forms.AnchorStyles.Left) 441 281 | System.Windows.Forms.AnchorStyles.Right))); 442 282 this.grpBoxPreview.Controls.Add(this.tabsPreview); 443 this.grpBoxPreview.Location = new System.Drawing.Point(5, 370); 444 this.grpBoxPreview.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 283 this.grpBoxPreview.Location = new System.Drawing.Point(4, 301); 445 284 this.grpBoxPreview.Name = "grpBoxPreview"; 446 this.grpBoxPreview.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4); 447 this.grpBoxPreview.Size = new System.Drawing.Size(976, 238); 285 this.grpBoxPreview.Size = new System.Drawing.Size(732, 193); 448 286 this.grpBoxPreview.TabIndex = 4; 449 287 this.grpBoxPreview.TabStop = false; … … 452 290 // tabsPreview 453 291 // 454 this.tabsPreview.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 292 this.tabsPreview.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 455 293 | System.Windows.Forms.AnchorStyles.Right))); 456 294 this.tabsPreview.Controls.Add(this.tabPreviewInactive); … … 458 296 this.tabsPreview.Controls.Add(this.tabPreviewDeleteColumnsVariance); 459 297 this.tabsPreview.Controls.Add(this.tabPreviewDeleteRowsInfo); 460 this.tabsPreview.Controls.Add(this.tabPreviewReplaceMissingValues);461 this.tabsPreview.Controls.Add(this.tabPreviewShuffle);462 298 this.tabsPreview.ItemSize = new System.Drawing.Size(58, 18); 463 this.tabsPreview.Location = new System.Drawing.Point(8, 23); 464 this.tabsPreview.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); 299 this.tabsPreview.Location = new System.Drawing.Point(6, 19); 465 300 this.tabsPreview.Name = "tabsPreview"; 466 301 this.tabsPreview.SelectedIndex = 0; 467 this.tabsPreview.Size = new System.Drawing.Size( 959, 207);302 this.tabsPreview.Size = new System.Drawing.Size(719, 168); 468 303 this.tabsPreview.TabIndex = 3; 469 304 // … … 472 307 this.tabPreviewInactive.Controls.Add(this.lblPreviewInActive); 473 308 this.tabPreviewInactive.Location = new System.Drawing.Point(4, 22); 474 this.tabPreviewInactive.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);475 309 this.tabPreviewInactive.Name = "tabPreviewInactive"; 476 this.tabPreviewInactive.Padding = new System.Windows.Forms.Padding( 4, 4, 4, 4);477 this.tabPreviewInactive.Size = new System.Drawing.Size( 951, 181);310 this.tabPreviewInactive.Padding = new System.Windows.Forms.Padding(3); 311 this.tabPreviewInactive.Size = new System.Drawing.Size(711, 142); 478 312 this.tabPreviewInactive.TabIndex = 5; 479 313 this.tabPreviewInactive.Text = "inactive"; … … 483 317 // 484 318 this.lblPreviewInActive.AutoSize = true; 485 this.lblPreviewInActive.Location = new System.Drawing.Point(4, 4); 486 this.lblPreviewInActive.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 319 this.lblPreviewInActive.Location = new System.Drawing.Point(3, 3); 487 320 this.lblPreviewInActive.Name = "lblPreviewInActive"; 488 this.lblPreviewInActive.Size = new System.Drawing.Size( 491, 51);321 this.lblPreviewInActive.Size = new System.Drawing.Size(361, 39); 489 322 this.lblPreviewInActive.TabIndex = 2; 490 323 this.lblPreviewInActive.Text = "Filters are active and thus manipulations cannot be applied!\r\n\r\nPlease deactive t" + … … 496 329 this.tabPreviewDeleteColumnsInfo.Controls.Add(this.panel1); 497 330 this.tabPreviewDeleteColumnsInfo.Location = new System.Drawing.Point(4, 22); 498 this.tabPreviewDeleteColumnsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);499 331 this.tabPreviewDeleteColumnsInfo.Name = "tabPreviewDeleteColumnsInfo"; 500 this.tabPreviewDeleteColumnsInfo.Padding = new System.Windows.Forms.Padding( 4, 4, 4, 4);501 this.tabPreviewDeleteColumnsInfo.Size = new System.Drawing.Size( 951, 181);332 this.tabPreviewDeleteColumnsInfo.Padding = new System.Windows.Forms.Padding(3); 333 this.tabPreviewDeleteColumnsInfo.Size = new System.Drawing.Size(711, 142); 502 334 this.tabPreviewDeleteColumnsInfo.TabIndex = 0; 503 335 this.tabPreviewDeleteColumnsInfo.Text = "del columns info"; 504 336 this.tabPreviewDeleteColumnsInfo.UseVisualStyleBackColor = true; 505 337 // 338 // panel1 339 // 340 this.panel1.AutoScroll = true; 341 this.panel1.Controls.Add(this.lblPreviewColumnsInfo); 342 this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; 343 this.panel1.Location = new System.Drawing.Point(3, 3); 344 this.panel1.Margin = new System.Windows.Forms.Padding(2); 345 this.panel1.Name = "panel1"; 346 this.panel1.Size = new System.Drawing.Size(705, 136); 347 this.panel1.TabIndex = 2; 348 // 506 349 // lblPreviewColumnsInfo 507 350 // … … 509 352 this.lblPreviewColumnsInfo.Dock = System.Windows.Forms.DockStyle.Left; 510 353 this.lblPreviewColumnsInfo.Location = new System.Drawing.Point(0, 0); 511 this.lblPreviewColumnsInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);512 354 this.lblPreviewColumnsInfo.Name = "lblPreviewColumnsInfo"; 513 this.lblPreviewColumnsInfo.Size = new System.Drawing.Size( 423, 17);355 this.lblPreviewColumnsInfo.Size = new System.Drawing.Size(318, 13); 514 356 this.lblPreviewColumnsInfo.TabIndex = 1; 515 357 this.lblPreviewColumnsInfo.Text = "{0} columns with more than {1} % missing values would be deleted"; … … 520 362 this.tabPreviewDeleteColumnsVariance.Controls.Add(this.label12); 521 363 this.tabPreviewDeleteColumnsVariance.Location = new System.Drawing.Point(4, 22); 522 this.tabPreviewDeleteColumnsVariance.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);523 364 this.tabPreviewDeleteColumnsVariance.Name = "tabPreviewDeleteColumnsVariance"; 524 this.tabPreviewDeleteColumnsVariance.Padding = new System.Windows.Forms.Padding( 4, 4, 4, 4);525 this.tabPreviewDeleteColumnsVariance.Size = new System.Drawing.Size( 951, 181);365 this.tabPreviewDeleteColumnsVariance.Padding = new System.Windows.Forms.Padding(3); 366 this.tabPreviewDeleteColumnsVariance.Size = new System.Drawing.Size(711, 142); 526 367 this.tabPreviewDeleteColumnsVariance.TabIndex = 1; 527 368 this.tabPreviewDeleteColumnsVariance.Text = "del columns variance"; 528 369 this.tabPreviewDeleteColumnsVariance.UseVisualStyleBackColor = true; 529 370 // 530 // label12 531 // 532 this.label12.AutoSize = true; 533 this.label12.Location = new System.Drawing.Point(8, 27); 534 this.label12.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 535 this.label12.Name = "label12"; 536 this.label12.Size = new System.Drawing.Size(0, 17); 537 this.label12.TabIndex = 2; 371 // panel2 372 // 373 this.panel2.AutoScroll = true; 374 this.panel2.Controls.Add(this.lblPreviewColumnsVariance); 375 this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; 376 this.panel2.Location = new System.Drawing.Point(3, 3); 377 this.panel2.Margin = new System.Windows.Forms.Padding(2); 378 this.panel2.Name = "panel2"; 379 this.panel2.Size = new System.Drawing.Size(705, 136); 380 this.panel2.TabIndex = 3; 538 381 // 539 382 // lblPreviewColumnsVariance … … 542 385 this.lblPreviewColumnsVariance.Dock = System.Windows.Forms.DockStyle.Left; 543 386 this.lblPreviewColumnsVariance.Location = new System.Drawing.Point(0, 0); 544 this.lblPreviewColumnsVariance.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);545 387 this.lblPreviewColumnsVariance.Name = "lblPreviewColumnsVariance"; 546 this.lblPreviewColumnsVariance.Size = new System.Drawing.Size(3 98, 17);388 this.lblPreviewColumnsVariance.Size = new System.Drawing.Size(301, 13); 547 389 this.lblPreviewColumnsVariance.TabIndex = 2; 548 390 this.lblPreviewColumnsVariance.Text = "{0} columns with a variance smaller than {1} would be deleted."; 549 391 // 392 // label12 393 // 394 this.label12.AutoSize = true; 395 this.label12.Location = new System.Drawing.Point(6, 22); 396 this.label12.Name = "label12"; 397 this.label12.Size = new System.Drawing.Size(0, 13); 398 this.label12.TabIndex = 2; 399 // 550 400 // tabPreviewDeleteRowsInfo 551 401 // 552 402 this.tabPreviewDeleteRowsInfo.Controls.Add(this.lblPreviewRowsInfo); 553 403 this.tabPreviewDeleteRowsInfo.Location = new System.Drawing.Point(4, 22); 554 this.tabPreviewDeleteRowsInfo.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);555 404 this.tabPreviewDeleteRowsInfo.Name = "tabPreviewDeleteRowsInfo"; 556 this.tabPreviewDeleteRowsInfo.Padding = new System.Windows.Forms.Padding( 4, 4, 4, 4);557 this.tabPreviewDeleteRowsInfo.Size = new System.Drawing.Size( 951, 181);405 this.tabPreviewDeleteRowsInfo.Padding = new System.Windows.Forms.Padding(3); 406 this.tabPreviewDeleteRowsInfo.Size = new System.Drawing.Size(711, 142); 558 407 this.tabPreviewDeleteRowsInfo.TabIndex = 2; 559 408 this.tabPreviewDeleteRowsInfo.Text = "del rows info"; … … 563 412 // 564 413 this.lblPreviewRowsInfo.AutoSize = true; 565 this.lblPreviewRowsInfo.Location = new System.Drawing.Point(4, 4); 566 this.lblPreviewRowsInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); 414 this.lblPreviewRowsInfo.Location = new System.Drawing.Point(3, 3); 567 415 this.lblPreviewRowsInfo.Name = "lblPreviewRowsInfo"; 568 this.lblPreviewRowsInfo.Size = new System.Drawing.Size( 400, 17);416 this.lblPreviewRowsInfo.Size = new System.Drawing.Size(301, 13); 569 417 this.lblPreviewRowsInfo.TabIndex = 2; 570 418 this.lblPreviewRowsInfo.Text = "{0} rows with more than {1} % missing values would be deleted"; 571 //572 // tabPreviewReplaceMissingValues573 //574 this.tabPreviewReplaceMissingValues.Controls.Add(this.lblPreviewReplaceMissingValues);575 this.tabPreviewReplaceMissingValues.Location = new System.Drawing.Point(4, 22);576 this.tabPreviewReplaceMissingValues.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);577 this.tabPreviewReplaceMissingValues.Name = "tabPreviewReplaceMissingValues";578 this.tabPreviewReplaceMissingValues.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);579 this.tabPreviewReplaceMissingValues.Size = new System.Drawing.Size(951, 181);580 this.tabPreviewReplaceMissingValues.TabIndex = 6;581 this.tabPreviewReplaceMissingValues.Text = "repl missing vals";582 this.tabPreviewReplaceMissingValues.UseVisualStyleBackColor = true;583 //584 // lblPreviewReplaceMissingValues585 //586 this.lblPreviewReplaceMissingValues.AutoSize = true;587 this.lblPreviewReplaceMissingValues.Location = new System.Drawing.Point(4, 4);588 this.lblPreviewReplaceMissingValues.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);589 this.lblPreviewReplaceMissingValues.Name = "lblPreviewReplaceMissingValues";590 this.lblPreviewReplaceMissingValues.Size = new System.Drawing.Size(449, 17);591 this.lblPreviewReplaceMissingValues.TabIndex = 3;592 this.lblPreviewReplaceMissingValues.Text = "{0} cells detected with missing values which would be replaced with {1}";593 //594 // tabPreviewShuffle595 //596 this.tabPreviewShuffle.Controls.Add(this.lblPreviewShuffle);597 this.tabPreviewShuffle.Location = new System.Drawing.Point(4, 22);598 this.tabPreviewShuffle.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);599 this.tabPreviewShuffle.Name = "tabPreviewShuffle";600 this.tabPreviewShuffle.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);601 this.tabPreviewShuffle.Size = new System.Drawing.Size(951, 181);602 this.tabPreviewShuffle.TabIndex = 4;603 this.tabPreviewShuffle.Text = "shuffle";604 this.tabPreviewShuffle.UseVisualStyleBackColor = true;605 //606 // lblPreviewShuffle607 //608 this.lblPreviewShuffle.AutoSize = true;609 this.lblPreviewShuffle.Location = new System.Drawing.Point(4, 4);610 this.lblPreviewShuffle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);611 this.lblPreviewShuffle.Name = "lblPreviewShuffle";612 this.lblPreviewShuffle.Size = new System.Drawing.Size(337, 17);613 this.lblPreviewShuffle.TabIndex = 0;614 this.lblPreviewShuffle.Text = "Data will be shuffled randomly - preview not possible";615 419 // 616 420 // label9 … … 621 425 this.label9.TabIndex = 0; 622 426 // 623 // panel1624 //625 this.panel1.AutoScroll = true;626 this.panel1.Controls.Add(this.lblPreviewColumnsInfo);627 this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;628 this.panel1.Location = new System.Drawing.Point(4, 4);629 this.panel1.Name = "panel1";630 this.panel1.Size = new System.Drawing.Size(943, 173);631 this.panel1.TabIndex = 2;632 //633 // panel2634 //635 this.panel2.AutoScroll = true;636 this.panel2.Controls.Add(this.lblPreviewColumnsVariance);637 this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;638 this.panel2.Location = new System.Drawing.Point(4, 4);639 this.panel2.Name = "panel2";640 this.panel2.Size = new System.Drawing.Size(943, 173);641 this.panel2.TabIndex = 3;642 //643 427 // ManipulationView 644 428 // 645 this.AutoScaleDimensions = new System.Drawing.SizeF( 8F, 16F);429 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 646 430 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 647 431 this.Controls.Add(this.btnApply); … … 649 433 this.Controls.Add(this.grpBoxData); 650 434 this.Controls.Add(this.lstMethods); 651 this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);652 435 this.Name = "ManipulationView"; 653 this.Size = new System.Drawing.Size( 985, 651);436 this.Size = new System.Drawing.Size(739, 529); 654 437 this.grpBoxData.ResumeLayout(false); 655 438 this.tabsData.ResumeLayout(false); … … 662 445 this.tabDataDeleteRowsInfo.ResumeLayout(false); 663 446 this.tabDataDeleteRowsInfo.PerformLayout(); 664 this.tabReplaceMissingValues.ResumeLayout(false);665 this.tabReplaceMissingValues.PerformLayout();666 this.tabDataShuffle.ResumeLayout(false);667 this.tabDataShuffle.PerformLayout();668 447 this.grpBoxPreview.ResumeLayout(false); 669 448 this.tabsPreview.ResumeLayout(false); … … 671 450 this.tabPreviewInactive.PerformLayout(); 672 451 this.tabPreviewDeleteColumnsInfo.ResumeLayout(false); 452 this.panel1.ResumeLayout(false); 453 this.panel1.PerformLayout(); 673 454 this.tabPreviewDeleteColumnsVariance.ResumeLayout(false); 674 455 this.tabPreviewDeleteColumnsVariance.PerformLayout(); 456 this.panel2.ResumeLayout(false); 457 this.panel2.PerformLayout(); 675 458 this.tabPreviewDeleteRowsInfo.ResumeLayout(false); 676 459 this.tabPreviewDeleteRowsInfo.PerformLayout(); 677 this.tabPreviewReplaceMissingValues.ResumeLayout(false);678 this.tabPreviewReplaceMissingValues.PerformLayout();679 this.tabPreviewShuffle.ResumeLayout(false);680 this.tabPreviewShuffle.PerformLayout();681 this.panel1.ResumeLayout(false);682 this.panel1.PerformLayout();683 this.panel2.ResumeLayout(false);684 this.panel2.PerformLayout();685 460 this.ResumeLayout(false); 686 461 … … 697 472 private System.Windows.Forms.TabPage tabPreviewDeleteColumnsVariance; 698 473 private System.Windows.Forms.TabPage tabPreviewDeleteRowsInfo; 699 private System.Windows.Forms.TabPage tabPreviewShuffle;700 private System.Windows.Forms.Label lblPreviewShuffle;701 474 private System.Windows.Forms.TabPage tabPreviewInactive; 702 475 private System.Windows.Forms.Label lblPreviewColumnsInfo; … … 704 477 private System.Windows.Forms.Label lblPreviewColumnsVariance; 705 478 private System.Windows.Forms.Label lblPreviewRowsInfo; 706 private System.Windows.Forms.TabPage tabPreviewReplaceMissingValues;707 private System.Windows.Forms.Label lblPreviewReplaceMissingValues;708 479 private System.Windows.Forms.Label label9; 709 480 private System.Windows.Forms.TabControl tabsData; … … 721 492 private System.Windows.Forms.TextBox txtDeleteRowsInfo; 722 493 private System.Windows.Forms.Label label5; 723 private System.Windows.Forms.TabPage tabReplaceMissingValues;724 private System.Windows.Forms.TextBox txtReplaceValue;725 private System.Windows.Forms.ComboBox cmbReplaceWith;726 private System.Windows.Forms.Label lblValueColon;727 private System.Windows.Forms.Label label10;728 private System.Windows.Forms.TabPage tabDataShuffle;729 private System.Windows.Forms.Label lblShuffleProperties;730 private System.Windows.Forms.ComboBox cmbVariableNames;731 private System.Windows.Forms.Label label8;732 494 private System.Windows.Forms.Label lblPreviewInActive; 733 private System.Windows.Forms.CheckBox shuffleSeparatelyCheckbox;734 495 private System.Windows.Forms.Panel panel1; 735 496 private System.Windows.Forms.Panel panel2; -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/ManipulationView.cs ¶
r15242 r15535 21 21 22 22 using System; 23 using System.Collections.Generic;24 23 using System.Drawing; 25 24 using System.Globalization; … … 44 43 public ManipulationView() { 45 44 InitializeComponent(); 46 cmbReplaceWith.SelectedIndex = 0;47 45 tabsData.Appearance = TabAppearance.FlatButtons; 48 46 tabsData.ItemSize = new Size(0, 1); … … 56 54 () => ValidateDeleteColumnsVariance(), 57 55 () => ValidateDeleteRowsInfo(), 58 () => ValidateReplaceWith(),59 () => ValidateShuffle()60 56 }; 61 57 62 58 manipulations = new Action[] { 63 () => Content.ManipulationLogic.DeleteColumnsWithMissingValuesGreater(GetDeleteColumnsInfo()), 64 () => Content.ManipulationLogic.DeleteColumnsWithVarianceSmaller(GetDeleteColumnsVariance()), 65 () => Content.ManipulationLogic.DeleteRowsWithMissingValuesGreater(GetRowsColumnsInfo()), 66 () => ReplaceMissingValues(), 67 () => Content.ManipulationLogic.Shuffle(shuffleSeparatelyCheckbox.Checked) 59 () => Content.DeleteColumnsWithMissingValuesGreater(GetDeleteColumnsInfo()), 60 () => Content.DeleteColumnsWithVarianceSmaller(GetDeleteColumnsVariance()), 61 () => Content.DeleteRowsWithMissingValuesGreater(GetRowsColumnsInfo()), 68 62 }; 69 63 } … … 72 66 base.OnContentChanged(); 73 67 if (Content != null) { 74 cmbVariableNames.Items.Clear();75 foreach (var name in Content.ManipulationLogic.VariableNames) {76 cmbVariableNames.Items.Add(name);77 }78 cmbVariableNames.SelectedIndex = 0;79 68 CheckFilters(); 80 69 } … … 83 72 protected override void RegisterContentEvents() { 84 73 base.RegisterContentEvents(); 85 Content. FilterLogic.FilterChanged += FilterLogic_FilterChanged;74 Content.PreprocessingData.FilterChanged += FilterLogic_FilterChanged; 86 75 } 87 76 88 77 protected override void DeregisterContentEvents() { 89 Content. FilterLogic.FilterChanged -= FilterLogic_FilterChanged;78 Content.PreprocessingData.FilterChanged -= FilterLogic_FilterChanged; 90 79 base.DeregisterContentEvents(); 91 80 } … … 98 87 99 88 private void CheckFilters() { 100 if (Content. FilterLogic.IsFiltered) {89 if (Content.PreprocessingData.IsFiltered) { 101 90 tabsPreview.SelectedIndex = 0; 102 91 lstMethods.Enabled = false; … … 126 115 } 127 116 128 private void ReplaceMissingValues() {129 var allIndices = Content.SearchLogic.GetMissingValueIndices();130 var columnIndex = cmbVariableNames.SelectedIndex;131 var columnIndices = new Dictionary<int, IList<int>>{132 {columnIndex, allIndices[columnIndex]}133 };134 135 switch (cmbReplaceWith.SelectedIndex) {136 case 0: //Value137 Content.ManipulationLogic.ReplaceIndicesByValue(columnIndices, txtReplaceValue.Text);138 break;139 case 1: //Average140 Content.ManipulationLogic.ReplaceIndicesByAverageValue(columnIndices);141 break;142 case 2: //Median143 Content.ManipulationLogic.ReplaceIndicesByMedianValue(columnIndices);144 break;145 case 3: //Most Common146 Content.ManipulationLogic.ReplaceIndicesByMostCommonValue(columnIndices);147 break;148 case 4: //Random149 Content.ManipulationLogic.ReplaceIndicesByRandomValue(columnIndices);150 break;151 }152 }153 154 117 private void ValidateDeleteColumnsInfo() { 155 118 ValidateDoubleTextBox(txtDeleteColumnsInfo.Text); 156 119 if (btnApply.Enabled) { 157 var filteredColumns = Content. ManipulationLogic.ColumnsWithMissingValuesGreater(GetDeleteColumnsInfo());120 var filteredColumns = Content.ColumnsWithMissingValuesGreater(GetDeleteColumnsInfo()); 158 121 int count = filteredColumns.Count; 159 int columnCount = Content. FilterLogic.PreprocessingData.Columns;122 int columnCount = Content.PreprocessingData.Columns; 160 123 lblPreviewColumnsInfo.Text = string.Format("{0} column{1} of {2} ({3}) were detected with more than {4}% missing values.", count, (count > 1 || count == 0 ? "s" : ""), columnCount, string.Format("{0:F2}%", 100d / columnCount * count), txtDeleteColumnsInfo.Text); 161 124 … … 165 128 sb.Append(Environment.NewLine); 166 129 sb.Append("Columns: "); 167 sb.Append(Content. SearchLogic.VariableNames.ElementAt(filteredColumns.ElementAt(0)));130 sb.Append(Content.PreprocessingData.VariableNames.ElementAt(filteredColumns.ElementAt(0))); 168 131 for (int i = 1; i < filteredColumns.Count; i++) { 169 string columnName = Content. SearchLogic.VariableNames.ElementAt(filteredColumns.ElementAt(i));132 string columnName = Content.PreprocessingData.VariableNames.ElementAt(filteredColumns.ElementAt(i)); 170 133 sb.Append(", "); 171 134 sb.Append(columnName); … … 186 149 ValidateDoubleTextBox(txtDeleteColumnsVariance.Text); 187 150 if (btnApply.Enabled) { 188 var filteredColumns = Content. ManipulationLogic.ColumnsWithVarianceSmaller(GetDeleteColumnsVariance());151 var filteredColumns = Content.ColumnsWithVarianceSmaller(GetDeleteColumnsVariance()); 189 152 int count = filteredColumns.Count; 190 int columnCount = Content. FilterLogic.PreprocessingData.Columns;153 int columnCount = Content.PreprocessingData.Columns; 191 154 lblPreviewColumnsVariance.Text = string.Format("{0} column{1} of {2} ({3}) were detected with a variance smaller than {4}.", count, (count > 1 || count == 0 ? "s" : ""), columnCount, string.Format("{0:F2}%", 100d / columnCount * count), txtDeleteColumnsVariance.Text); 192 155 … … 196 159 sb.Append(Environment.NewLine); 197 160 sb.Append("Columns: "); 198 sb.Append(Content. SearchLogic.VariableNames.ElementAt(filteredColumns.ElementAt(0)));161 sb.Append(Content.PreprocessingData.VariableNames.ElementAt(filteredColumns.ElementAt(0))); 199 162 for (int i = 1; i < filteredColumns.Count; i++) { 200 string columnName = Content. SearchLogic.VariableNames.ElementAt(filteredColumns.ElementAt(i));163 string columnName = Content.PreprocessingData.VariableNames.ElementAt(filteredColumns.ElementAt(i)); 201 164 sb.Append(", "); 202 165 sb.Append(columnName); … … 217 180 ValidateDoubleTextBox(txtDeleteRowsInfo.Text); 218 181 if (btnApply.Enabled) { 219 int count = Content. ManipulationLogic.RowsWithMissingValuesGreater(GetRowsColumnsInfo()).Count;220 int rowCount = Content. FilterLogic.PreprocessingData.Rows;182 int count = Content.RowsWithMissingValuesGreater(GetRowsColumnsInfo()).Count; 183 int rowCount = Content.PreprocessingData.Rows; 221 184 lblPreviewRowsInfo.Text = count + " row" + (count > 1 || count == 0 ? "s" : "") + " of " + rowCount + " (" + string.Format("{0:F2}%", 100d / rowCount * count) + ") were detected with more than " + txtDeleteRowsInfo.Text + "% missing values."; 222 185 if (count > 0) { … … 228 191 lblPreviewRowsInfo.Text = "Preview not possible yet - please input the limit above."; 229 192 } 230 }231 232 private void ValidateReplaceWith() {233 btnApply.Enabled = false;234 string replaceWith = (string)cmbReplaceWith.SelectedItem;235 int columnIndex = cmbVariableNames.SelectedIndex;236 237 if (cmbReplaceWith.SelectedIndex == 0) {238 string errorMessage;239 string replaceValue = txtReplaceValue.Text;240 if (string.IsNullOrEmpty(replaceValue)) {241 lblPreviewReplaceMissingValues.Text = "Preview not possible yet - please input the text which will be used as replacement.";242 } else if (!Content.ManipulationLogic.PreProcessingData.Validate(txtReplaceValue.Text, out errorMessage, columnIndex)) {243 lblPreviewReplaceMissingValues.Text = "Preview not possible yet - " + errorMessage;244 } else {245 btnApply.Enabled = true;246 }247 replaceWith = "\"" + replaceValue + "\"";248 } else {249 btnApply.Enabled = true;250 }251 if (btnApply.Enabled) {252 var allIndices = Content.SearchLogic.GetMissingValueIndices();253 int count = allIndices[columnIndex].Count;254 int cellCount = Content.FilterLogic.PreprocessingData.Rows * Content.FilterLogic.PreprocessingData.Columns;255 lblPreviewReplaceMissingValues.Text = count + " cell" + (count > 1 || count == 0 ? "s" : "")256 + " of " + cellCount + " (" + string.Format("{0:F2}%", 100d / cellCount * count) + ") were detected with missing values which would be replaced with " + replaceWith;257 if (count > 0) {258 lblPreviewReplaceMissingValues.Text += Environment.NewLine + Environment.NewLine + "Please press the button \"Apply Manipulation\" if you wish to perform the replacement.";259 } else {260 btnApply.Enabled = false;261 }262 }263 }264 265 private void ValidateShuffle() {266 btnApply.Enabled = true;267 lblShuffleProperties.Enabled = false;268 lblShuffleProperties.Visible = false;269 shuffleSeparatelyCheckbox.Enabled = true;270 shuffleSeparatelyCheckbox.Visible = true;271 193 } 272 194 … … 295 217 lblPreviewRowsInfo.Text = "rows successfully deleted."; 296 218 break; 297 case 3:298 lblPreviewReplaceMissingValues.Text = "missing values successfully replaced.";299 btnApply.Enabled = false;300 break;301 case 4:302 lblPreviewShuffle.Text = "dataset shuffled successfully.";303 btnApply.Enabled = false;304 break;305 219 } 306 220 } … … 327 241 ValidateDeleteRowsInfo(); 328 242 } 329 330 private void cmbReplaceWith_SelectedIndexChanged(object sender, EventArgs e) {331 bool isReplaceWithValueSelected = cmbReplaceWith.SelectedIndex == 0;332 lblValueColon.Visible = isReplaceWithValueSelected;333 txtReplaceValue.Visible = isReplaceWithValueSelected;334 ValidateReplaceWith();335 }336 337 private void txtReplaceValue_TextChanged(object sender, EventArgs e) {338 ValidateReplaceWith();339 }340 243 } 341 244 } -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/StatisticsView.cs ¶
r15242 r15535 87 87 88 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();89 var data = Content.PreprocessingData; 90 rowsTextBox.Text = data.Rows.ToString(); 91 columnsTextBox.Text = data.Rows.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 96 97 97 var variableNames = Content.PreprocessingData.VariableNames.ToList(); … … 107 107 }; 108 108 109 for (int i = 0; i < logic.GetColumnCount(); i++) {110 var data= GetStatistics(i);111 for (int j = 0; j < data.Count; j++) {109 for (int i = 0; i < data.Columns; i++) { 110 var statistics = GetStatistics(i); 111 for (int j = 0; j < statistics.Count; j++) { 112 112 if (horizontal) 113 statisticsMatrix[j, i] = data[j];113 statisticsMatrix[j, i] = statistics[j]; 114 114 else 115 statisticsMatrix[i, j] = data[j];115 statisticsMatrix[i, j] = statistics[j]; 116 116 } 117 117 } … … 138 138 } 139 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 140 150 private List<string> GetStatistics(int varIdx) { 141 151 List<string> list; 142 var logic = Content.StatisticsLogic;143 if ( logic.VariableHasType<double>(varIdx)) {152 var data = Content.PreprocessingData; 153 if (data.VariableHasType<double>(varIdx)) { 144 154 list = GetDoubleColumns(varIdx); 145 } else if ( logic.VariableHasType<string>(varIdx)) {155 } else if (data.VariableHasType<string>(varIdx)) { 146 156 list = GetStringColumns(varIdx); 147 } else if ( logic.VariableHasType<DateTime>(varIdx)) {157 } else if (data.VariableHasType<DateTime>(varIdx)) { 148 158 list = GetDateTimeColumns(varIdx); 149 159 } else { … … 157 167 158 168 private List<string> GetDoubleColumns(int statIdx) { 159 var logic = Content.StatisticsLogic;169 var data = Content.PreprocessingData; 160 170 return new List<string> { 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()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() 173 183 }; 174 184 } 175 185 176 186 private List<string> GetStringColumns(int statIdx) { 177 var logic = Content.StatisticsLogic;187 var data = Content.PreprocessingData; 178 188 return new List<string> { 179 logic.GetColumnTypeAsString(statIdx),180 logic.GetMissingValueCount(statIdx).ToString(),181 "", // min182 "", // max183 "", // 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 184 194 "", //average 185 195 "", //standard deviation 186 196 "", //variance 187 "", // quarter percentile188 "", // three quarter percentile189 logic.GetMostCommonValue<string>(statIdx,string.Empty) ?? "",190 logic.GetDifferentValuesCount<string>(statIdx).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() 191 201 }; 192 202 } 193 203 194 204 private List<string> GetDateTimeColumns(int statIdx) { 195 var logic = Content.StatisticsLogic;205 var data = Content.PreprocessingData; 196 206 return new List<string> { 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()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() 209 219 }; 210 220 } -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/TransformationView.cs ¶
r15242 r15535 51 51 52 52 protected override void RegisterContentEvents() { 53 Content. FilterLogic.FilterChanged += FilterLogic_FilterChanged;53 Content.PreprocessingData.FilterChanged += FilterLogic_FilterChanged; 54 54 } 55 55 56 56 protected override void DeregisterContentEvents() { 57 Content. FilterLogic.FilterChanged -= FilterLogic_FilterChanged;57 Content.PreprocessingData.FilterChanged -= FilterLogic_FilterChanged; 58 58 } 59 59 … … 65 65 66 66 private void CheckFilters() { 67 if (Content. FilterLogic.IsFiltered) {67 if (Content.PreprocessingData.IsFiltered) { 68 68 applyButton.Enabled = false; 69 69 lblFilterNotice.Visible = true; … … 82 82 } 83 83 84 var transformator = new PreprocessingTransformator(Content. Data);84 var transformator = new PreprocessingTransformator(Content.PreprocessingData); 85 85 bool preserve = preserveColumnsCheckbox.CheckState == CheckState.Checked; 86 86 string errorMsg; -
TabularUnified stable/HeuristicLab.DataPreprocessing.Views/3.4/ViewShortcutListView.cs ¶
r15242 r15535 42 42 //Clone chart items 43 43 protected override void itemsListView_DoubleClick(object sender, EventArgs e) { 44 if (itemsListView.SelectedItems.Count == 1) { 45 IViewShortcut item = itemsListView.SelectedItems[0].Tag as IViewShortcut; 46 if (item != null) { 47 try { 48 item = (IViewShortcut)item.Clone(); 49 var view = MainFormManager.MainForm.ShowContent(item); 50 if (view != null) { 51 view.ReadOnly = ReadOnly; 52 view.Locked = Locked; 53 } 54 } catch (NullReferenceException) { 55 // cloning for preprocessing not done properly yet 56 } 44 if (itemsListView.SelectedItems.Count != 1) return; 45 IViewShortcut item = itemsListView.SelectedItems[0].Tag as IViewShortcut; 46 if (item == null) return; 47 try { 48 item = (IViewShortcut)item.Clone(); 49 var view = MainFormManager.MainForm.ShowContent(item); 50 if (view != null) { 51 view.ReadOnly = ReadOnly; 52 view.Locked = Locked; 57 53 } 54 } catch (NullReferenceException) { 55 // cloning for preprocessing not done properly yet 58 56 } 59 57 } -
stable/HeuristicLab.DataPreprocessing/3.4 ¶
- Property svn:mergeinfo changed
-
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/CorrelationMatrixContent.cs ¶
r15242 r15535 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 26 using HeuristicLab.Problems.DataAnalysis; 26 27 27 28 namespace HeuristicLab.DataPreprocessing { 28 29 [Item("Feature Correlation Matrix", "Represents the feature correlation matrix.")] 29 public class CorrelationMatrixContent : Item, IViewShortcut { 30 [StorableClass] 31 public class CorrelationMatrixContent : PreprocessingContent, IViewShortcut { 30 32 public static new Image StaticItemImage { 31 33 get { return HeuristicLab.Common.Resources.VSImageLibrary.Gradient; } 32 34 } 33 35 36 [Storable] 34 37 public PreprocessingContext Context { get; private set; } 35 public ITransactionalPreprocessingData PreprocessingData { 36 get { return Context.Data; } 37 } 38 38 39 39 40 public DataAnalysisProblemData ProblemData { … … 47 48 } 48 49 49 public CorrelationMatrixContent(PreprocessingContext context) { 50 #region Constructor, Cloning & Persistence 51 public CorrelationMatrixContent(PreprocessingContext context) 52 : base(context.Data) { 50 53 Context = context; 51 54 } … … 55 58 Context = original.Context; 56 59 } 57 58 60 public override IDeepCloneable Clone(Cloner cloner) { 59 61 return new CorrelationMatrixContent(this, cloner); 60 62 } 63 64 [StorableConstructor] 65 protected CorrelationMatrixContent(bool deserializing) 66 : base(deserializing) { } 67 #endregion 61 68 62 69 public event DataPreprocessingChangedEventHandler Changed { -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/DataCompletenessChartContent.cs ¶
r15242 r15535 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 26 26 27 namespace HeuristicLab.DataPreprocessing { 27 28 [Item("Data Completeness Chart", "Represents a datacompleteness chart.")] 28 29 public class DataCompletenessChartContent : Item, IViewShortcut {29 [StorableClass] 30 public class DataCompletenessChartContent : PreprocessingContent, IViewShortcut { 30 31 public static new Image StaticItemImage { 31 32 get { return HeuristicLab.Common.Resources.VSImageLibrary.EditBrightnessContrast; } 32 33 } 33 34 34 public SearchLogic SearchLogic { get; private set; } 35 36 public DataCompletenessChartContent(SearchLogic searchLogic) { 37 SearchLogic = searchLogic; 35 #region Constructor, Cloning & Persistence 36 public DataCompletenessChartContent(IFilteredPreprocessingData preprocessingData) 37 : base(preprocessingData) { 38 38 } 39 39 40 40 public DataCompletenessChartContent(DataCompletenessChartContent content, Cloner cloner) 41 41 : base(content, cloner) { 42 SearchLogic = content.SearchLogic;43 42 } 44 45 43 public override IDeepCloneable Clone(Cloner cloner) { 46 44 return new DataCompletenessChartContent(this, cloner); 47 45 } 46 47 [StorableConstructor] 48 protected DataCompletenessChartContent(bool deserializing) 49 : base(deserializing) { } 50 #endregion 48 51 } 49 52 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/DataGridContent.cs ¶
r15242 r15535 27 27 using HeuristicLab.Core; 28 28 using HeuristicLab.Data; 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 30 using HeuristicLab.Random; 29 31 30 32 namespace HeuristicLab.DataPreprocessing { 31 32 33 [Item("Data Grid", "Represents a data grid.")] 33 public class DataGridContent : Item, IStringConvertibleMatrix, IViewShortcut { 34 [StorableClass] 35 public class DataGridContent : PreprocessingContent, IStringConvertibleMatrix, IViewShortcut { 34 36 public static new Image StaticItemImage { 35 37 get { return HeuristicLab.Common.Resources.VSImageLibrary.Table; } 36 38 } 37 39 38 public ITransactionalPreprocessingData PreProcessingData { get; private set; }39 40 public ManipulationLogic ManipulationLogic { get; private set; }41 public FilterLogic FilterLogic { get; private set; }42 43 40 public int Rows { 44 get { return Pre ProcessingData.Rows; }41 get { return PreprocessingData.Rows; } 45 42 set { } 46 43 } 47 44 48 45 public int Columns { 49 get { return Pre ProcessingData.Columns; }46 get { return PreprocessingData.Columns; } 50 47 set { } 51 48 } 52 49 53 50 public IEnumerable<string> ColumnNames { 54 get { return Pre ProcessingData.VariableNames; }51 get { return PreprocessingData.VariableNames; } 55 52 set { } 56 53 } … … 71 68 72 69 public IDictionary<int, IList<int>> Selection { 73 get { return PreProcessingData.Selection; } 74 set { PreProcessingData.Selection = value; } 75 } 76 77 public DataGridContent(ITransactionalPreprocessingData preProcessingData, ManipulationLogic theManipulationLogic, FilterLogic theFilterLogic) { 78 ManipulationLogic = theManipulationLogic; 79 FilterLogic = theFilterLogic; 80 PreProcessingData = preProcessingData; 81 } 82 83 public DataGridContent(DataGridContent dataGridContent, Cloner cloner) 84 : base(dataGridContent, cloner) { 85 70 get { return PreprocessingData.Selection; } 71 set { PreprocessingData.Selection = value; } 72 } 73 74 #region Constructor, Cloning & Persistence 75 public DataGridContent(IFilteredPreprocessingData preprocessingData) 76 : base(preprocessingData) { 77 } 78 79 public DataGridContent(DataGridContent original, Cloner cloner) 80 : base(original, cloner) { 86 81 } 87 82 public override IDeepCloneable Clone(Cloner cloner) { … … 89 84 } 90 85 86 [StorableConstructor] 87 protected DataGridContent(bool deserializing) 88 : base(deserializing) { } 89 #endregion 90 91 91 public void DeleteRows(IEnumerable<int> rows) { 92 Pre ProcessingData.DeleteRowsWithIndices(rows);92 PreprocessingData.DeleteRowsWithIndices(rows); 93 93 } 94 94 95 95 public void DeleteColumn(int column) { 96 Pre ProcessingData.DeleteColumn(column);96 PreprocessingData.DeleteColumn(column); 97 97 } 98 98 99 99 public bool Validate(string value, out string errorMessage, int columnIndex) { 100 return Pre ProcessingData.Validate(value, out errorMessage, columnIndex);100 return PreprocessingData.Validate(value, out errorMessage, columnIndex); 101 101 } 102 102 103 103 public string GetValue(int rowIndex, int columnIndex) { 104 return Pre ProcessingData.GetCellAsString(columnIndex, rowIndex);104 return PreprocessingData.GetCellAsString(columnIndex, rowIndex); 105 105 } 106 106 107 107 public bool SetValue(string value, int rowIndex, int columnIndex) { 108 return Pre ProcessingData.SetValue(value, columnIndex, rowIndex);108 return PreprocessingData.SetValue(value, columnIndex, rowIndex); 109 109 } 110 110 111 111 public event DataPreprocessingChangedEventHandler Changed { 112 add { Pre ProcessingData.Changed += value; }113 remove { Pre ProcessingData.Changed -= value; }112 add { PreprocessingData.Changed += value; } 113 remove { PreprocessingData.Changed -= value; } 114 114 } 115 115 … … 132 132 #pragma warning restore 0067 133 133 #endregion 134 135 #region Manipulations 136 private void ReplaceIndicesByValue(IDictionary<int, IList<int>> cells, Func<int, double> doubleAggregator = null, 137 Func<int, DateTime> dateTimeAggregator = null, Func<int, string> stringAggregator = null) { 138 PreprocessingData.InTransaction(() => { 139 foreach (var column in cells) { 140 if (doubleAggregator != null && PreprocessingData.VariableHasType<double>(column.Key)) { 141 var value = doubleAggregator(column.Key); 142 foreach (int index in column.Value) 143 PreprocessingData.SetCell<double>(column.Key, index, value); 144 } else if (dateTimeAggregator != null && PreprocessingData.VariableHasType<DateTime>(column.Key)) { 145 var value = dateTimeAggregator(column.Key); 146 foreach (int index in column.Value) 147 PreprocessingData.SetCell<DateTime>(column.Key, index, value); 148 } else if (stringAggregator != null && PreprocessingData.VariableHasType<string>(column.Key)) { 149 var value = stringAggregator(column.Key); 150 foreach (int index in column.Value) 151 PreprocessingData.SetCell<string>(column.Key, index, value); 152 } 153 } 154 }); 155 } 156 157 private void ReplaceIndicesByValues(IDictionary<int, IList<int>> cells, Func<int, IEnumerable<double>> doubleAggregator = null, 158 Func<int, IEnumerable<DateTime>> dateTimeAggregator = null, Func<int, IEnumerable<string>> stringAggregator = null) { 159 PreprocessingData.InTransaction(() => { 160 foreach (var column in cells) { 161 if (doubleAggregator != null && PreprocessingData.VariableHasType<double>(column.Key)) { 162 var values = doubleAggregator(column.Key); 163 foreach (var pair in column.Value.Zip(values, (row, value) => new { row, value })) 164 PreprocessingData.SetCell<double>(column.Key, pair.row, pair.value); 165 } else if (dateTimeAggregator != null && PreprocessingData.VariableHasType<DateTime>(column.Key)) { 166 var values = dateTimeAggregator(column.Key); 167 foreach (var pair in column.Value.Zip(values, (row, value) => new { row, value })) 168 PreprocessingData.SetCell<DateTime>(column.Key, pair.row, pair.value); 169 } else if (stringAggregator != null && PreprocessingData.VariableHasType<string>(column.Key)) { 170 var values = stringAggregator(column.Key); 171 foreach (var pair in column.Value.Zip(values, (row, value) => new { row, value })) 172 PreprocessingData.SetCell<string>(column.Key, pair.row, pair.value); 173 } 174 } 175 }); 176 } 177 178 public void ReplaceIndicesByMean(IDictionary<int, IList<int>> cells, bool considerSelection = false) { 179 ReplaceIndicesByValue(cells, 180 col => PreprocessingData.GetMean<double>(col, considerSelection), 181 col => PreprocessingData.GetMean<DateTime>(col, considerSelection)); 182 } 183 184 public void ReplaceIndicesByMedianValue(IDictionary<int, IList<int>> cells, bool considerSelection = false) { 185 ReplaceIndicesByValue(cells, 186 col => PreprocessingData.GetMedian<double>(col, considerSelection), 187 col => PreprocessingData.GetMedian<DateTime>(col, considerSelection)); 188 } 189 190 public void ReplaceIndicesByMode(IDictionary<int, IList<int>> cells, bool considerSelection = false) { 191 ReplaceIndicesByValue(cells, 192 col => PreprocessingData.GetMode<double>(col, considerSelection), 193 col => PreprocessingData.GetMode<DateTime>(col, considerSelection), 194 col => PreprocessingData.GetMode<string>(col, considerSelection)); 195 } 196 197 public void ReplaceIndicesByRandomValue(IDictionary<int, IList<int>> cells, bool considerSelection = false) { 198 var rand = new FastRandom(); 199 ReplaceIndicesByValues(cells, 200 col => { 201 double min = PreprocessingData.GetMin<double>(col, considerSelection); 202 double max = PreprocessingData.GetMax<double>(col, considerSelection); 203 double range = max - min; 204 return cells[col].Select(_ => rand.NextDouble() * range + min); 205 }, 206 col => { 207 var min = PreprocessingData.GetMin<DateTime>(col, considerSelection); 208 var max = PreprocessingData.GetMax<DateTime>(col, considerSelection); 209 double range = (max - min).TotalSeconds; 210 return cells[col].Select(_ => min + TimeSpan.FromSeconds(rand.NextDouble() * range)); 211 }); 212 } 213 214 public void ReplaceIndicesByString(IDictionary<int, IList<int>> cells, string value) { 215 PreprocessingData.InTransaction(() => { 216 foreach (var column in cells) { 217 foreach (var rowIdx in column.Value) { 218 PreprocessingData.SetValue(value, column.Key, rowIdx); 219 } 220 } 221 }); 222 } 223 224 225 public void ReplaceIndicesByLinearInterpolationOfNeighbours(IDictionary<int, IList<int>> cells) { 226 PreprocessingData.InTransaction(() => { 227 foreach (var column in cells) { 228 IList<Tuple<int, int>> startEndings = GetStartAndEndingsForInterpolation(column); 229 foreach (var tuple in startEndings) { 230 Interpolate(column, tuple.Item1, tuple.Item2); 231 } 232 } 233 }); 234 } 235 236 private List<Tuple<int, int>> GetStartAndEndingsForInterpolation(KeyValuePair<int, IList<int>> column) { 237 var startEndings = new List<Tuple<int, int>>(); 238 var rowIndices = column.Value.OrderBy(x => x).ToList(); 239 var count = rowIndices.Count; 240 int start = int.MinValue; 241 for (int i = 0; i < count; ++i) { 242 if (start == int.MinValue) { 243 start = IndexOfPrevPresentValue(column.Key, rowIndices[i]); 244 } 245 if (i + 1 == count || (i + 1 < count && rowIndices[i + 1] - rowIndices[i] > 1)) { 246 int next = IndexOfNextPresentValue(column.Key, rowIndices[i]); 247 if (start > 0 && next < PreprocessingData.Rows) { 248 startEndings.Add(new Tuple<int, int>(start, next)); 249 } 250 start = int.MinValue; 251 } 252 } 253 return startEndings; 254 } 255 256 private void Interpolate(KeyValuePair<int, IList<int>> column, int prevIndex, int nextIndex) { 257 int valuesToInterpolate = nextIndex - prevIndex; 258 259 if (PreprocessingData.VariableHasType<double>(column.Key)) { 260 double prev = PreprocessingData.GetCell<double>(column.Key, prevIndex); 261 double next = PreprocessingData.GetCell<double>(column.Key, nextIndex); 262 double interpolationStep = (next - prev) / valuesToInterpolate; 263 264 for (int i = prevIndex; i < nextIndex; ++i) { 265 double interpolated = prev + (interpolationStep * (i - prevIndex)); 266 PreprocessingData.SetCell<double>(column.Key, i, interpolated); 267 } 268 } else if (PreprocessingData.VariableHasType<DateTime>(column.Key)) { 269 DateTime prev = PreprocessingData.GetCell<DateTime>(column.Key, prevIndex); 270 DateTime next = PreprocessingData.GetCell<DateTime>(column.Key, nextIndex); 271 double interpolationStep = (next - prev).TotalSeconds / valuesToInterpolate; 272 273 for (int i = prevIndex; i < nextIndex; ++i) { 274 DateTime interpolated = prev.AddSeconds(interpolationStep * (i - prevIndex)); 275 PreprocessingData.SetCell<DateTime>(column.Key, i, interpolated); 276 } 277 } 278 } 279 280 private int IndexOfPrevPresentValue(int columnIndex, int start) { 281 int offset = start - 1; 282 while (offset >= 0 && PreprocessingData.IsCellEmpty(columnIndex, offset)) { 283 offset--; 284 } 285 286 return offset; 287 } 288 289 private int IndexOfNextPresentValue(int columnIndex, int start) { 290 int offset = start + 1; 291 while (offset < PreprocessingData.Rows && PreprocessingData.IsCellEmpty(columnIndex, offset)) { 292 offset++; 293 } 294 295 return offset; 296 } 297 298 public void Shuffle(bool shuffleRangesSeparately) { 299 var random = new FastRandom(); 300 301 if (shuffleRangesSeparately) { 302 var ranges = new[] { PreprocessingData.TestPartition, PreprocessingData.TrainingPartition }; 303 PreprocessingData.InTransaction(() => { 304 // process all given ranges - e.g. TrainingPartition, TestPartition 305 foreach (IntRange range in ranges) { 306 var indices = Enumerable.Range(0, PreprocessingData.Rows).ToArray(); 307 var shuffledIndices = Enumerable.Range(range.Start, range.Size).Shuffle(random).ToArray(); 308 for (int i = range.Start, j = 0; i < range.End; i++, j++) 309 indices[i] = shuffledIndices[j]; 310 311 ReOrderToIndices(indices); 312 } 313 }); 314 315 } else { 316 PreprocessingData.InTransaction(() => { 317 var indices = Enumerable.Range(0, PreprocessingData.Rows).ToArray(); 318 indices.ShuffleInPlace(random); 319 ReOrderToIndices(indices); 320 }); 321 } 322 } 323 324 public void ReOrderToIndices(int[] indices) { 325 PreprocessingData.InTransaction(() => { 326 for (int i = 0; i < PreprocessingData.Columns; ++i) { 327 if (PreprocessingData.VariableHasType<double>(i)) 328 ReOrderToIndices<double>(i, indices); 329 else if (PreprocessingData.VariableHasType<string>(i)) 330 ReOrderToIndices<string>(i, indices); 331 else if (PreprocessingData.VariableHasType<DateTime>(i)) 332 ReOrderToIndices<DateTime>(i, indices); 333 } 334 }); 335 } 336 337 private void ReOrderToIndices<T>(int columnIndex, int[] indices) { 338 var originalData = new List<T>(PreprocessingData.GetValues<T>(columnIndex)); 339 if (indices.Length != originalData.Count) throw new InvalidOperationException("The number of provided indices does not match the values."); 340 341 for (int i = 0; i < indices.Length; i++) { 342 T newValue = originalData[indices[i]]; 343 PreprocessingData.SetCell<T>(columnIndex, i, newValue); 344 } 345 } 346 #endregion 134 347 } 135 348 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/FilterContent.cs ¶
r15242 r15535 20 20 #endregion 21 21 22 using System.Collections.Generic; 22 23 using System.Drawing; 24 using System.Linq; 23 25 using HeuristicLab.Common; 24 26 using HeuristicLab.Core; 25 27 using HeuristicLab.DataPreprocessing.Filter; 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 26 29 27 30 namespace HeuristicLab.DataPreprocessing { 28 31 [Item("Filter", "Represents the filter grid.")] 29 public class FilterContent : Item, IViewShortcut { 32 [StorableClass] 33 public class FilterContent : PreprocessingContent, IViewShortcut { 30 34 public static new Image StaticItemImage { 31 35 get { return HeuristicLab.Common.Resources.VSImageLibrary.Filter; } 32 36 } 33 34 public FilterLogic FilterLogic { get; private set; } 35 37 [Storable] 36 38 public ICheckedItemCollection<IFilter> Filters { get; private set; } 37 39 40 [Storable] 38 41 public bool IsAndCombination { get; set; } 39 42 40 public FilterContent(FilterLogic filterLogic) { 43 public IEnumerable<IFilter> ActiveFilters { 44 get { return Filters.Where(f => f.Active && f.ConstraintData != null); } 45 } 46 47 public bool[] GetRemainingRows() { 48 var remainingRows = new bool[PreprocessingData.Rows]; 49 if (ActiveFilters.Any()) { 50 var filterResults = ActiveFilters.Select(f => f.Check()).ToList(); 51 var rowFilterResults = new bool[filterResults.Count]; 52 for (int row = 0; row < remainingRows.Length; row++) { 53 for (int i = 0; i < filterResults.Count; i++) 54 rowFilterResults[i] = filterResults[i][row]; 55 56 remainingRows[row] = IsAndCombination 57 ? rowFilterResults.All(x => x) 58 : rowFilterResults.Any(x => x); 59 } 60 } else { 61 // if not filters active => all rows are remaining 62 for (int i = 0; i < remainingRows.Length; i++) 63 remainingRows[i] = true; 64 } 65 return remainingRows; 66 } 67 68 #region Constructor, Cloning & Persistence 69 public FilterContent(IFilteredPreprocessingData preprocessingData) 70 : base(preprocessingData) { 41 71 Filters = new CheckedItemCollection<IFilter>(); 42 72 IsAndCombination = true; 43 FilterLogic = filterLogic;44 73 } 45 74 46 protected FilterContent(FilterContent content, Cloner cloner) 47 : base(content, cloner) { 75 protected FilterContent(FilterContent original, Cloner cloner) 76 : base(original, cloner) { 77 Filters = cloner.Clone(original.Filters); 78 IsAndCombination = original.IsAndCombination; 48 79 } 49 50 80 public override IDeepCloneable Clone(Cloner cloner) { 51 81 return new FilterContent(this, cloner); 52 82 } 83 84 [StorableConstructor] 85 protected FilterContent(bool deserializing) 86 : base(deserializing) { } 87 #endregion 53 88 } 54 89 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/HistogramContent.cs ¶
r15242 r15535 26 26 using HeuristicLab.Common; 27 27 using HeuristicLab.Core; 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 29 29 30 namespace HeuristicLab.DataPreprocessing { 30 31 [Item("Histogram", "Represents the histogram grid.")] 32 [StorableClass] 31 33 public class HistogramContent : PreprocessingChartContent { 32 34 public static new Image StaticItemImage { … … 34 36 } 35 37 38 [Storable] 36 39 public string GroupingVariableName { get; set; } 37 40 41 [Storable] 38 42 public int Bins { get; set; } 43 [Storable] 39 44 public bool ExactBins { get; set; } 40 45 46 [Storable] 41 47 public LegendOrder Order { get; set; } 42 48 49 #region Constructor, Cloning & Persistence 43 50 public HistogramContent(IFilteredPreprocessingData preprocessingData) 44 51 : base(preprocessingData) { … … 47 54 } 48 55 49 public HistogramContent(HistogramContent content, Cloner cloner) 50 : base(content, cloner) { 56 public HistogramContent(HistogramContent original, Cloner cloner) 57 : base(original, cloner) { 58 GroupingVariableName = original.GroupingVariableName; 59 Bins = original.Bins; 60 ExactBins = original.ExactBins; 61 Order = original.Order; 51 62 } 52 63 public override IDeepCloneable Clone(Cloner cloner) { 53 64 return new HistogramContent(this, cloner); 54 65 } 66 67 [StorableConstructor] 68 protected HistogramContent(bool deserializing) 69 : base(deserializing) { } 70 #endregion 55 71 56 72 public static DataTable CreateHistogram(IFilteredPreprocessingData preprocessingData, string variableName, string groupingVariableName, DataTableVisualProperties.DataTableHistogramAggregation aggregation, LegendOrder legendOrder = LegendOrder.Alphabetically) { -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/LineChartContent.cs ¶
r15242 r15535 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 26 26 27 namespace HeuristicLab.DataPreprocessing { 27 28 28 [Item("Line Chart", "Represents the line chart grid.")] 29 [StorableClass] 29 30 public class LineChartContent : PreprocessingChartContent { 30 public bool AllInOneMode { get; set; }31 32 31 public static new Image StaticItemImage { 33 32 get { return HeuristicLab.Common.Resources.VSImageLibrary.Performance; } 34 33 } 35 34 35 [Storable] 36 public bool AllInOneMode { get; set; } 37 38 39 #region Constructor, Cloning & Persistence 36 40 public LineChartContent(IFilteredPreprocessingData preprocessingData) 37 41 : base(preprocessingData) { … … 39 43 } 40 44 41 public LineChartContent(LineChartContent content, Cloner cloner)42 : base( content, cloner) {43 this.AllInOneMode = content.AllInOneMode;45 public LineChartContent(LineChartContent original, Cloner cloner) 46 : base(original, cloner) { 47 AllInOneMode = original.AllInOneMode; 44 48 } 45 49 public override IDeepCloneable Clone(Cloner cloner) { 46 50 return new LineChartContent(this, cloner); 47 51 } 52 53 [StorableConstructor] 54 protected LineChartContent(bool deserializing) 55 : base(deserializing) { } 56 #endregion 48 57 } 49 58 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/ManipulationContent.cs ¶
r15242 r15535 20 20 #endregion 21 21 22 using System; 23 using System.Collections.Generic; 22 24 using System.Drawing; 25 using System.Linq; 23 26 using HeuristicLab.Common; 24 27 using HeuristicLab.Core; 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 29 26 30 namespace HeuristicLab.DataPreprocessing { 27 28 31 [Item("Manipulation", "Represents the available manipulations on a data set.")] 29 public class ManipulationContent : Item, IViewShortcut { 32 [StorableClass] 33 public class ManipulationContent : PreprocessingContent, IViewShortcut { 30 34 public static new Image StaticItemImage { 31 35 get { return HeuristicLab.Common.Resources.VSImageLibrary.Method; } 32 36 } 33 37 34 public ManipulationLogic ManipulationLogic { get; private set; } 35 public SearchLogic SearchLogic { get; private set; } 36 public FilterLogic FilterLogic { get; private set; } 37 38 public ManipulationContent(ManipulationLogic manipulationLogic, SearchLogic searchLogic, FilterLogic filterLogic) { 39 ManipulationLogic = manipulationLogic; 40 SearchLogic = searchLogic; 41 FilterLogic = filterLogic; 38 #region Constructor, Cloning & Persistence 39 public ManipulationContent(IFilteredPreprocessingData preprocessingData) 40 : base(preprocessingData) { 42 41 } 43 42 44 public ManipulationContent(ManipulationContent content, Cloner cloner) : base(content, cloner) { } 45 43 public ManipulationContent(ManipulationContent original, Cloner cloner) : 44 base(original, cloner) { 45 } 46 46 public override IDeepCloneable Clone(Cloner cloner) { 47 47 return new ManipulationContent(this, cloner); 48 48 } 49 50 [StorableConstructor] 51 protected ManipulationContent(bool deserializing) 52 : base(deserializing) { } 53 #endregion 54 55 public List<int> RowsWithMissingValuesGreater(double percent) { 56 List<int> rows = new List<int>(); 57 58 for (int i = 0; i < PreprocessingData.Rows; ++i) { 59 int missingCount = PreprocessingData.GetRowMissingValueCount(i); 60 if (100f / PreprocessingData.Columns * missingCount > percent) { 61 rows.Add(i); 62 } 63 } 64 65 return rows; 66 } 67 68 public List<int> ColumnsWithMissingValuesGreater(double percent) { 69 List<int> columns = new List<int>(); 70 for (int i = 0; i < PreprocessingData.Columns; ++i) { 71 int missingCount = PreprocessingData.GetMissingValueCount(i); 72 if (100f / PreprocessingData.Rows * missingCount > percent) { 73 columns.Add(i); 74 } 75 } 76 77 return columns; 78 } 79 80 public List<int> ColumnsWithVarianceSmaller(double variance) { 81 List<int> columns = new List<int>(); 82 for (int i = 0; i < PreprocessingData.Columns; ++i) { 83 if (PreprocessingData.VariableHasType<double>(i)) { 84 double columnVariance = PreprocessingData.GetVariance<double>(i); 85 if (columnVariance < variance) { 86 columns.Add(i); 87 } 88 } else if (PreprocessingData.VariableHasType<DateTime>(i)) { 89 double columnVariance = (double)PreprocessingData.GetVariance<DateTime>(i).Ticks / TimeSpan.TicksPerSecond; 90 if (columnVariance < variance) { 91 columns.Add(i); 92 } 93 } 94 } 95 return columns; 96 } 97 98 public void DeleteRowsWithMissingValuesGreater(double percent) { 99 DeleteRows(RowsWithMissingValuesGreater(percent)); 100 } 101 102 public void DeleteColumnsWithMissingValuesGreater(double percent) { 103 DeleteColumns(ColumnsWithMissingValuesGreater(percent)); 104 } 105 106 public void DeleteColumnsWithVarianceSmaller(double variance) { 107 DeleteColumns(ColumnsWithVarianceSmaller(variance)); 108 } 109 110 private void DeleteRows(List<int> rows) { 111 PreprocessingData.InTransaction(() => { 112 foreach (int row in rows.OrderByDescending(x => x)) { 113 PreprocessingData.DeleteRow(row); 114 } 115 }); 116 } 117 118 private void DeleteColumns(List<int> columns) { 119 PreprocessingData.InTransaction(() => { 120 foreach (int column in columns.OrderByDescending(x => x)) { 121 PreprocessingData.DeleteColumn(column); 122 } 123 }); 124 } 49 125 } 50 126 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/MultiScatterPlotContent.cs ¶
r15242 r15535 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 26 26 27 namespace HeuristicLab.DataPreprocessing { 27 28 28 [Item("Multi Scatter Plot", "Represents a multi scatter plot.")] 29 [StorableClass] 29 30 public class MultiScatterPlotContent : ScatterPlotContent { 30 31 public static new Image StaticItemImage { … … 32 33 } 33 34 35 #region Constructor, Cloning & Persistence 34 36 public MultiScatterPlotContent(IFilteredPreprocessingData preprocessingData) 35 37 : base(preprocessingData) { 36 38 } 37 39 38 public MultiScatterPlotContent(MultiScatterPlotContent content, Cloner cloner)39 : base( content, cloner) {40 public MultiScatterPlotContent(MultiScatterPlotContent original, Cloner cloner) 41 : base(original, cloner) { 40 42 } 41 42 43 public override IDeepCloneable Clone(Cloner cloner) { 43 44 return new MultiScatterPlotContent(this, cloner); 44 45 } 46 47 [StorableConstructor] 48 protected MultiScatterPlotContent(bool deserializing) 49 : base(deserializing) { } 50 #endregion 45 51 } 46 52 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/PreprocessingChartContent.cs ¶
r15242 r15535 29 29 using HeuristicLab.Core; 30 30 using HeuristicLab.Data; 31 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 31 32 32 33 namespace HeuristicLab.DataPreprocessing { 33 34 [Item("PreprocessingChart", "Represents a preprocessing chart.")] 34 public class PreprocessingChartContent : Item, IViewShortcut { 35 [StorableClass] 36 public class PreprocessingChartContent : PreprocessingContent, IViewShortcut { 35 37 public enum LegendOrder { 36 38 Alphabetically, … … 42 44 } 43 45 44 private ICheckedItemList<StringValue> variableItemList = null; 46 [Storable] 47 private ICheckedItemList<StringValue> variableItemList; 45 48 public ICheckedItemList<StringValue> VariableItemList { 46 49 get { 47 50 if (variableItemList == null) 48 51 variableItemList = CreateVariableItemList(PreprocessingData); 49 return this.variableItemList;52 return variableItemList; 50 53 } 51 54 } 52 55 53 public IFilteredPreprocessingData PreprocessingData { get; private set; }54 56 public event DataPreprocessingChangedEventHandler Changed { 55 57 add { PreprocessingData.Changed += value; } … … 57 59 } 58 60 59 public PreprocessingChartContent(IFilteredPreprocessingData preprocessingData) { 60 PreprocessingData = preprocessingData; 61 #region Constructor, Cloning & Persistence 62 public PreprocessingChartContent(IFilteredPreprocessingData preprocessingData) 63 : base(preprocessingData) { 61 64 } 62 65 63 public PreprocessingChartContent(PreprocessingChartContent content, Cloner cloner) 64 : base(content, cloner) { 65 this.PreprocessingData = content.PreprocessingData; 66 this.variableItemList = cloner.Clone<ICheckedItemList<StringValue>>(variableItemList); 66 public PreprocessingChartContent(PreprocessingChartContent original, Cloner cloner) 67 : base(original, cloner) { 68 variableItemList = cloner.Clone(original.variableItemList); 67 69 } 68 70 public override IDeepCloneable Clone(Cloner cloner) { 69 71 return new PreprocessingChartContent(this, cloner); 70 72 } 73 74 [StorableConstructor] 75 protected PreprocessingChartContent(bool deserializing) 76 : base(deserializing) { } 77 #endregion 71 78 72 79 public DataRow CreateDataRow(string variableName, DataRowVisualProperties.DataRowChartType chartType) { … … 75 82 76 83 public static DataRow CreateDataRow(IFilteredPreprocessingData preprocessingData, string variableName, DataRowVisualProperties.DataRowChartType chartType) { 77 IList<double> values = preprocessingData.GetValues<double>(preprocessingData.GetColumnIndex(variableName)); 78 DataRow row = new DataRow(variableName, "", values); 79 row.VisualProperties.ChartType = chartType; 84 var values = preprocessingData.GetValues<double>(preprocessingData.GetColumnIndex(variableName)); 85 var row = new DataRow(variableName, "", values) { 86 VisualProperties = { 87 ChartType = chartType, 88 StartIndexZero = true 89 } 90 }; 80 91 return row; 81 92 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/ScatterPlotContent.cs ¶
r15242 r15535 25 25 using HeuristicLab.Analysis; 26 26 using HeuristicLab.Common; 27 using HeuristicLab.Core; 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 29 using HeuristicLab.Visualization.ChartControlsExtensions; 28 30 29 31 namespace HeuristicLab.DataPreprocessing { 30 32 [Item("ScatterPlotContent", "")] 33 [StorableClass] 31 34 public abstract class ScatterPlotContent : PreprocessingChartContent { 35 [Storable] 32 36 public string GroupingVariable { get; set; } 33 37 38 #region Constructor, Cloning & Persistence 34 39 protected ScatterPlotContent(IFilteredPreprocessingData preprocessingData) 35 40 : base(preprocessingData) { 36 41 } 37 42 38 protected ScatterPlotContent(ScatterPlotContent content, Cloner cloner) 39 : base(content, cloner) { 43 protected ScatterPlotContent(ScatterPlotContent original, Cloner cloner) 44 : base(original, cloner) { 45 GroupingVariable = original.GroupingVariable; 40 46 } 47 48 [StorableConstructor] 49 protected ScatterPlotContent(bool deserializing) 50 : base(deserializing) { } 51 #endregion 41 52 42 53 public static ScatterPlot CreateScatterPlot(IFilteredPreprocessingData preprocessingData, string variableNameX, string variableNameY, string variableNameGroup = "-", LegendOrder legendOrder = LegendOrder.Alphabetically) { -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/SingleScatterPlotContent.cs ¶
r15242 r15535 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 26 26 27 namespace HeuristicLab.DataPreprocessing { 27 28 28 [Item("Scatter Plot", "Represents a scatter plot.")] 29 [StorableClass] 29 30 public class SingleScatterPlotContent : ScatterPlotContent { 30 31 public static new Image StaticItemImage { … … 32 33 } 33 34 35 [Storable] 34 36 public string SelectedXVariable { get; set; } 37 [Storable] 35 38 public string SelectedYVariable { get; set; } 36 39 40 #region Constructor, Cloning & Persistence 37 41 public SingleScatterPlotContent(IFilteredPreprocessingData preprocessingData) 38 42 : base(preprocessingData) { 39 43 } 40 44 41 public SingleScatterPlotContent(SingleScatterPlotContent content, Cloner cloner) 42 : base(content, cloner) { 43 this.SelectedXVariable = content.SelectedXVariable; 44 this.SelectedYVariable = content.SelectedYVariable; 45 this.GroupingVariable = content.GroupingVariable; 45 public SingleScatterPlotContent(SingleScatterPlotContent original, Cloner cloner) 46 : base(original, cloner) { 47 SelectedXVariable = original.SelectedXVariable; 48 SelectedYVariable = original.SelectedYVariable; 46 49 } 47 48 50 public override IDeepCloneable Clone(Cloner cloner) { 49 51 return new SingleScatterPlotContent(this, cloner); 50 52 } 53 54 [StorableConstructor] 55 protected SingleScatterPlotContent(bool deserializing) 56 : base(deserializing) { } 57 #endregion 51 58 } 52 59 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/StatisticsContent.cs ¶
r15242 r15535 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 26 26 27 namespace HeuristicLab.DataPreprocessing { 27 28 [Item("Statistics", "Represents the statistics grid.")] 28 public class StatisticsContent : Item, IViewShortcut { 29 [StorableClass] 30 public class StatisticsContent : PreprocessingContent, IViewShortcut { 29 31 public static new Image StaticItemImage { 30 32 get { return HeuristicLab.Common.Resources.VSImageLibrary.Object; } 31 33 } 32 34 33 public ITransactionalPreprocessingData PreprocessingData { get; private set; } 34 public StatisticsLogic StatisticsLogic { get; private set; } 35 36 public StatisticsContent(ITransactionalPreprocessingData preProcessingData, StatisticsLogic statisticsLogic) { 37 PreprocessingData = preProcessingData; 38 StatisticsLogic = statisticsLogic; 35 #region Constructor, Cloning & Persistence 36 public StatisticsContent(IFilteredPreprocessingData preprocessingData) 37 : base(preprocessingData) { 39 38 } 40 39 41 public StatisticsContent(StatisticsContent content, Cloner cloner)42 : base( content, cloner) {40 public StatisticsContent(StatisticsContent original, Cloner cloner) 41 : base(original, cloner) { 43 42 } 44 45 43 public override IDeepCloneable Clone(Cloner cloner) { 46 44 return new StatisticsContent(this, cloner); 47 45 } 48 46 47 [StorableConstructor] 48 protected StatisticsContent(bool deserializing) 49 : base(deserializing) { } 50 #endregion 51 49 52 public event DataPreprocessingChangedEventHandler Changed { 50 add { StatisticsLogic.Changed += value; }51 remove { StatisticsLogic.Changed -= value; }53 add { PreprocessingData.Changed += value; } 54 remove { PreprocessingData.Changed -= value; } 52 55 } 53 56 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Content/TransformationContent.cs ¶
r15242 r15535 23 23 using HeuristicLab.Common; 24 24 using HeuristicLab.Core; 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 26 using HeuristicLab.Problems.DataAnalysis; 26 27 27 28 namespace HeuristicLab.DataPreprocessing { 28 29 [Item("Transformation", "Represents the transformation grid.")] 29 public class TransformationContent : Item, IViewShortcut { 30 [StorableClass] 31 public class TransformationContent : PreprocessingContent, IViewShortcut { 30 32 public static new Image StaticItemImage { 31 33 get { return HeuristicLab.Common.Resources.VSImageLibrary.Method; } 32 34 } 33 35 34 public IPreprocessingData Data { get; private set; } 35 public FilterLogic FilterLogic { get; private set; } 36 36 [Storable] 37 37 public ICheckedItemList<ITransformation> CheckedTransformationList { get; private set; } 38 38 39 public TransformationContent(IPreprocessingData data, FilterLogic filterLogic) { 40 Data = data; 39 #region Constructor, Cloning & Persistence 40 public TransformationContent(IFilteredPreprocessingData preprocessingData) 41 : base(preprocessingData) { 41 42 CheckedTransformationList = new CheckedItemList<ITransformation>(); 42 FilterLogic = filterLogic;43 43 } 44 44 45 45 public TransformationContent(TransformationContent original, Cloner cloner) 46 46 : base(original, cloner) { 47 Data = original.Data; 48 CheckedTransformationList = new CheckedItemList<ITransformation>(original.CheckedTransformationList); 47 CheckedTransformationList = cloner.Clone(original.CheckedTransformationList); 49 48 } 50 51 49 public override IDeepCloneable Clone(Cloner cloner) { 52 50 return new TransformationContent(this, cloner); 53 51 } 52 53 [StorableConstructor] 54 protected TransformationContent(bool deserializing) 55 : base(deserializing) { } 56 #endregion 54 57 } 55 58 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Data/FilteredPreprocessingData.cs ¶
r15242 r15535 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Linq; 24 25 using HeuristicLab.Common; 25 26 using HeuristicLab.Core; 26 27 using HeuristicLab.Data; 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 29 using HeuristicLab.Problems.DataAnalysis; 28 30 29 31 namespace HeuristicLab.DataPreprocessing { 30 public class FilteredPreprocessingData : NamedItem, IFilteredPreprocessingData { 31 private readonly ITransactionalPreprocessingData originalData; 32 private ITransactionalPreprocessingData filteredData; 33 32 [Item("FilteredPreprocessingData", "Represents filtered data used for preprocessing.")] 33 [StorableClass] 34 public sealed class FilteredPreprocessingData : NamedItem, IFilteredPreprocessingData { 35 36 [Storable] 37 private readonly IPreprocessingData originalData; 38 [Storable] 39 private IPreprocessingData filteredData; 40 41 public IPreprocessingData ActiveData { 42 get { return IsFiltered ? filteredData : originalData; } 43 } 44 45 #region Constructor, Cloning & Persistence 46 public FilteredPreprocessingData(IPreprocessingData preprocessingData) 47 : base() { 48 originalData = preprocessingData; 49 filteredData = null; 50 } 51 52 private FilteredPreprocessingData(FilteredPreprocessingData original, Cloner cloner) 53 : base(original, cloner) { 54 originalData = original.originalData; 55 filteredData = original.filteredData; 56 } 57 public override IDeepCloneable Clone(Cloner cloner) { 58 return new FilteredPreprocessingData(this, cloner); 59 } 60 61 [StorableConstructor] 62 private FilteredPreprocessingData(bool deserializing) 63 : base(deserializing) { } 64 #endregion 65 66 #region Cells 67 public bool IsCellEmpty(int columnIndex, int rowIndex) { 68 return ActiveData.IsCellEmpty(columnIndex, rowIndex); 69 } 70 71 public T GetCell<T>(int columnIndex, int rowIndex) { 72 return ActiveData.GetCell<T>(columnIndex, rowIndex); 73 } 74 75 public void SetCell<T>(int columnIndex, int rowIndex, T value) { 76 if (IsFiltered) 77 throw new InvalidOperationException("SetValues not possible while data is filtered"); 78 originalData.SetCell<T>(columnIndex, rowIndex, value); 79 } 80 81 public string GetCellAsString(int columnIndex, int rowIndex) { 82 return ActiveData.GetCellAsString(columnIndex, rowIndex); 83 } 84 85 public IList<T> GetValues<T>(int columnIndex, bool considerSelection) { 86 return ActiveData.GetValues<T>(columnIndex, considerSelection); 87 } 88 89 public void SetValues<T>(int columnIndex, IList<T> values) { 90 if (IsFiltered) 91 throw new InvalidOperationException("SetValues not possible while data is filtered"); 92 93 originalData.SetValues<T>(columnIndex, values); 94 } 95 96 public bool SetValue(string value, int columnIndex, int rowIndex) { 97 if (IsFiltered) 98 throw new InvalidOperationException("SetValue not possible while data is filtered"); 99 return originalData.SetValue(value, columnIndex, rowIndex); 100 } 101 102 public int Columns { 103 get { return ActiveData.Columns; } 104 } 105 106 public int Rows { 107 get { return ActiveData.Rows; } 108 } 109 #endregion 110 111 #region Rows 112 public void InsertRow(int rowIndex) { 113 if (IsFiltered) 114 throw new InvalidOperationException("InsertRow not possible while data is filtered"); 115 116 originalData.InsertRow(rowIndex); 117 } 118 119 public void DeleteRow(int rowIndex) { 120 if (IsFiltered) 121 throw new InvalidOperationException("DeleteRow not possible while data is filtered"); 122 123 originalData.DeleteRow(rowIndex); 124 } 125 126 public void DeleteRowsWithIndices(IEnumerable<int> rows) { 127 if (IsFiltered) 128 throw new InvalidOperationException("DeleteRowsWithIndices not possible while data is filtered"); 129 130 originalData.DeleteRowsWithIndices(rows); 131 } 132 133 public void InsertColumn<T>(string variableName, int columnIndex) { 134 if (IsFiltered) 135 throw new InvalidOperationException("InsertColumn not possible while data is filtered"); 136 137 originalData.InsertColumn<T>(variableName, columnIndex); 138 } 139 140 public void DeleteColumn(int columnIndex) { 141 if (IsFiltered) 142 throw new InvalidOperationException("DeleteColumn not possible while data is filtered"); 143 originalData.DeleteColumn(columnIndex); 144 } 145 146 public void RenameColumn(int columnIndex, string name) { 147 if (IsFiltered) 148 throw new InvalidOperationException("RenameColumn not possible while data is filtered"); 149 originalData.RenameColumn(columnIndex, name); 150 } 151 152 public void RenameColumns(IList<string> names) { 153 if (IsFiltered) 154 throw new InvalidOperationException("RenameColumns not possible while data is filtered"); 155 originalData.RenameColumns(names); 156 } 157 158 public bool AreAllStringColumns(IEnumerable<int> columnIndices) { 159 return originalData.AreAllStringColumns(columnIndices); 160 } 161 #endregion 162 163 #region Variables 164 public IEnumerable<string> VariableNames { 165 get { return ActiveData.VariableNames; } 166 } 167 public IEnumerable<string> GetDoubleVariableNames() { 168 return originalData.GetDoubleVariableNames(); 169 } 170 public string GetVariableName(int columnIndex) { 171 return ActiveData.GetVariableName(columnIndex); 172 } 173 174 public int GetColumnIndex(string variableName) { 175 return ActiveData.GetColumnIndex(variableName); 176 } 177 178 public bool VariableHasType<T>(int columnIndex) { 179 return originalData.VariableHasType<T>(columnIndex); 180 } 181 182 public Type GetVariableType(int columnIndex) { 183 return ActiveData.GetVariableType(columnIndex); 184 } 185 186 public IList<string> InputVariables { 187 get { return ActiveData.InputVariables; } 188 } 189 190 public string TargetVariable { 191 get { return ActiveData.TargetVariable; } 192 } // optional 193 #endregion 194 195 #region Partitions 34 196 public IntRange TrainingPartition { 35 197 get { return originalData.TrainingPartition; } … … 39 201 get { return originalData.TestPartition; } 40 202 } 41 203 #endregion 204 205 #region Transformations 42 206 public IList<ITransformation> Transformations { 43 207 get { return originalData.Transformations; } 44 208 } 45 46 public IEnumerable<string> VariableNames { 47 get { return ActiveData.VariableNames; } 48 } 49 50 public IList<string> InputVariables { get { return ActiveData.InputVariables; } } 51 public string TargetVariable { get { return ActiveData.TargetVariable; } } // optional 52 209 #endregion 210 211 #region Validation 212 public bool Validate(string value, out string errorMessage, int columnIndex) { 213 return originalData.Validate(value, out errorMessage, columnIndex); 214 } 215 #endregion 216 217 #region Import & Export 218 public void Import(IDataAnalysisProblemData problemData) { 219 if (IsFiltered) 220 throw new InvalidOperationException("Import not possible while data is filtered"); 221 originalData.Import(problemData); 222 } 223 224 public Dataset ExportToDataset() { 225 return originalData.ExportToDataset(); 226 } 227 #endregion 228 229 #region Selection 53 230 public IDictionary<int, IList<int>> Selection { 54 231 get { return originalData.Selection; } … … 56 233 } 57 234 58 public int Columns { 59 get { return ActiveData.Columns; } 60 } 61 62 public int Rows { 63 get { return ActiveData.Rows; } 64 } 65 66 public ITransactionalPreprocessingData ActiveData { 67 get { return IsFiltered ? filteredData : originalData; } 235 public void ClearSelection() { 236 originalData.ClearSelection(); 237 } 238 239 public event EventHandler SelectionChanged { 240 add { originalData.SelectionChanged += value; } 241 remove { originalData.SelectionChanged -= value; } 242 } 243 #endregion 244 245 #region Transactions 246 public event DataPreprocessingChangedEventHandler Changed { 247 add { originalData.Changed += value; } 248 remove { originalData.Changed -= value; } 68 249 } 69 250 … … 72 253 } 73 254 74 public bool IsFiltered { 75 get { return filteredData != null; } 76 } 77 78 79 public FilteredPreprocessingData(ITransactionalPreprocessingData preporcessingData) 80 : base() { 81 originalData = preporcessingData; 82 filteredData = null; 83 } 84 85 protected FilteredPreprocessingData(FilteredPreprocessingData original, Cloner cloner) 86 : base(original, cloner) { 87 originalData = original.originalData; 88 filteredData = original.filteredData; 89 } 90 public override IDeepCloneable Clone(Cloner cloner) { 91 return new FilteredPreprocessingData(this, cloner); 92 } 93 94 public T GetCell<T>(int columnIndex, int rowIndex) { 95 return ActiveData.GetCell<T>(columnIndex, rowIndex); 96 } 97 98 public void SetCell<T>(int columnIndex, int rowIndex, T value) { 99 if (IsFiltered) 100 throw new InvalidOperationException("SetValues not possible while data is filtered"); 101 originalData.SetCell<T>(columnIndex, rowIndex, value); 102 } 103 104 public string GetCellAsString(int columnIndex, int rowIndex) { 105 return ActiveData.GetCellAsString(columnIndex, rowIndex); 106 } 107 108 public IList<T> GetValues<T>(int columnIndex, bool considerSelection) { 109 return ActiveData.GetValues<T>(columnIndex, considerSelection); 110 } 111 112 public void SetValues<T>(int columnIndex, IList<T> values) { 113 if (IsFiltered) 114 throw new InvalidOperationException("SetValues not possible while data is filtered"); 115 116 originalData.SetValues<T>(columnIndex, values); 117 } 118 119 public void InsertRow(int rowIndex) { 120 if (IsFiltered) 121 throw new InvalidOperationException("InsertRow not possible while data is filtered"); 122 123 originalData.InsertRow(rowIndex); 124 } 125 126 public void DeleteRow(int rowIndex) { 127 if (IsFiltered) 128 throw new InvalidOperationException("DeleteRow not possible while data is filtered"); 129 130 originalData.DeleteRow(rowIndex); 131 } 132 133 public void InsertColumn<T>(string variableName, int columnIndex) { 134 if (IsFiltered) 135 throw new InvalidOperationException("InsertColumn not possible while data is filtered"); 136 137 originalData.InsertColumn<T>(variableName, columnIndex); 138 } 139 140 public void DeleteColumn(int columnIndex) { 141 if (IsFiltered) 142 throw new InvalidOperationException("DeleteColumn not possible while data is filtered"); 143 originalData.DeleteColumn(columnIndex); 144 } 145 146 public void RenameColumn(int columnIndex, string name) { 147 if (IsFiltered) 148 throw new InvalidOperationException("RenameColumn not possible while data is filtered"); 149 originalData.RenameColumn(columnIndex, name); 150 } 151 152 public void RenameColumns(IList<string> names) { 153 if (IsFiltered) 154 throw new InvalidOperationException("RenameColumns not possible while data is filtered"); 155 originalData.RenameColumns(names); 156 } 157 158 public string GetVariableName(int columnIndex) { 159 return ActiveData.GetVariableName(columnIndex); 160 } 161 162 public int GetColumnIndex(string variableName) { 163 return ActiveData.GetColumnIndex(variableName); 164 } 165 166 public bool VariableHasType<T>(int columnIndex) { 167 return originalData.VariableHasType<T>(columnIndex); 168 } 169 170 public Dataset ExportToDataset() { 171 return originalData.ExportToDataset(); 172 } 173 174 public void SetFilter(bool[] rowFilters) { 175 filteredData = (ITransactionalPreprocessingData)originalData.Clone(); 255 public void Undo() { 256 if (IsFiltered) 257 throw new InvalidOperationException("Undo not possible while data is filtered"); 258 259 originalData.Undo(); 260 } 261 262 public void InTransaction(Action action, DataPreprocessingChangedEventType type = DataPreprocessingChangedEventType.Any) { 263 if (IsFiltered) 264 throw new InvalidOperationException("Transaction not possible while data is filtered"); 265 originalData.InTransaction(action, type); 266 } 267 268 public void BeginTransaction(DataPreprocessingChangedEventType type) { 269 if (IsFiltered) 270 throw new InvalidOperationException("Transaction not possible while data is filtered"); 271 originalData.BeginTransaction(type); 272 } 273 274 public void EndTransaction() { 275 originalData.EndTransaction(); 276 } 277 #endregion 278 279 #region Statistics 280 public T GetMin<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 281 return ActiveData.GetMin<T>(columnIndex, considerSelection, emptyValue); 282 } 283 public T GetMax<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 284 return ActiveData.GetMax<T>(columnIndex, considerSelection, emptyValue); 285 } 286 public T GetMean<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 287 return ActiveData.GetMean<T>(columnIndex, considerSelection, emptyValue); 288 } 289 public T GetMedian<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IComparable<T> { 290 return ActiveData.GetMean<T>(columnIndex, considerSelection, emptyValue); 291 } 292 public T GetMode<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IEquatable<T> { 293 return ActiveData.GetMode<T>(columnIndex, considerSelection, emptyValue); 294 } 295 public T GetStandardDeviation<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 296 return ActiveData.GetStandardDeviation<T>(columnIndex, considerSelection, emptyValue); 297 } 298 public T GetVariance<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 299 return ActiveData.GetVariance<T>(columnIndex, considerSelection, emptyValue); 300 } 301 public T GetQuantile<T>(double alpha, int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IComparable<T> { 302 return ActiveData.GetQuantile<T>(alpha, columnIndex, considerSelection, emptyValue); 303 } 304 public int GetDistinctValues<T>(int columnIndex, bool considerSelection = false) { 305 return ActiveData.GetDistinctValues<T>(columnIndex, considerSelection); 306 } 307 308 public int GetMissingValueCount() { 309 return ActiveData.GetMissingValueCount(); 310 } 311 public int GetMissingValueCount(int columnIndex) { 312 return ActiveData.GetMissingValueCount(columnIndex); 313 } 314 public int GetRowMissingValueCount(int rowIndex) { 315 return ActiveData.GetRowMissingValueCount(rowIndex); 316 } 317 #endregion 318 319 #region Filters 320 public void SetFilter(bool[] remainingRows) { 321 filteredData = (IPreprocessingData)originalData.Clone(); 176 322 filteredData.InTransaction(() => { 177 for (int row = (rowFilters.Length - 1); row >= 0; --row) { 178 if (rowFilters[row]) { 179 filteredData.DeleteRow(row); 323 var remainingIndices = Enumerable.Range(0, remainingRows.Length).Where(x => remainingRows[x]); 324 325 foreach (var v in filteredData.VariableNames) { 326 var ci = filteredData.GetColumnIndex(v); 327 if (filteredData.VariableHasType<double>(ci)) { 328 var values = filteredData.GetValues<double>(ci); 329 var filteredValues = remainingIndices.Select(x => values[x]).ToList(); 330 filteredData.SetValues(ci, filteredValues); 331 } else if (filteredData.VariableHasType<DateTime>(ci)) { 332 var values = filteredData.GetValues<DateTime>(ci); 333 var filteredValues = remainingIndices.Select(x => values[x]).ToList(); 334 filteredData.SetValues(ci, filteredValues); 335 } else if (filteredData.VariableHasType<string>(ci)) { 336 var values = filteredData.GetValues<string>(ci); 337 var filteredValues = remainingIndices.Select(x => values[x]).ToList(); 338 filteredData.SetValues(ci, filteredValues); 180 339 } 181 340 } … … 206 365 } 207 366 367 public bool IsFiltered { 368 get { return filteredData != null; } 369 } 370 371 public event EventHandler FilterChanged; 372 208 373 private void OnFilterChanged() { 209 374 if (FilterChanged != null) { … … 211 376 } 212 377 } 213 214 public event DataPreprocessingChangedEventHandler Changed {215 add { originalData.Changed += value; }216 remove { originalData.Changed -= value; }217 }218 219 public bool SetValue(string value, int columnIndex, int rowIndex) {220 if (IsFiltered)221 throw new InvalidOperationException("SetValue not possible while data is filtered");222 return originalData.SetValue(value, columnIndex, rowIndex);223 }224 225 public bool AreAllStringColumns(IEnumerable<int> columnIndices) {226 return originalData.AreAllStringColumns(columnIndices);227 }228 229 public void DeleteRowsWithIndices(IEnumerable<int> rows) {230 if (IsFiltered)231 throw new InvalidOperationException("DeleteRowsWithIndices not possible while data is filtered");232 233 originalData.DeleteRowsWithIndices(rows);234 }235 236 public void Undo() {237 if (IsFiltered)238 throw new InvalidOperationException("Undo not possible while data is filtered");239 240 originalData.Undo();241 }242 243 public void InTransaction(Action action, DataPreprocessingChangedEventType type = DataPreprocessingChangedEventType.Any) {244 if (IsFiltered)245 throw new InvalidOperationException("Transaction not possible while data is filtered");246 originalData.InTransaction(action, type);247 }248 249 public void BeginTransaction(DataPreprocessingChangedEventType type) {250 if (IsFiltered)251 throw new InvalidOperationException("Transaction not possible while data is filtered");252 originalData.BeginTransaction(type);253 }254 255 public void EndTransaction() {256 originalData.EndTransaction();257 }258 259 public IEnumerable<string> GetDoubleVariableNames() {260 return originalData.GetDoubleVariableNames();261 }262 263 public void ClearSelection() {264 originalData.ClearSelection();265 }266 267 public event EventHandler SelectionChanged {268 add { originalData.SelectionChanged += value; }269 remove { originalData.SelectionChanged -= value; }270 }271 272 #region IPreprocessingData Members273 public bool Validate(string value, out string errorMessage, int columnIndex) {274 return originalData.Validate(value, out errorMessage, columnIndex);275 }276 277 public event EventHandler FilterChanged;278 378 #endregion 279 379 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Data/IFilteredPreprocessingData.cs ¶
r14186 r15535 23 23 24 24 namespace HeuristicLab.DataPreprocessing { 25 public interface IFilteredPreprocessingData : ITransactionalPreprocessingData { 26 void SetFilter(bool[] rowFilters); 25 public interface IFilteredPreprocessingData : IPreprocessingData { 26 #region Filters 27 void SetFilter(bool[] remainingRows); 27 28 void PersistFilter(); 28 29 void ResetFilter(); … … 30 31 31 32 event EventHandler FilterChanged; 33 #endregion 32 34 } 33 35 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Data/IPreprocessingData.cs ¶
r15242 r15535 28 28 namespace HeuristicLab.DataPreprocessing { 29 29 public interface IPreprocessingData : INamedItem { 30 #region Cells 31 bool IsCellEmpty(int columnIndex, int rowIndex); 30 32 T GetCell<T>(int columnIndex, int rowIndex); 31 33 … … 39 41 bool SetValue(string value, int columnIndex, int rowIndex); 40 42 43 int Columns { get; } 44 int Rows { get; } 45 #endregion 46 47 #region Rows 41 48 void InsertRow(int rowIndex); 42 49 void DeleteRow(int rowIndex); … … 50 57 51 58 bool AreAllStringColumns(IEnumerable<int> columnIndices); 52 bool Validate(string value, out string errorMessage, int columnIndex);59 #endregion 53 60 54 IntRange TrainingPartition { get; } 55 IntRange TestPartition { get; } 56 57 IList<ITransformation> Transformations { get; } 58 61 #region Variables 59 62 IEnumerable<string> VariableNames { get; } 60 63 IEnumerable<string> GetDoubleVariableNames(); … … 63 66 64 67 bool VariableHasType<T>(int columnIndex); 68 Type GetVariableType(int columnIndex); 65 69 66 70 IList<string> InputVariables { get; } 67 71 string TargetVariable { get; } // optional 72 #endregion 68 73 69 int Columns { get; } 70 int Rows { get; } 74 #region Partitions 75 IntRange TrainingPartition { get; } 76 IntRange TestPartition { get; } 77 #endregion 71 78 79 #region Transformations 80 IList<ITransformation> Transformations { get; } 81 #endregion 82 83 #region Validation 84 bool Validate(string value, out string errorMessage, int columnIndex); 85 #endregion 86 87 #region Import & Export 88 void Import(IDataAnalysisProblemData problemData); 72 89 Dataset ExportToDataset(); 90 #endregion 73 91 92 #region Selection 74 93 IDictionary<int, IList<int>> Selection { get; set; } 75 94 void ClearSelection(); 76 95 77 96 event EventHandler SelectionChanged; 97 #endregion 98 99 #region Transactions 100 event DataPreprocessingChangedEventHandler Changed; 101 102 bool IsUndoAvailable { get; } 103 void Undo(); 104 void InTransaction(Action action, DataPreprocessingChangedEventType type = DataPreprocessingChangedEventType.Any); 105 void BeginTransaction(DataPreprocessingChangedEventType type); 106 void EndTransaction(); 107 #endregion 108 109 #region Statistics 110 T GetMin<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)); 111 T GetMax<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)); 112 T GetMean<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)); 113 T GetMedian<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IComparable<T>; 114 T GetMode<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IEquatable<T>; 115 T GetStandardDeviation<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)); 116 T GetVariance<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)); 117 T GetQuantile<T>(double alpha, int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IComparable<T>; 118 int GetDistinctValues<T>(int columnIndex, bool considerSelection = false); 119 120 int GetMissingValueCount(); 121 int GetMissingValueCount(int columnIndex); 122 int GetRowMissingValueCount(int rowIndex); 123 #endregion 78 124 } 79 125 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/Data/PreprocessingData.cs ¶
r15242 r15535 23 23 using System.Collections; 24 24 using System.Collections.Generic; 25 using System.Globalization; 25 26 using System.Linq; 26 27 using HeuristicLab.Common; 27 28 using HeuristicLab.Core; 28 29 using HeuristicLab.Data; 30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 29 31 using HeuristicLab.Problems.DataAnalysis; 30 32 … … 32 34 33 35 [Item("PreprocessingData", "Represents data used for preprocessing.")] 34 public abstract class PreprocessingData : NamedItem, IPreprocessingData { 35 public IntRange TrainingPartition { get; set; } 36 public IntRange TestPartition { get; set; } 37 38 public IList<ITransformation> Transformations { get; protected set; } 39 36 [StorableClass] 37 public class PreprocessingData : NamedItem, IPreprocessingData { 38 39 [Storable] 40 40 protected IList<IList> variableValues; 41 [Storable] 41 42 protected IList<string> variableNames; 42 43 43 public IEnumerable<string> VariableNames { 44 get { return variableNames; } 45 } 46 47 public IEnumerable<string> GetDoubleVariableNames() { 48 var doubleVariableNames = new List<string>(); 49 for (int i = 0; i < Columns; ++i) { 50 if (VariableHasType<double>(i)) { 51 doubleVariableNames.Add(variableNames[i]); 52 } 53 } 54 return doubleVariableNames; 55 } 56 57 public IList<string> InputVariables { get; private set; } 58 public string TargetVariable { get; private set; } // optional 59 60 public int Columns { 61 get { return variableNames.Count; } 62 } 63 64 public int Rows { 65 get { return variableValues.Count > 0 ? variableValues[0].Count : 0; } 66 } 67 68 protected IDictionary<int, IList<int>> selection; 69 public IDictionary<int, IList<int>> Selection { 70 get { return selection; } 71 set { 72 selection = value; 73 OnSelectionChanged(); 74 } 44 #region Constructor, Cloning & Persistence 45 public PreprocessingData(IDataAnalysisProblemData problemData) 46 : base() { 47 Name = "Preprocessing Data"; 48 49 Transformations = new List<ITransformation>(); 50 selection = new Dictionary<int, IList<int>>(); 51 52 Import(problemData); 53 54 RegisterEventHandler(); 75 55 } 76 56 … … 88 68 RegisterEventHandler(); 89 69 } 90 91 protected PreprocessingData(IDataAnalysisProblemData problemData) 92 : base() { 93 Name = "Preprocessing Data"; 94 95 Transformations = new List<ITransformation>(); 96 selection = new Dictionary<int, IList<int>>(); 97 98 Import(problemData); 99 70 public override IDeepCloneable Clone(Cloner cloner) { 71 return new PreprocessingData(this, cloner); 72 } 73 74 [StorableConstructor] 75 protected PreprocessingData(bool deserializing) 76 : base(deserializing) { } 77 [StorableHook(HookType.AfterDeserialization)] 78 private void AfterDeserialization() { 100 79 RegisterEventHandler(); 101 80 } 102 81 82 private void RegisterEventHandler() { 83 Changed += (s, e) => { 84 switch (e.Type) { 85 case DataPreprocessingChangedEventType.DeleteRow: 86 case DataPreprocessingChangedEventType.Any: 87 case DataPreprocessingChangedEventType.Transformation: 88 int maxRowIndex = Math.Max(0, Rows); 89 TrainingPartition.Start = Math.Min(TrainingPartition.Start, maxRowIndex); 90 TrainingPartition.End = Math.Min(TrainingPartition.End, maxRowIndex); 91 TestPartition.Start = Math.Min(TestPartition.Start, maxRowIndex); 92 TestPartition.End = Math.Min(TestPartition.End, maxRowIndex); 93 break; 94 } 95 }; 96 } 97 #endregion 98 99 #region Cells 100 public bool IsCellEmpty(int columnIndex, int rowIndex) { 101 var value = variableValues[columnIndex][rowIndex]; 102 return IsMissingValue(value); 103 } 104 105 public T GetCell<T>(int columnIndex, int rowIndex) { 106 return (T)variableValues[columnIndex][rowIndex]; 107 } 108 109 public void SetCell<T>(int columnIndex, int rowIndex, T value) { 110 SaveSnapshot(DataPreprocessingChangedEventType.ChangeItem, columnIndex, rowIndex); 111 112 for (int i = Rows; i <= rowIndex; i++) 113 InsertRow(i); 114 for (int i = Columns; i <= columnIndex; i++) 115 InsertColumn<T>(i.ToString(), i); 116 117 variableValues[columnIndex][rowIndex] = value; 118 if (!IsInTransaction) 119 OnChanged(DataPreprocessingChangedEventType.ChangeItem, columnIndex, rowIndex); 120 } 121 122 public string GetCellAsString(int columnIndex, int rowIndex) { 123 return variableValues[columnIndex][rowIndex].ToString(); 124 } 125 126 public IList<T> GetValues<T>(int columnIndex, bool considerSelection) { 127 if (considerSelection) { 128 var list = new List<T>(); 129 foreach (var rowIdx in selection[columnIndex]) { 130 list.Add((T)variableValues[columnIndex][rowIdx]); 131 } 132 return list; 133 } else { 134 return (IList<T>)variableValues[columnIndex]; 135 } 136 } 137 138 public void SetValues<T>(int columnIndex, IList<T> values) { 139 SaveSnapshot(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1); 140 if (VariableHasType<T>(columnIndex)) { 141 variableValues[columnIndex] = (IList)values; 142 } else { 143 throw new ArgumentException("The datatype of column " + columnIndex + " must be of type " + variableValues[columnIndex].GetType().Name + " but was " + typeof(T).Name); 144 } 145 if (!IsInTransaction) 146 OnChanged(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1); 147 } 148 149 public bool SetValue(string value, int columnIndex, int rowIndex) { 150 bool valid = false; 151 if (VariableHasType<double>(columnIndex)) { 152 double val; 153 if (string.IsNullOrWhiteSpace(value)) { 154 val = double.NaN; 155 valid = true; 156 } else { 157 valid = double.TryParse(value, out val); 158 } 159 if (valid) 160 SetCell(columnIndex, rowIndex, val); 161 } else if (VariableHasType<string>(columnIndex)) { 162 valid = value != null; 163 if (valid) 164 SetCell(columnIndex, rowIndex, value); 165 } else if (VariableHasType<DateTime>(columnIndex)) { 166 DateTime date; 167 valid = DateTime.TryParse(value, out date); 168 if (valid) 169 SetCell(columnIndex, rowIndex, date); 170 } else { 171 throw new ArgumentException("column " + columnIndex + " contains a non supported type."); 172 } 173 174 if (!IsInTransaction) 175 OnChanged(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1); 176 177 return valid; 178 } 179 180 public int Columns { 181 get { return variableNames.Count; } 182 } 183 184 public int Rows { 185 get { return variableValues.Count > 0 ? variableValues[0].Count : 0; } 186 } 187 188 public static bool IsMissingValue(object value) { 189 if (value is double) return double.IsNaN((double)value); 190 if (value is string) return string.IsNullOrEmpty((string)value); 191 if (value is DateTime) return ((DateTime)value).Equals(DateTime.MinValue); 192 throw new ArgumentException(); 193 } 194 #endregion 195 196 #region Rows 197 public void InsertRow(int rowIndex) { 198 SaveSnapshot(DataPreprocessingChangedEventType.DeleteRow, -1, rowIndex); 199 foreach (IList column in variableValues) { 200 Type type = column.GetType().GetGenericArguments()[0]; 201 column.Insert(rowIndex, type.IsValueType ? Activator.CreateInstance(type) : null); 202 } 203 if (TrainingPartition.Start <= rowIndex && rowIndex <= TrainingPartition.End) { 204 TrainingPartition.End++; 205 if (TrainingPartition.End <= TestPartition.Start) { 206 TestPartition.Start++; 207 TestPartition.End++; 208 } 209 } else if (TestPartition.Start <= rowIndex && rowIndex <= TestPartition.End) { 210 TestPartition.End++; 211 if (TestPartition.End <= TrainingPartition.Start) { 212 TestPartition.Start++; 213 TestPartition.End++; 214 } 215 } 216 if (!IsInTransaction) 217 OnChanged(DataPreprocessingChangedEventType.AddRow, -1, rowIndex); 218 } 219 public void DeleteRow(int rowIndex) { 220 SaveSnapshot(DataPreprocessingChangedEventType.AddRow, -1, rowIndex); 221 foreach (IList column in variableValues) { 222 column.RemoveAt(rowIndex); 223 } 224 if (TrainingPartition.Start <= rowIndex && rowIndex <= TrainingPartition.End) { 225 TrainingPartition.End--; 226 if (TrainingPartition.End <= TestPartition.Start) { 227 TestPartition.Start--; 228 TestPartition.End--; 229 } 230 } else if (TestPartition.Start <= rowIndex && rowIndex <= TestPartition.End) { 231 TestPartition.End--; 232 if (TestPartition.End <= TrainingPartition.Start) { 233 TestPartition.Start--; 234 TestPartition.End--; 235 } 236 } 237 if (!IsInTransaction) 238 OnChanged(DataPreprocessingChangedEventType.DeleteRow, -1, rowIndex); 239 } 240 public void DeleteRowsWithIndices(IEnumerable<int> rows) { 241 SaveSnapshot(DataPreprocessingChangedEventType.AddRow, -1, -1); 242 foreach (int rowIndex in rows.OrderByDescending(x => x)) { 243 foreach (IList column in variableValues) { 244 column.RemoveAt(rowIndex); 245 } 246 if (TrainingPartition.Start <= rowIndex && rowIndex <= TrainingPartition.End) { 247 TrainingPartition.End--; 248 if (TrainingPartition.End <= TestPartition.Start) { 249 TestPartition.Start--; 250 TestPartition.End--; 251 } 252 } else if (TestPartition.Start <= rowIndex && rowIndex <= TestPartition.End) { 253 TestPartition.End--; 254 if (TestPartition.End <= TrainingPartition.Start) { 255 TestPartition.Start--; 256 TestPartition.End--; 257 } 258 } 259 } 260 if (!IsInTransaction) 261 OnChanged(DataPreprocessingChangedEventType.DeleteRow, -1, -1); 262 } 263 264 public void InsertColumn<T>(string variableName, int columnIndex) { 265 SaveSnapshot(DataPreprocessingChangedEventType.DeleteColumn, columnIndex, -1); 266 variableValues.Insert(columnIndex, new List<T>(Enumerable.Repeat(default(T), Rows))); 267 variableNames.Insert(columnIndex, variableName); 268 if (!IsInTransaction) 269 OnChanged(DataPreprocessingChangedEventType.AddColumn, columnIndex, -1); 270 } 271 272 public void DeleteColumn(int columnIndex) { 273 SaveSnapshot(DataPreprocessingChangedEventType.AddColumn, columnIndex, -1); 274 variableValues.RemoveAt(columnIndex); 275 variableNames.RemoveAt(columnIndex); 276 if (!IsInTransaction) 277 OnChanged(DataPreprocessingChangedEventType.DeleteColumn, columnIndex, -1); 278 } 279 280 public void RenameColumn(int columnIndex, string name) { 281 SaveSnapshot(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1); 282 if (columnIndex < 0 || columnIndex > variableNames.Count) 283 throw new ArgumentOutOfRangeException("columnIndex"); 284 variableNames[columnIndex] = name; 285 286 if (!IsInTransaction) 287 OnChanged(DataPreprocessingChangedEventType.ChangeColumn, -1, -1); 288 } 289 290 public void RenameColumns(IList<string> names) { 291 if (names == null) throw new ArgumentNullException("names"); 292 if (names.Count != variableNames.Count) throw new ArgumentException("number of names must match the number of columns.", "names"); 293 294 SaveSnapshot(DataPreprocessingChangedEventType.ChangeColumn, -1, -1); 295 for (int i = 0; i < names.Count; i++) 296 variableNames[i] = names[i]; 297 298 if (!IsInTransaction) 299 OnChanged(DataPreprocessingChangedEventType.ChangeColumn, -1, -1); 300 } 301 302 public bool AreAllStringColumns(IEnumerable<int> columnIndices) { 303 return columnIndices.All(x => VariableHasType<string>(x)); 304 } 305 #endregion 306 307 #region Variables 308 public IEnumerable<string> VariableNames { 309 get { return variableNames; } 310 } 311 312 public IEnumerable<string> GetDoubleVariableNames() { 313 var doubleVariableNames = new List<string>(); 314 for (int i = 0; i < Columns; ++i) { 315 if (VariableHasType<double>(i)) { 316 doubleVariableNames.Add(variableNames[i]); 317 } 318 } 319 return doubleVariableNames; 320 } 321 322 public string GetVariableName(int columnIndex) { 323 return variableNames[columnIndex]; 324 } 325 326 public int GetColumnIndex(string variableName) { 327 return variableNames.IndexOf(variableName); 328 } 329 330 public bool VariableHasType<T>(int columnIndex) { 331 return columnIndex >= variableValues.Count || variableValues[columnIndex] is List<T>; 332 } 333 334 public Type GetVariableType(int columnIndex) { 335 var listType = variableValues[columnIndex].GetType(); 336 return listType.GenericTypeArguments.Single(); 337 } 338 339 public IList<string> InputVariables { get; private set; } 340 public string TargetVariable { get; private set; } // optional 341 #endregion 342 343 #region Partitions 344 [Storable] 345 public IntRange TrainingPartition { get; set; } 346 [Storable] 347 public IntRange TestPartition { get; set; } 348 #endregion 349 350 #region Transformations 351 [Storable] 352 public IList<ITransformation> Transformations { get; protected set; } 353 #endregion 354 355 #region Validation 356 public bool Validate(string value, out string errorMessage, int columnIndex) { 357 if (columnIndex < 0 || columnIndex > VariableNames.Count()) { 358 throw new ArgumentOutOfRangeException("column index is out of range"); 359 } 360 361 bool valid = false; 362 errorMessage = string.Empty; 363 if (VariableHasType<double>(columnIndex)) { 364 if (string.IsNullOrWhiteSpace(value)) { 365 valid = true; 366 } else { 367 double val; 368 valid = double.TryParse(value, out val); 369 if (!valid) { 370 errorMessage = "Invalid Value (Valid Value Format: \"" + FormatPatterns.GetDoubleFormatPattern() + "\")"; 371 } 372 } 373 } else if (VariableHasType<string>(columnIndex)) { 374 valid = value != null; 375 if (!valid) { 376 errorMessage = "Invalid Value (string must not be null)"; 377 } 378 } else if (VariableHasType<DateTime>(columnIndex)) { 379 DateTime date; 380 valid = DateTime.TryParse(value, out date); 381 if (!valid) { 382 errorMessage = "Invalid Value (Valid Value Format: \"" + CultureInfo.CurrentCulture.DateTimeFormat + "\""; 383 } 384 } else { 385 throw new ArgumentException("column " + columnIndex + " contains a non supported type."); 386 } 387 388 return valid; 389 } 390 #endregion 391 392 #region Import & Export 103 393 public void Import(IDataAnalysisProblemData problemData) { 104 394 Dataset dataset = (Dataset)problemData.Dataset; … … 107 397 TargetVariable = (problemData is IRegressionProblemData) ? ((IRegressionProblemData)problemData).TargetVariable 108 398 : (problemData is IClassificationProblemData) ? ((IClassificationProblemData)problemData).TargetVariable 109 : null;399 : null; 110 400 111 401 int columnIndex = 0; … … 128 418 } 129 419 130 private void RegisterEventHandler() { 131 Changed += (s, e) => { 132 switch (e.Type) { 133 case DataPreprocessingChangedEventType.DeleteRow: 134 CheckPartitionRanges(); 135 break; 136 case DataPreprocessingChangedEventType.Any: 137 CheckPartitionRanges(); 138 break; 139 case DataPreprocessingChangedEventType.Transformation: 140 CheckPartitionRanges(); 141 break; 142 } 143 }; 144 } 145 146 private void CheckPartitionRanges() { 147 int maxRowIndex = Math.Max(0, Rows); 148 TrainingPartition.Start = Math.Min(TrainingPartition.Start, maxRowIndex); 149 TrainingPartition.End = Math.Min(TrainingPartition.End, maxRowIndex); 150 TestPartition.Start = Math.Min(TestPartition.Start, maxRowIndex); 151 TestPartition.End = Math.Min(TestPartition.End, maxRowIndex); 152 } 153 154 protected IList<IList> CopyVariableValues(IList<IList> original) { 155 var copy = new List<IList>(original); 156 for (int i = 0; i < original.Count; ++i) { 157 copy[i] = (IList)Activator.CreateInstance(original[i].GetType(), original[i]); 158 } 159 return copy; 160 } 161 162 163 #region IPreprocessingData Members 164 public abstract T GetCell<T>(int columnIndex, int rowIndex); 165 166 public abstract void SetCell<T>(int columnIndex, int rowIndex, T value); 167 168 public abstract string GetCellAsString(int columnIndex, int rowIndex); 169 170 public abstract string GetVariableName(int columnIndex); 171 172 public abstract int GetColumnIndex(string variableName); 173 174 public abstract bool VariableHasType<T>(int columnIndex); 175 176 [Obsolete("use the index based variant, is faster")] 177 public abstract IList<T> GetValues<T>(string variableName, bool considerSelection); 178 179 public abstract IList<T> GetValues<T>(int columnIndex, bool considerSelection); 180 181 public abstract void SetValues<T>(int columnIndex, IList<T> values); 182 183 public abstract bool SetValue(string value, int columnIndex, int rowIndex); 184 185 public abstract bool Validate(string value, out string errorMessage, int columnIndex); 186 187 public abstract bool AreAllStringColumns(IEnumerable<int> columnIndices); 188 189 public abstract void DeleteRowsWithIndices(IEnumerable<int> rows); 190 191 public abstract void InsertRow(int rowIndex); 192 193 public abstract void DeleteRow(int rowIndex); 194 195 public abstract void InsertColumn<T>(string variableName, int columnIndex); 196 197 public abstract void DeleteColumn(int columnIndex); 198 199 public abstract void RenameColumn(int columnIndex, string name); 200 public abstract void RenameColumns(IList<string> list); 201 202 public abstract Dataset ExportToDataset(); 203 204 public abstract void ClearSelection(); 205 206 public abstract event EventHandler SelectionChanged; 207 protected abstract void OnSelectionChanged(); 420 public Dataset ExportToDataset() { 421 IList<IList> values = new List<IList>(); 422 423 for (int i = 0; i < Columns; ++i) { 424 values.Add(variableValues[i]); 425 } 426 427 var dataset = new Dataset(variableNames, values); 428 return dataset; 429 } 430 #endregion 431 432 #region Selection 433 [Storable] 434 protected IDictionary<int, IList<int>> selection; 435 public IDictionary<int, IList<int>> Selection { 436 get { return selection; } 437 set { 438 selection = value; 439 OnSelectionChanged(); 440 } 441 } 442 public void ClearSelection() { 443 Selection = new Dictionary<int, IList<int>>(); 444 } 445 446 public event EventHandler SelectionChanged; 447 protected void OnSelectionChanged() { 448 var listeners = SelectionChanged; 449 if (listeners != null) listeners(this, EventArgs.Empty); 450 } 451 #endregion 452 453 #region Transactions 454 // Stapshot/History are nost storable/cloneable on purpose 455 private class Snapshot { 456 public IList<IList> VariableValues { get; set; } 457 public IList<string> VariableNames { get; set; } 458 459 public IntRange TrainingPartition { get; set; } 460 public IntRange TestPartition { get; set; } 461 public IList<ITransformation> Transformations { get; set; } 462 public DataPreprocessingChangedEventType ChangedType { get; set; } 463 464 public int ChangedColumn { get; set; } 465 public int ChangedRow { get; set; } 466 } 208 467 209 468 public event DataPreprocessingChangedEventHandler Changed; … … 212 471 if (listeners != null) listeners(this, new DataPreprocessingChangedEventArgs(type, column, row)); 213 472 } 214 #endregion 473 474 private const int MAX_UNDO_DEPTH = 5; 475 476 private readonly IList<Snapshot> undoHistory = new List<Snapshot>(); 477 private readonly Stack<DataPreprocessingChangedEventType> eventStack = new Stack<DataPreprocessingChangedEventType>(); 478 479 public bool IsInTransaction { get { return eventStack.Count > 0; } } 480 481 private void SaveSnapshot(DataPreprocessingChangedEventType changedType, int column, int row) { 482 if (IsInTransaction) return; 483 484 var currentSnapshot = new Snapshot { 485 VariableValues = CopyVariableValues(variableValues), 486 VariableNames = new List<string>(variableNames), 487 TrainingPartition = new IntRange(TrainingPartition.Start, TrainingPartition.End), 488 TestPartition = new IntRange(TestPartition.Start, TestPartition.End), 489 Transformations = new List<ITransformation>(Transformations), 490 ChangedType = changedType, 491 ChangedColumn = column, 492 ChangedRow = row 493 }; 494 495 if (undoHistory.Count >= MAX_UNDO_DEPTH) 496 undoHistory.RemoveAt(0); 497 498 undoHistory.Add(currentSnapshot); 499 } 500 501 public bool IsUndoAvailable { 502 get { return undoHistory.Count > 0; } 503 } 504 505 public void Undo() { 506 if (IsUndoAvailable) { 507 Snapshot previousSnapshot = undoHistory[undoHistory.Count - 1]; 508 variableValues = previousSnapshot.VariableValues; 509 variableNames = previousSnapshot.VariableNames; 510 TrainingPartition = previousSnapshot.TrainingPartition; 511 TestPartition = previousSnapshot.TestPartition; 512 Transformations = previousSnapshot.Transformations; 513 undoHistory.Remove(previousSnapshot); 514 OnChanged(previousSnapshot.ChangedType, 515 previousSnapshot.ChangedColumn, 516 previousSnapshot.ChangedRow); 517 } 518 } 519 520 public void InTransaction(Action action, DataPreprocessingChangedEventType type = DataPreprocessingChangedEventType.Any) { 521 BeginTransaction(type); 522 action(); 523 EndTransaction(); 524 } 525 526 public void BeginTransaction(DataPreprocessingChangedEventType type) { 527 SaveSnapshot(type, -1, -1); 528 eventStack.Push(type); 529 } 530 531 public void EndTransaction() { 532 if (eventStack.Count == 0) 533 throw new InvalidOperationException("There is no open transaction that can be ended."); 534 535 var @event = eventStack.Pop(); 536 OnChanged(@event, -1, -1); 537 } 538 #endregion 539 540 #region Statistics 541 public T GetMin<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 542 var values = GetValuesWithoutMissingValues<T>(columnIndex, considerSelection); 543 return values.Any() ? values.Min() : emptyValue; 544 } 545 546 public T GetMax<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 547 var values = GetValuesWithoutMissingValues<T>(columnIndex, considerSelection); 548 return values.Any() ? values.Max() : emptyValue; 549 } 550 551 public T GetMean<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 552 if (typeof(T) == typeof(double)) { 553 var values = GetValuesWithoutMissingValues<double>(columnIndex, considerSelection); 554 return values.Any() ? Convert<T>(values.Average()) : emptyValue; 555 } 556 if (typeof(T) == typeof(string)) { 557 return Convert<T>(string.Empty); 558 } 559 if (typeof(T) == typeof(DateTime)) { 560 var values = GetValuesWithoutMissingValues<DateTime>(columnIndex, considerSelection); 561 return values.Any() ? Convert<T>(AggregateAsDouble(values, Enumerable.Average)) : emptyValue; 562 } 563 564 throw new InvalidOperationException(typeof(T) + " not supported"); 565 } 566 567 public T GetMedian<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IComparable<T> { 568 if (typeof(T) == typeof(double)) {// IEnumerable<double> is faster 569 var doubleValues = GetValuesWithoutMissingValues<double>(columnIndex, considerSelection); 570 return doubleValues.Any() ? Convert<T>(doubleValues.Median()) : emptyValue; 571 } 572 var values = GetValuesWithoutMissingValues<T>(columnIndex, considerSelection); 573 return values.Any() ? values.Quantile(0.5) : emptyValue; 574 } 575 576 public T GetMode<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IEquatable<T> { 577 var values = GetValuesWithoutMissingValues<T>(columnIndex, considerSelection); 578 return values.Any() ? values.GroupBy(x => x).OrderByDescending(g => g.Count()).Select(g => g.Key).First() : emptyValue; 579 } 580 581 public T GetStandardDeviation<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 582 if (typeof(T) == typeof(double)) { 583 var values = GetValuesWithoutMissingValues<double>(columnIndex, considerSelection); 584 return values.Any() ? Convert<T>(values.StandardDeviation()) : emptyValue; 585 } 586 // For DateTime, std.dev / variance would have to be TimeSpan 587 //if (typeof(T) == typeof(DateTime)) { 588 // var values = GetValuesWithoutMissingValues<DateTime>(columnIndex, considerSelection); 589 // return values.Any() ? Convert<T>(AggregateAsDouble(values, EnumerableStatisticExtensions.StandardDeviation)) : emptyValue; 590 //} 591 return default(T); 592 } 593 594 public T GetVariance<T>(int columnIndex, bool considerSelection = false, T emptyValue = default(T)) { 595 if (typeof(T) == typeof(double)) { 596 var values = GetValuesWithoutMissingValues<double>(columnIndex, considerSelection); 597 return values.Any() ? Convert<T>(values.Variance()) : emptyValue; 598 } 599 // DateTime variance often overflows long, thus the corresponding DateTime is invalid 600 //if (typeof(T) == typeof(DateTime)) { 601 // var values = GetValuesWithoutMissingValues<DateTime>(columnIndex, considerSelection); 602 // return values.Any() ? Convert<T>(AggregateAsDouble(values, EnumerableStatisticExtensions.Variance)) : emptyValue; 603 //} 604 return default(T); 605 } 606 607 public T GetQuantile<T>(double alpha, int columnIndex, bool considerSelection = false, T emptyValue = default(T)) where T : IComparable<T> { 608 if (typeof(T) == typeof(double)) {// IEnumerable<double> is faster 609 var doubleValues = GetValuesWithoutMissingValues<double>(columnIndex, considerSelection); 610 return doubleValues.Any() ? Convert<T>(doubleValues.Quantile(alpha)) : emptyValue; 611 } 612 var values = GetValuesWithoutMissingValues<T>(columnIndex, considerSelection); 613 return values.Any() ? values.Quantile(alpha) : emptyValue; 614 } 615 616 public int GetDistinctValues<T>(int columnIndex, bool considerSelection = false) { 617 var values = GetValuesWithoutMissingValues<T>(columnIndex, considerSelection); 618 return values.GroupBy(x => x).Count(); 619 } 620 621 private IEnumerable<T> GetValuesWithoutMissingValues<T>(int columnIndex, bool considerSelection) { 622 return GetValues<T>(columnIndex, considerSelection).Where(x => !IsMissingValue(x)); 623 } 624 625 private static DateTime AggregateAsDouble(IEnumerable<DateTime> values, Func<IEnumerable<double>, double> func) { 626 return new DateTime((long)(func(values.Select(x => (double)x.Ticks / TimeSpan.TicksPerSecond)) * TimeSpan.TicksPerSecond)); 627 } 628 private static T Convert<T>(object obj) { return (T)obj; } 629 630 public int GetMissingValueCount() { 631 int count = 0; 632 for (int i = 0; i < Columns; ++i) { 633 count += GetMissingValueCount(i); 634 } 635 return count; 636 } 637 public int GetMissingValueCount(int columnIndex) { 638 int sum = 0; 639 for (int i = 0; i < Rows; i++) { 640 if (IsCellEmpty(columnIndex, i)) 641 sum++; 642 } 643 return sum; 644 } 645 public int GetRowMissingValueCount(int rowIndex) { 646 int sum = 0; 647 for (int i = 0; i < Columns; i++) { 648 if (IsCellEmpty(i, rowIndex)) 649 sum++; 650 } 651 return sum; 652 } 653 #endregion 654 655 #region Helpers 656 private static IList<IList> CopyVariableValues(IList<IList> original) { 657 var copy = new List<IList>(original); 658 for (int i = 0; i < original.Count; ++i) { 659 copy[i] = (IList)Activator.CreateInstance(original[i].GetType(), original[i]); 660 } 661 return copy; 662 } 663 #endregion 664 } 665 666 // Adapted from HeuristicLab.Common.EnumerableStatisticExtensions 667 internal static class EnumerableExtensions { 668 public static T Quantile<T>(this IEnumerable<T> values, double alpha) where T : IComparable<T> { 669 T[] valuesArr = values.ToArray(); 670 int n = valuesArr.Length; 671 if (n == 0) throw new InvalidOperationException("Enumeration contains no elements."); 672 673 var pos = n * alpha; 674 675 return Select((int)Math.Ceiling(pos) - 1, valuesArr); 676 677 } 678 679 private static T Select<T>(int k, T[] arr) where T : IComparable<T> { 680 int i, ir, j, l, mid, n = arr.Length; 681 T a; 682 l = 0; 683 ir = n - 1; 684 for (;;) { 685 if (ir <= l + 1) { 686 // Active partition contains 1 or 2 elements. 687 if (ir == l + 1 && arr[ir].CompareTo(arr[l]) < 0) { 688 // Case of 2 elements. 689 Swap(arr, l, ir); 690 } 691 return arr[k]; 692 } else { 693 mid = (l + ir) >> 1; // Choose median of left, center, and right elements 694 Swap(arr, mid, l + 1); // as partitioning element a. Also 695 696 if (arr[l].CompareTo(arr[ir]) > 0) { // rearrange so that arr[l] arr[ir] <= arr[l+1], 697 Swap(arr, l, ir); // . arr[ir] >= arr[l+1] 698 } 699 700 if (arr[l + 1].CompareTo(arr[ir]) > 0) { 701 Swap(arr, l + 1, ir); 702 } 703 if (arr[l].CompareTo(arr[l + 1]) > 0) { 704 Swap(arr, l, l + 1); 705 } 706 i = l + 1; // Initialize pointers for partitioning. 707 j = ir; 708 a = arr[l + 1]; // Partitioning element. 709 for (;;) { // Beginning of innermost loop. 710 do i++; while (arr[i].CompareTo(a) < 0); // Scan up to find element > a. 711 do j--; while (arr[j].CompareTo(a) > 0); // Scan down to find element < a. 712 if (j < i) break; // Pointers crossed. Partitioning complete. 713 Swap(arr, i, j); 714 } // End of innermost loop. 715 arr[l + 1] = arr[j]; // Insert partitioning element. 716 arr[j] = a; 717 if (j >= k) ir = j - 1; // Keep active the partition that contains the 718 if (j <= k) l = i; // kth element. 719 } 720 } 721 } 722 723 private static void Swap<T>(T[] arr, int i, int j) { 724 T temp = arr[i]; 725 arr[i] = arr[j]; 726 arr[j] = temp; 727 } 215 728 } 216 729 } -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj ¶
r15242 r15535 79 79 <ItemGroup> 80 80 <Compile Include="Content\MultiScatterPlotContent.cs" /> 81 <Compile Include="Content\PreprocessingContent.cs" /> 81 82 <Compile Include="Content\SingleScatterPlotContent.cs" /> 82 83 <Compile Include="Content\ScatterPlotContent.cs" /> … … 90 91 <Compile Include="PreprocessingTransformator.cs" /> 91 92 <Compile Include="Data\DataPreprocessingChangedEvent.cs" /> 92 <Compile Include="Logic\Filter\ComparisonFilter.cs" /> 93 <Compile Include="Logic\Filter\IFilter.cs" /> 94 <Compile Include="Logic\ManipulationLogic.cs" /> 93 <Compile Include="Filter\ComparisonFilter.cs" /> 94 <Compile Include="Filter\IFilter.cs" /> 95 95 <Compile Include="Data\IPreprocessingData.cs" /> 96 96 <Compile Include="Content\FilterContent.cs" /> 97 <Compile Include="Logic\FilterLogic.cs" />98 97 <Compile Include="Content\HistogramContent.cs" /> 99 98 <Compile Include="Content\LineChartContent.cs" /> … … 105 104 <Compile Include="Content\DataGridContent.cs" /> 106 105 <Compile Include="PreprocessingContext.cs" /> 107 <Compile Include="Data\TransactionalPreprocessingData.cs" />108 <Compile Include="Logic\SearchLogic.cs" />109 <Compile Include="Logic\StatisticsLogic.cs" />110 <Compile Include="Data\ITransactionalPreprocessingData.cs" />111 106 <Compile Include="Plugin.cs" /> 112 107 <Compile Include="Properties\AssemblyInfo.cs" /> -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/PreprocessingContext.cs ¶
r15242 r15535 71 71 if (namedSource != null) 72 72 Name = "Preprocessing " + namedSource.Name; 73 Data = new FilteredPreprocessingData(new TransactionalPreprocessingData(problemData));73 Data = new FilteredPreprocessingData(new PreprocessingData(problemData)); 74 74 OnReset(); 75 75 // Reset GUI: -
TabularUnified stable/HeuristicLab.DataPreprocessing/3.4/PreprocessingTransformator.cs ¶
r15142 r15535 29 29 namespace HeuristicLab.DataPreprocessing { 30 30 public class PreprocessingTransformator { 31 private readonly I TransactionalPreprocessingData preprocessingData;31 private readonly IPreprocessingData preprocessingData; 32 32 33 33 private readonly IDictionary<string, IList<double>> originalColumns; … … 36 36 37 37 public PreprocessingTransformator(IPreprocessingData preprocessingData) { 38 this.preprocessingData = (ITransactionalPreprocessingData)preprocessingData;38 this.preprocessingData = preprocessingData; 39 39 originalColumns = new Dictionary<string, IList<double>>(); 40 40 renamedColumns = new Dictionary<string, string>(); … … 68 68 preprocessingData.Undo(); 69 69 } 70 } 71 catch (Exception e) { 70 } catch (Exception e) { 72 71 preprocessingData.Undo(); 73 72 if (string.IsNullOrEmpty(errorMsg)) errorMsg = e.Message; 74 } 75 finally { 73 } finally { 76 74 preprocessingData.EndTransaction(); 77 75 }
Note: See TracChangeset
for help on using the changeset viewer.