/
Database.cs
83 lines (61 loc) · 2.44 KB
/
Database.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections;
using System.Collections.Generic;
using Whetstone;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace TextCharacteristicLearner
{
public class DiscreteSeriesDatabase<Ty> : IEnumerable<DiscreteEventSeries<Ty>>//TODO: Rename DiscreteEventSeriesDatabase
{
public List<DiscreteEventSeries<Ty>> data;
public DiscreteSeriesDatabase ()
{
data = new List<DiscreteEventSeries<Ty>>(); //TODO empty set
}
public DiscreteSeriesDatabase(List<DiscreteEventSeries<Ty>> data){
this.data = data;
}
public DiscreteSeriesDatabase(IEnumerable<DiscreteEventSeries<Ty>> data)
{
this.data = data.ToList ();
}
public IEnumerable<string> getLabelCriteria(){
return data.SelectMany (a => a.labels.Keys).Distinct();
}
public IEnumerable<string> getLabelClasses(string criterion){
return data.Select (a => a.labels.GetWithDefault (criterion, "[none]")).Distinct ();
}
//Creator functions, make a new database from an existing one.
public DiscreteSeriesDatabase<Ty> Filter(Predicate<DiscreteEventSeries<Ty>> filter){
return new DiscreteSeriesDatabase<Ty>(data.Where (item => filter(item)));
}
public DiscreteSeriesDatabase<Ty> FilterForCriterion(string criterion){
return Filter (item => item.labels.ContainsKey(criterion));
}
public DiscreteSeriesDatabase<Ty> FilterForCriterion(string criterion, string value){
return Filter (item => item.labels.GetWithDefault(criterion) == value);
}
public Tuple<DiscreteSeriesDatabase<Ty>, DiscreteSeriesDatabase<Ty>> SplitDatabase(double frac){
DiscreteEventSeries<Ty>[] shuffled = data.Shuffle ();
Tuple<List<DiscreteEventSeries<Ty>>, List<DiscreteEventSeries<Ty>>> split = shuffled.SplitToLists((int)(frac * shuffled.Length));
return new Tuple<DiscreteSeriesDatabase<Ty>, DiscreteSeriesDatabase<Ty>>(new DiscreteSeriesDatabase<Ty>(split.Item1), new DiscreteSeriesDatabase<Ty>(split.Item2));
}
//Helpful functions
public int TotalItemCount(){ //TODO: Unnecessary with change to IEnumerable.
return data.TotalItemCount();
}
public string[] CriterionClasses(string criterion){
return data.Map (item => item.labels.GetWithDefault (criterion, "[none]")).Distinct ().ToArray ();
}
//IEnumerable
public IEnumerator<DiscreteEventSeries<Ty>> GetEnumerator(){
return data.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator(){
return GetEnumerator ();
}
}
}