Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/18/17 16:17:39 (6 years ago)
Author:
pfleck
Message:

#2809: merged r15518,r15534 to stable

Location:
stable
Files:
16 edited
1 copied

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.DataPreprocessing

  • stable/HeuristicLab.DataPreprocessing/3.4

  • stable/HeuristicLab.DataPreprocessing/3.4/Content/CorrelationMatrixContent.cs

    r15242 r15535  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2526using HeuristicLab.Problems.DataAnalysis;
    2627
    2728namespace HeuristicLab.DataPreprocessing {
    2829  [Item("Feature Correlation Matrix", "Represents the feature correlation matrix.")]
    29   public class CorrelationMatrixContent : Item, IViewShortcut {
     30  [StorableClass]
     31  public class CorrelationMatrixContent : PreprocessingContent, IViewShortcut {
    3032    public static new Image StaticItemImage {
    3133      get { return HeuristicLab.Common.Resources.VSImageLibrary.Gradient; }
    3234    }
    3335
     36    [Storable]
    3437    public PreprocessingContext Context { get; private set; }
    35     public ITransactionalPreprocessingData PreprocessingData {
    36       get { return Context.Data; }
    37     }
     38
    3839
    3940    public DataAnalysisProblemData ProblemData {
     
    4748    }
    4849
    49     public CorrelationMatrixContent(PreprocessingContext context) {
     50    #region Constructor, Cloning & Persistence
     51    public CorrelationMatrixContent(PreprocessingContext context)
     52      : base(context.Data) {
    5053      Context = context;
    5154    }
     
    5558      Context = original.Context;
    5659    }
    57 
    5860    public override IDeepCloneable Clone(Cloner cloner) {
    5961      return new CorrelationMatrixContent(this, cloner);
    6062    }
     63
     64    [StorableConstructor]
     65    protected CorrelationMatrixContent(bool deserializing)
     66      : base(deserializing) { }
     67    #endregion
    6168
    6269    public event DataPreprocessingChangedEventHandler Changed {
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/DataCompletenessChartContent.cs

    r15242 r15535  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2526
    2627namespace HeuristicLab.DataPreprocessing {
    2728  [Item("Data Completeness Chart", "Represents a datacompleteness chart.")]
    28 
    29   public class DataCompletenessChartContent : Item, IViewShortcut {
     29  [StorableClass]
     30  public class DataCompletenessChartContent : PreprocessingContent, IViewShortcut {
    3031    public static new Image StaticItemImage {
    3132      get { return HeuristicLab.Common.Resources.VSImageLibrary.EditBrightnessContrast; }
    3233    }
    3334
    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) {
    3838    }
    3939
    4040    public DataCompletenessChartContent(DataCompletenessChartContent content, Cloner cloner)
    4141      : base(content, cloner) {
    42       SearchLogic = content.SearchLogic;
    4342    }
    44 
    4543    public override IDeepCloneable Clone(Cloner cloner) {
    4644      return new DataCompletenessChartContent(this, cloner);
    4745    }
     46
     47    [StorableConstructor]
     48    protected DataCompletenessChartContent(bool deserializing)
     49      : base(deserializing) { }
     50    #endregion
    4851  }
    4952}
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/DataGridContent.cs

    r15242 r15535  
    2727using HeuristicLab.Core;
    2828using HeuristicLab.Data;
     29using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     30using HeuristicLab.Random;
    2931
    3032namespace HeuristicLab.DataPreprocessing {
    31 
    3233  [Item("Data Grid", "Represents a data grid.")]
    33   public class DataGridContent : Item, IStringConvertibleMatrix, IViewShortcut {
     34  [StorableClass]
     35  public class DataGridContent : PreprocessingContent, IStringConvertibleMatrix, IViewShortcut {
    3436    public static new Image StaticItemImage {
    3537      get { return HeuristicLab.Common.Resources.VSImageLibrary.Table; }
    3638    }
    3739
    38     public ITransactionalPreprocessingData PreProcessingData { get; private set; }
    39 
    40     public ManipulationLogic ManipulationLogic { get; private set; }
    41     public FilterLogic FilterLogic { get; private set; }
    42 
    4340    public int Rows {
    44       get { return PreProcessingData.Rows; }
     41      get { return PreprocessingData.Rows; }
    4542      set { }
    4643    }
    4744
    4845    public int Columns {
    49       get { return PreProcessingData.Columns; }
     46      get { return PreprocessingData.Columns; }
    5047      set { }
    5148    }
    5249
    5350    public IEnumerable<string> ColumnNames {
    54       get { return PreProcessingData.VariableNames; }
     51      get { return PreprocessingData.VariableNames; }
    5552      set { }
    5653    }
     
    7168
    7269    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) {
    8681    }
    8782    public override IDeepCloneable Clone(Cloner cloner) {
     
    8984    }
    9085
     86    [StorableConstructor]
     87    protected DataGridContent(bool deserializing)
     88      : base(deserializing) { }
     89    #endregion
     90
    9191    public void DeleteRows(IEnumerable<int> rows) {
    92       PreProcessingData.DeleteRowsWithIndices(rows);
     92      PreprocessingData.DeleteRowsWithIndices(rows);
    9393    }
    9494
    9595    public void DeleteColumn(int column) {
    96       PreProcessingData.DeleteColumn(column);
     96      PreprocessingData.DeleteColumn(column);
    9797    }
    9898
    9999    public bool Validate(string value, out string errorMessage, int columnIndex) {
    100       return PreProcessingData.Validate(value, out errorMessage, columnIndex);
     100      return PreprocessingData.Validate(value, out errorMessage, columnIndex);
    101101    }
    102102
    103103    public string GetValue(int rowIndex, int columnIndex) {
    104       return PreProcessingData.GetCellAsString(columnIndex, rowIndex);
     104      return PreprocessingData.GetCellAsString(columnIndex, rowIndex);
    105105    }
    106106
    107107    public bool SetValue(string value, int rowIndex, int columnIndex) {
    108       return PreProcessingData.SetValue(value, columnIndex, rowIndex);
     108      return PreprocessingData.SetValue(value, columnIndex, rowIndex);
    109109    }
    110110
    111111    public event DataPreprocessingChangedEventHandler Changed {
    112       add { PreProcessingData.Changed += value; }
    113       remove { PreProcessingData.Changed -= value; }
     112      add { PreprocessingData.Changed += value; }
     113      remove { PreprocessingData.Changed -= value; }
    114114    }
    115115
     
    132132#pragma warning restore 0067
    133133    #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
    134347  }
    135348}
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/FilterContent.cs

    r15242 r15535  
    2020#endregion
    2121
     22using System.Collections.Generic;
    2223using System.Drawing;
     24using System.Linq;
    2325using HeuristicLab.Common;
    2426using HeuristicLab.Core;
    2527using HeuristicLab.DataPreprocessing.Filter;
     28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2629
    2730namespace HeuristicLab.DataPreprocessing {
    2831  [Item("Filter", "Represents the filter grid.")]
    29   public class FilterContent : Item, IViewShortcut {
     32  [StorableClass]
     33  public class FilterContent : PreprocessingContent, IViewShortcut {
    3034    public static new Image StaticItemImage {
    3135      get { return HeuristicLab.Common.Resources.VSImageLibrary.Filter; }
    3236    }
    33 
    34     public FilterLogic FilterLogic { get; private set; }
    35 
     37    [Storable]
    3638    public ICheckedItemCollection<IFilter> Filters { get; private set; }
    3739
     40    [Storable]
    3841    public bool IsAndCombination { get; set; }
    3942
    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) {
    4171      Filters = new CheckedItemCollection<IFilter>();
    4272      IsAndCombination = true;
    43       FilterLogic = filterLogic;
    4473    }
    4574
    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;
    4879    }
    49 
    5080    public override IDeepCloneable Clone(Cloner cloner) {
    5181      return new FilterContent(this, cloner);
    5282    }
     83
     84    [StorableConstructor]
     85    protected FilterContent(bool deserializing)
     86      : base(deserializing) { }
     87    #endregion
    5388  }
    5489}
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/HistogramContent.cs

    r15242 r15535  
    2626using HeuristicLab.Common;
    2727using HeuristicLab.Core;
     28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2829
    2930namespace HeuristicLab.DataPreprocessing {
    3031  [Item("Histogram", "Represents the histogram grid.")]
     32  [StorableClass]
    3133  public class HistogramContent : PreprocessingChartContent {
    3234    public static new Image StaticItemImage {
     
    3436    }
    3537
     38    [Storable]
    3639    public string GroupingVariableName { get; set; }
    3740
     41    [Storable]
    3842    public int Bins { get; set; }
     43    [Storable]
    3944    public bool ExactBins { get; set; }
    4045
     46    [Storable]
    4147    public LegendOrder Order { get; set; }
    4248
     49    #region Constructor, Cloning & Persistence
    4350    public HistogramContent(IFilteredPreprocessingData preprocessingData)
    4451      : base(preprocessingData) {
     
    4754    }
    4855
    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;
    5162    }
    5263    public override IDeepCloneable Clone(Cloner cloner) {
    5364      return new HistogramContent(this, cloner);
    5465    }
     66
     67    [StorableConstructor]
     68    protected HistogramContent(bool deserializing)
     69      : base(deserializing) { }
     70    #endregion
    5571
    5672    public static DataTable CreateHistogram(IFilteredPreprocessingData preprocessingData, string variableName, string groupingVariableName, DataTableVisualProperties.DataTableHistogramAggregation aggregation, LegendOrder legendOrder = LegendOrder.Alphabetically) {
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/LineChartContent.cs

    r15242 r15535  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2526
    2627namespace HeuristicLab.DataPreprocessing {
    27 
    2828  [Item("Line Chart", "Represents the line chart grid.")]
     29  [StorableClass]
    2930  public class LineChartContent : PreprocessingChartContent {
    30     public bool AllInOneMode { get; set; }
    31 
    3231    public static new Image StaticItemImage {
    3332      get { return HeuristicLab.Common.Resources.VSImageLibrary.Performance; }
    3433    }
    3534
     35    [Storable]
     36    public bool AllInOneMode { get; set; }
     37
     38
     39    #region Constructor, Cloning & Persistence
    3640    public LineChartContent(IFilteredPreprocessingData preprocessingData)
    3741      : base(preprocessingData) {
     
    3943    }
    4044
    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;
    4448    }
    4549    public override IDeepCloneable Clone(Cloner cloner) {
    4650      return new LineChartContent(this, cloner);
    4751    }
     52
     53    [StorableConstructor]
     54    protected LineChartContent(bool deserializing)
     55      : base(deserializing) { }
     56    #endregion
    4857  }
    4958}
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/ManipulationContent.cs

    r15242 r15535  
    2020#endregion
    2121
     22using System;
     23using System.Collections.Generic;
    2224using System.Drawing;
     25using System.Linq;
    2326using HeuristicLab.Common;
    2427using HeuristicLab.Core;
     28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2529
    2630namespace HeuristicLab.DataPreprocessing {
    27 
    2831  [Item("Manipulation", "Represents the available manipulations on a data set.")]
    29   public class ManipulationContent : Item, IViewShortcut {
     32  [StorableClass]
     33  public class ManipulationContent : PreprocessingContent, IViewShortcut {
    3034    public static new Image StaticItemImage {
    3135      get { return HeuristicLab.Common.Resources.VSImageLibrary.Method; }
    3236    }
    3337
    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) {
    4241    }
    4342
    44     public ManipulationContent(ManipulationContent content, Cloner cloner) : base(content, cloner) { }
    45 
     43    public ManipulationContent(ManipulationContent original, Cloner cloner) :
     44      base(original, cloner) {
     45    }
    4646    public override IDeepCloneable Clone(Cloner cloner) {
    4747      return new ManipulationContent(this, cloner);
    4848    }
     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    }
    49125  }
    50126}
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/MultiScatterPlotContent.cs

    r15242 r15535  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2526
    2627namespace HeuristicLab.DataPreprocessing {
    27 
    2828  [Item("Multi Scatter Plot", "Represents a multi scatter plot.")]
     29  [StorableClass]
    2930  public class MultiScatterPlotContent : ScatterPlotContent {
    3031    public static new Image StaticItemImage {
     
    3233    }
    3334
     35    #region Constructor, Cloning & Persistence
    3436    public MultiScatterPlotContent(IFilteredPreprocessingData preprocessingData)
    3537      : base(preprocessingData) {
    3638    }
    3739
    38     public MultiScatterPlotContent(MultiScatterPlotContent content, Cloner cloner)
    39       : base(content, cloner) {
     40    public MultiScatterPlotContent(MultiScatterPlotContent original, Cloner cloner)
     41      : base(original, cloner) {
    4042    }
    41 
    4243    public override IDeepCloneable Clone(Cloner cloner) {
    4344      return new MultiScatterPlotContent(this, cloner);
    4445    }
     46
     47    [StorableConstructor]
     48    protected MultiScatterPlotContent(bool deserializing)
     49      : base(deserializing) { }
     50    #endregion
    4551  }
    4652}
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/PreprocessingChartContent.cs

    r15242 r15535  
    2929using HeuristicLab.Core;
    3030using HeuristicLab.Data;
     31using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    3132
    3233namespace HeuristicLab.DataPreprocessing {
    3334  [Item("PreprocessingChart", "Represents a preprocessing chart.")]
    34   public class PreprocessingChartContent : Item, IViewShortcut {
     35  [StorableClass]
     36  public class PreprocessingChartContent : PreprocessingContent, IViewShortcut {
    3537    public enum LegendOrder {
    3638      Alphabetically,
     
    4244    }
    4345
    44     private ICheckedItemList<StringValue> variableItemList = null;
     46    [Storable]
     47    private ICheckedItemList<StringValue> variableItemList;
    4548    public ICheckedItemList<StringValue> VariableItemList {
    4649      get {
    4750        if (variableItemList == null)
    4851          variableItemList = CreateVariableItemList(PreprocessingData);
    49         return this.variableItemList;
     52        return variableItemList;
    5053      }
    5154    }
    5255
    53     public IFilteredPreprocessingData PreprocessingData { get; private set; }
    5456    public event DataPreprocessingChangedEventHandler Changed {
    5557      add { PreprocessingData.Changed += value; }
     
    5759    }
    5860
    59     public PreprocessingChartContent(IFilteredPreprocessingData preprocessingData) {
    60       PreprocessingData = preprocessingData;
     61    #region Constructor, Cloning & Persistence
     62    public PreprocessingChartContent(IFilteredPreprocessingData preprocessingData)
     63       : base(preprocessingData) {
    6164    }
    6265
    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);
    6769    }
    6870    public override IDeepCloneable Clone(Cloner cloner) {
    6971      return new PreprocessingChartContent(this, cloner);
    7072    }
     73
     74    [StorableConstructor]
     75    protected PreprocessingChartContent(bool deserializing)
     76      : base(deserializing) { }
     77    #endregion
    7178
    7279    public DataRow CreateDataRow(string variableName, DataRowVisualProperties.DataRowChartType chartType) {
     
    7582
    7683    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      };
    8091      return row;
    8192    }
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/ScatterPlotContent.cs

    r15242 r15535  
    2525using HeuristicLab.Analysis;
    2626using HeuristicLab.Common;
     27using HeuristicLab.Core;
     28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2729using HeuristicLab.Visualization.ChartControlsExtensions;
    2830
    2931namespace HeuristicLab.DataPreprocessing {
    30 
     32  [Item("ScatterPlotContent", "")]
     33  [StorableClass]
    3134  public abstract class ScatterPlotContent : PreprocessingChartContent {
     35    [Storable]
    3236    public string GroupingVariable { get; set; }
    3337
     38    #region Constructor, Cloning & Persistence
    3439    protected ScatterPlotContent(IFilteredPreprocessingData preprocessingData)
    3540      : base(preprocessingData) {
    3641    }
    3742
    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;
    4046    }
     47
     48    [StorableConstructor]
     49    protected ScatterPlotContent(bool deserializing)
     50      : base(deserializing) { }
     51    #endregion
    4152
    4253    public static ScatterPlot CreateScatterPlot(IFilteredPreprocessingData preprocessingData, string variableNameX, string variableNameY, string variableNameGroup = "-", LegendOrder legendOrder = LegendOrder.Alphabetically) {
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/SingleScatterPlotContent.cs

    r15242 r15535  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2526
    2627namespace HeuristicLab.DataPreprocessing {
    27 
    2828  [Item("Scatter Plot", "Represents a scatter plot.")]
     29  [StorableClass]
    2930  public class SingleScatterPlotContent : ScatterPlotContent {
    3031    public static new Image StaticItemImage {
     
    3233    }
    3334
     35    [Storable]
    3436    public string SelectedXVariable { get; set; }
     37    [Storable]
    3538    public string SelectedYVariable { get; set; }
    3639
     40    #region Constructor, Cloning & Persistence
    3741    public SingleScatterPlotContent(IFilteredPreprocessingData preprocessingData)
    3842      : base(preprocessingData) {
    3943    }
    4044
    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;
    4649    }
    47 
    4850    public override IDeepCloneable Clone(Cloner cloner) {
    4951      return new SingleScatterPlotContent(this, cloner);
    5052    }
     53
     54    [StorableConstructor]
     55    protected SingleScatterPlotContent(bool deserializing)
     56      : base(deserializing) { }
     57    #endregion
    5158  }
    5259}
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/StatisticsContent.cs

    r15242 r15535  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2526
    2627namespace HeuristicLab.DataPreprocessing {
    2728  [Item("Statistics", "Represents the statistics grid.")]
    28   public class StatisticsContent : Item, IViewShortcut {
     29  [StorableClass]
     30  public class StatisticsContent : PreprocessingContent, IViewShortcut {
    2931    public static new Image StaticItemImage {
    3032      get { return HeuristicLab.Common.Resources.VSImageLibrary.Object; }
    3133    }
    3234
    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) {
    3938    }
    4039
    41     public StatisticsContent(StatisticsContent content, Cloner cloner)
    42       : base(content, cloner) {
     40    public StatisticsContent(StatisticsContent original, Cloner cloner)
     41      : base(original, cloner) {
    4342    }
    44 
    4543    public override IDeepCloneable Clone(Cloner cloner) {
    4644      return new StatisticsContent(this, cloner);
    4745    }
    4846
     47    [StorableConstructor]
     48    protected StatisticsContent(bool deserializing)
     49      : base(deserializing) { }
     50    #endregion
     51
    4952    public event DataPreprocessingChangedEventHandler Changed {
    50       add { StatisticsLogic.Changed += value; }
    51       remove { StatisticsLogic.Changed -= value; }
     53      add { PreprocessingData.Changed += value; }
     54      remove { PreprocessingData.Changed -= value; }
    5255    }
    5356  }
  • stable/HeuristicLab.DataPreprocessing/3.4/Content/TransformationContent.cs

    r15242 r15535  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2526using HeuristicLab.Problems.DataAnalysis;
    2627
    2728namespace HeuristicLab.DataPreprocessing {
    2829  [Item("Transformation", "Represents the transformation grid.")]
    29   public class TransformationContent : Item, IViewShortcut {
     30  [StorableClass]
     31  public class TransformationContent : PreprocessingContent, IViewShortcut {
    3032    public static new Image StaticItemImage {
    3133      get { return HeuristicLab.Common.Resources.VSImageLibrary.Method; }
    3234    }
    3335
    34     public IPreprocessingData Data { get; private set; }
    35     public FilterLogic FilterLogic { get; private set; }
    36 
     36    [Storable]
    3737    public ICheckedItemList<ITransformation> CheckedTransformationList { get; private set; }
    3838
    39     public TransformationContent(IPreprocessingData data, FilterLogic filterLogic) {
    40       Data = data;
     39    #region Constructor, Cloning & Persistence
     40    public TransformationContent(IFilteredPreprocessingData preprocessingData)
     41      : base(preprocessingData) {
    4142      CheckedTransformationList = new CheckedItemList<ITransformation>();
    42       FilterLogic = filterLogic;
    4343    }
    4444
    4545    public TransformationContent(TransformationContent original, Cloner cloner)
    4646      : base(original, cloner) {
    47       Data = original.Data;
    48       CheckedTransformationList = new CheckedItemList<ITransformation>(original.CheckedTransformationList);
     47      CheckedTransformationList = cloner.Clone(original.CheckedTransformationList);
    4948    }
    50 
    5149    public override IDeepCloneable Clone(Cloner cloner) {
    5250      return new TransformationContent(this, cloner);
    5351    }
     52
     53    [StorableConstructor]
     54    protected TransformationContent(bool deserializing)
     55      : base(deserializing) { }
     56    #endregion
    5457  }
    5558}
Note: See TracChangeset for help on using the changeset viewer.