Changeset 8877 for trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs
- Timestamp:
- 11/07/12 16:28:33 (11 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis
- Property svn:mergeinfo changed
-
trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs
r8598 r8877 23 23 using System.Collections; 24 24 using System.Collections.Generic; 25 using System.Globalization; 26 using System.IO; 25 27 using System.Linq; 28 using System.Text; 26 29 using HeuristicLab.Problems.DataAnalysis; 30 using HeuristicLab.Random; 27 31 28 32 namespace HeuristicLab.Problems.Instances.DataAnalysis { 29 public abstract class DataAnalysisInstanceProvider<TData> : ProblemInstanceProvider<TData> 30 where TData : class, IDataAnalysisProblemData { 33 public abstract class DataAnalysisInstanceProvider<TData, ImportType> : ProblemInstanceProvider<TData> 34 where TData : class, IDataAnalysisProblemData 35 where ImportType : DataAnalysisImportType { 31 36 32 37 // has to be implemented, if CanImportData is true 33 public virtual TData ImportData(string path, DataAnalysisImportType type) { 34 throw new NotSupportedException(); 38 public TData ImportData(string path, ImportType type) { 39 TableFileParser csvFileParser = new TableFileParser(); 40 csvFileParser.Parse(path); 41 return ImportData(path, type, csvFileParser); 35 42 } 43 public TData ImportData(string path, ImportType type, DataAnalysisCSVFormat csvFormat) { 44 TableFileParser csvFileParser = new TableFileParser(); 45 csvFileParser.Parse(path, csvFormat.NumberFormatInfo, csvFormat.DateTimeFormatInfo, csvFormat.Separator); 46 return ImportData(path, type, csvFileParser); 47 } 48 49 protected abstract TData ImportData(string path, ImportType type, TableFileParser csvFileParser); 36 50 37 51 protected List<IList> Shuffle(List<IList> values) { 38 52 int count = values.First().Count; 39 int[] indices = GetRandomIndices(count);53 int[] indices = Enumerable.Range(0, count).Shuffle(new FastRandom()).ToArray(); 40 54 List<IList> shuffeledValues = new List<IList>(values.Count); 41 55 for (int col = 0; col < values.Count; col++) { … … 57 71 } 58 72 59 //Fisher–Yates shuffle 60 private int[] GetRandomIndices(int amount) { 61 int[] randomIndices = Enumerable.Range(0, amount).ToArray(); 62 System.Random rand = new System.Random(); 63 int n = amount; 64 while (n > 1) { 65 n--; 66 int k = rand.Next(n + 1); 67 int value = randomIndices[k]; 68 randomIndices[k] = randomIndices[n]; 69 randomIndices[n] = value; 73 public override bool CanExportData { 74 get { return true; } 75 } 76 public override void ExportData(TData instance, string path) { 77 var strBuilder = new StringBuilder(); 78 var colSep = CultureInfo.CurrentCulture.TextInfo.ListSeparator; 79 foreach (var variable in instance.Dataset.VariableNames) { 80 strBuilder.Append(variable.Replace(colSep, String.Empty) + colSep); 70 81 } 71 return randomIndices; 82 strBuilder.Remove(strBuilder.Length - colSep.Length, colSep.Length); 83 strBuilder.AppendLine(); 84 85 var dataset = instance.Dataset; 86 87 for (int i = 0; i < dataset.Rows; i++) { 88 for (int j = 0; j < dataset.Columns; j++) { 89 if (j > 0) strBuilder.Append(colSep); 90 strBuilder.Append(dataset.GetValue(i, j)); 91 } 92 strBuilder.AppendLine(); 93 } 94 95 using (var writer = new StreamWriter(path)) { 96 writer.Write(strBuilder); 97 } 72 98 } 73 99 }
Note: See TracChangeset
for help on using the changeset viewer.