Changeset 17980 for branches/2719_HeuristicLab.DatastreamAnalysis/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs
- Timestamp:
- 05/10/21 09:48:16 (3 years ago)
- Location:
- branches/2719_HeuristicLab.DatastreamAnalysis
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2719_HeuristicLab.DatastreamAnalysis
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
/branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis merged eligible /branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis merged eligible /trunk/HeuristicLab.Problems.DataAnalysis merged eligible /branches/3073_IA_constraint_splitting_reintegration/HeuristicLab.Problems.DataAnalysis 17885-17900 /branches/3105_PythonFormatter/HeuristicLab.Problems.DataAnalysis 17842-17921
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
-
branches/2719_HeuristicLab.DatastreamAnalysis/HeuristicLab.Problems.DataAnalysis
- Property svn:mergeinfo changed
-
branches/2719_HeuristicLab.DatastreamAnalysis/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs
r15866 r17980 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-2018Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 25 25 using System.Collections.ObjectModel; 26 26 using System.Linq; 27 using HEAL.Attic; 27 28 using HeuristicLab.Common; 28 29 using HeuristicLab.Core; 29 30 using HeuristicLab.Data; 30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;31 31 32 32 namespace HeuristicLab.Problems.DataAnalysis { 33 33 [Item("Dataset", "Represents a dataset containing data that should be analyzed.")] 34 [Storable Class]34 [StorableType("49F4D145-50D7-4497-8D8A-D190CD556CC8")] 35 35 public class Dataset : NamedItem, IDataset { 36 36 [StorableConstructor] 37 protected Dataset( bool deserializing) : base(deserializing) { }37 protected Dataset(StorableConstructorFlag _) : base(_) { } 38 38 protected Dataset(Dataset original, Cloner cloner) 39 39 : base(original, cloner) { … … 115 115 } 116 116 117 public static Dataset FromRowData(IEnumerable<string> variableNames, double[,] data) { 118 var colWise = new List<IList>(data.GetLength(1)); 119 for (var col = 0; col < data.GetLength(1); col++) { 120 var column = new List<double>(data.GetLength(0)); 121 for (var row = 0; row < data.GetLength(0); row++) { 122 column.Add(data[row, col]); 123 } 124 colWise.Add(column); 125 } 126 return new Dataset(variableNames, colWise); 127 } 128 129 public static Dataset FromRowData(IEnumerable<string> variableNames, IEnumerable<IList> data) { 130 var vnames = variableNames.ToList(); 131 var transposed = new List<IList>(); 132 var iter = data.GetEnumerator(); 133 if (!iter.MoveNext()) throw new ArgumentException("Data does not contain any rows", nameof(data)); 134 for (var i = 0; i < iter.Current.Count; i++) { 135 if (i >= vnames.Count) throw new ArgumentException("There are more variables in data, than variable names.", nameof(variableNames)); 136 if (iter.Current[i] == null) throw new ArgumentException("Null values are not supported.", nameof(data)); 137 if (!IsAllowedType(iter.Current[i].GetType())) throw new ArgumentException("Data contains types that are not allowed.", nameof(data)); 138 if (iter.Current[i] is double d) 139 transposed.Add(new List<double>() { d }); 140 else if (iter.Current[i] is DateTime dt) 141 transposed.Add(new List<DateTime>() { dt }); 142 else if (iter.Current[i] is string s) 143 transposed.Add(new List<string>() { s }); 144 else throw new NotSupportedException(string.Format("Variable {0} has type {1}. This is not supported when converting from row-wise data.", vnames[i], iter.Current[i].GetType())); 145 } 146 if (transposed.Count < vnames.Count) throw new ArgumentException("There are less variables in data, than variable names.", nameof(variableNames)); 147 while (iter.MoveNext()) { 148 for (var i = 0; i < iter.Current.Count; i++) 149 if (transposed[i].Add(iter.Current[i]) < 0) 150 throw new ArgumentException(string.Format("Variable {0} has invalid value ({1})", vnames[i], iter.Current[i]), nameof(data)); 151 } 152 return new Dataset(vnames, transposed); 153 } 154 117 155 public ModifiableDataset ToModifiable() { 118 var values = new List<IList>(); 119 foreach (var v in variableNames) { 120 if (VariableHasType<double>(v)) { 121 values.Add(new List<double>((IList<double>)variableValues[v])); 122 } else if (VariableHasType<string>(v)) { 123 values.Add(new List<string>((IList<string>)variableValues[v])); 124 } else if (VariableHasType<DateTime>(v)) { 125 values.Add(new List<DateTime>((IList<DateTime>)variableValues[v])); 126 } else { 127 throw new ArgumentException("Unknown variable type."); 128 } 129 } 130 return new ModifiableDataset(variableNames, values); 156 return new ModifiableDataset(variableNames, variableNames.Select(v => variableValues[v]), true); 131 157 } 132 158 … … 141 167 } 142 168 143 protected Dataset(Dataset dataset) : this(dataset.variableNames, dataset.variableValues.Values) { } 169 144 170 145 171 #region Backwards compatible code, remove with 3.5 146 172 private double[,] storableData; 147 //name alias used to supp port backwards compatibility148 [Storable( Name = "data", AllowOneWay = true)]173 //name alias used to support backwards compatibility 174 [Storable(OldName = "data")] 149 175 private double[,] StorableData { set { storableData = value; } } 150 176 … … 179 205 } 180 206 } 207 208 public bool ContainsVariable(string variableName) { 209 return variableValues.ContainsKey(variableName); 210 } 181 211 public IEnumerable<string> DoubleVariables { 182 212 get { return variableValues.Where(p => p.Value is IList<double>).Select(p => p.Key); } … … 318 348 #region IStringConvertibleMatrix Members 319 349 [Storable] 320 pr otectedint rows;350 private int rows; 321 351 public int Rows { 322 352 get { return rows; } 353 protected set { rows = value; } 323 354 } 324 355 int IStringConvertibleMatrix.Rows {
Note: See TracChangeset
for help on using the changeset viewer.