public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { SequenceMultiSelectParameter others = args[0] as SequenceMultiSelectParameter; List <TimeSeriesValues> sequences = new List <TimeSeriesValues>(); sequences.Add(env.SelectedSequence.Values); sequences.AddRange(others.Value.Select(d => d.Values)); List <string> columnNames = new List <string>(); int sequenceIndex = 0; foreach (TimeSeriesValues sequence in sequences) { sequenceIndex++; foreach (string name in sequence.ColumnNames) { columnNames.Add(string.Format("{0}.{1}", sequenceIndex, name)); } } TimeSeriesValues values = new TimeSeriesValues(columnNames); foreach (var pair in TimeSeriesValuesCalculation.EnumerateCompositeSequences(sequences)) { values[pair.Key] = pair.Value; } return(new SequenceData(values, null, PathEx.GiveName("Composite", new string[] { env.SelectedSequence.Title }.Union(others.Value.Select(d => d.Title))))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { decimal hz = ((NumberParameter)args[0]).Value; SequenceData ret = new SequenceData(TimeSeriesValuesCalculation.GetResampled(env.SelectedSequence.Values, 1M / hz), new LabelingBorders(env.SelectedSequence.Borders), PathEx.GiveName("Resampled", env.SelectedSequence.Title, hz.ToString())); ret.Type = SequenceType.Numeric; return(ret); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var sequence = TimeSeriesValuesCalculation.Differentiate(env.SelectedSequence.Values); sequence.SetColumnNames(env.SelectedSequence.Values.ColumnNames.Select(n => "Diff " + n)); SequenceData ret = new SequenceData(sequence, null, PathEx.GiveName("Diff", env.SelectedSequence.Title)); ret.Type = SequenceType.Numeric; return(ret); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var sequence = TimeSeriesValuesCalculation.AbsoluteLength(env.SelectedSequence.Values); sequence.ColumnNames[0] = "Abs Value"; SequenceData ret = new SequenceData(sequence, null, PathEx.GiveName("Abs", env.SelectedSequence.Title)); ret.Type = SequenceType.Numeric; return(ret); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var keepEmpty = args[0] as BooleanParameter; var sequence = TimeSeriesValuesCalculation.AverageFlat(env.SelectedSequence.Values, keepEmpty.Value); sequence.SetColumnNames(env.SelectedSequence.Values.ColumnNames.Select(n => "Avg " + n)); SequenceData ret = new SequenceData(sequence, null, PathEx.GiveName("Average", env.SelectedSequence.Title)); ret.Type = SequenceType.Numeric; return(ret); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var timeBefore = ((NumberParameter)args[0]).Value; var timeAfter = ((NumberParameter)args[1]).Value; var exclude = ((NumberParameter)args[2]).Value; var sequence = TimeSeriesValuesCalculation.TimeSmooth(env.SelectedSequence.Values, timeBefore + timeAfter, -timeAfter, exclude); SequenceData ret = new SequenceData(sequence, new LabelingBorders(env.SelectedSequence.Borders), PathEx.GiveName("Smooth", env.SelectedSequence.Title)); ret.Type = SequenceType.Numeric; return(ret); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var stddev = ((NumberParameter)args[0]).Value; var details = (int)((NumberParameter)args[1]).Value; var exclude = ((NumberParameter)args[2]).Value; var sequence = TimeSeriesValuesCalculation.Gaussian(env.SelectedSequence.Values, stddev, details, exclude); sequence.SetColumnNames(env.SelectedSequence.Values.ColumnNames.Select(n => "Gauss " + n).ToArray()); SequenceData ret = new SequenceData(sequence, new LabelingBorders(env.SelectedSequence.Borders), PathEx.GiveName("Gaussian", env.SelectedSequence.Title, stddev.ToString())); ret.Type = SequenceType.Numeric; return(ret); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var operand = args[0] as SequenceMultiSelectParameter; var sep = args[1] as StringParameter; var useEmpty = args[2] as BooleanParameter; List <SequenceData> sequences = new List <SequenceData>(); sequences.Add(env.SelectedSequence); sequences.AddRange(operand.Value); ICSLabelSequence ret = new ICSLabelSequence(); var timeList = TimeSeriesValuesCalculation.MergeTimeList(sequences.Select(p => p.Values)).ToList(); if (timeList.Count != 0) { var lastTime = timeList.Last(); foreach (var time in timeList) { if (time < lastTime) { StringBuilder tmp = new StringBuilder(); bool empty = true; foreach (var sequence in sequences) { var label = sequence.GetLabelAt(time); if (label != "" || useEmpty.Value) { if (!empty) { tmp.Append(sep.Value); } tmp.Append(label); empty = false; } } ret.SetLabel(time, lastTime, tmp.ToString()); } } } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("Product", sequences.Select(p => p.Title)))); }
public static ICSLabelSequence ToLabelByCondition(IList <SequenceData> sequences, Func <decimal?[], int> cond) { var timeList = TimeSeriesValuesCalculation.MergeTimeList(sequences.Select(p => p.Values)).ToList(); var ret = new ICSLabelSequence(); int prevKey = 0; int prevIndex = -1; for (int key = 1; key < timeList.Count - 1; key++) { var values = sequences.Select(s => s.Values[timeList[key]][s.Borders.TargetColumnIndex]).ToArray(); int index = cond(values); if (prevIndex != index) { if (prevIndex >= 0 && prevIndex < sequences.Count) { ret.SetLabel(timeList[prevKey], timeList[key], sequences[prevIndex].Title); } else { ret.SetLabel(timeList[prevKey], timeList[key], ""); } prevKey = key; prevIndex = index; } } if (timeList.Count >= 1) { if (prevIndex >= 0 && prevIndex < sequences.Count) { ret.SetLabel(timeList[prevKey], timeList[timeList.Count - 1], sequences[prevIndex].Title); } else { ret.SetLabel(timeList[prevKey], timeList[timeList.Count - 1], ""); } } return(ret); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var mode = args[0] as SingleSelectParameter; var threshold = args[1] as NumberParameter; var correct = args[2] as SequenceSingleSelectParameter; var correctSequence = correct.Value; ICSLabelSequence ret = new ICSLabelSequence(); decimal correctCount = 0, obtainCount = 0, matchCount = 0; switch (mode.Value) { case 0: var common = TimeSeriesValuesCalculation.MergeTimeList(new[] { env.SelectedSequence.Values, correctSequence.Values }).ToList(); for (int i = 0; i < common.Count - 1; i++) { string o = env.SelectedSequence.GetLabelAt(common[i]); string c = correctSequence.GetLabelAt(common[i]); if (o == "" && c == "") { continue; } decimal interval = common[i + 1] - common[i]; if (o != "") { obtainCount += interval; } if (c != "") { correctCount += interval; } if (o == c) { matchCount += interval; } ret.SetLabel(common[i], common[i + 1], o == c ? "Match" : o == "" ? "False Negative" : c == "" ? "False Positive" : "Mismatch"); } break; case 1: case 2: SequenceData main, sub; if (mode.Value == 1) { main = correctSequence; sub = env.SelectedSequence; } else { main = env.SelectedSequence; sub = correctSequence; } var subLabel = sub.GetLabelSequence(); foreach (var label in main.GetLabelSequence().EnumerateLabels()) { decimal denom = label.Duration; if (label.LabelText != "") { var clip = subLabel.ClipLabelsBetween(label.BeginTime, label.EndTime, ICSLabelSequence.ClipLabelsMode.CutBorder); decimal numer = clip.Where(l => l.LabelText == label.LabelText).Select(l => l.Duration).Sum(); if (numer >= denom * threshold.Value) { matchCount++; ret.SetLabel(label.ChangeText("Match")); } else { ret.SetLabel(label.ChangeText(mode.Value == 1 ? "False Negative" : "False Positive")); } obtainCount++; correctCount++; } else { var clip = subLabel.ClipLabelsBetween(label.BeginTime, label.EndTime, ICSLabelSequence.ClipLabelsMode.CutBorder); var missClip = clip.Where(l => l.LabelText != "").ToList(); var missCount = missClip.Count; if (mode.Value == 1) { obtainCount += missCount; } else { correctCount += missCount; } foreach (var m in missClip) { ret.SetLabel(m.ChangeText(mode.Value == 1 ? "False Positive" : "False Negative")); } } } break; } return(SequenceData.FromLabelSequence(ret, PathEx.GiveName("PrecisionRecall", env.SelectedSequence.Title, correctSequence.Title))); }
public SequenceData Operate(IList <ProcParam <SequenceProcEnv> > args, SequenceProcEnv env) { var arith = args[0] as SingleSelectParameter; var operand = args[1] as SequenceMultiSelectParameter; string opText = "null"; TimeSeriesValues result = env.SelectedSequence.Values; string second = ""; foreach (var sequence in operand.Value) { if (second == "") { second = sequence.Title; } else { second += "-etc"; } var operandData = sequence; switch (arith.Value) { case 0: result = TimeSeriesValuesCalculation.OperateWith(result, operandData.Values, (x, y) => x + y); opText = "Add"; break; case 1: result = TimeSeriesValuesCalculation.OperateWith(result, operandData.Values, (x, y) => x - y); opText = "Subtract"; break; case 2: result = TimeSeriesValuesCalculation.OperateWith(result, operandData.Values, (x, y) => x * y); opText = "Multiply"; break; case 3: result = TimeSeriesValuesCalculation.OperateWith(result, operandData.Values, (x, y) => y == 0 ? null : x / y); opText = "Divide"; break; case 4: result = TimeSeriesValuesCalculation.OperateWith(result, operandData.Values, (x, y) => x > y ? x : y); opText = "Max"; break; case 5: result = TimeSeriesValuesCalculation.OperateWith(result, operandData.Values, (x, y) => x < y ? x : y); opText = "Min"; break; default: result = new TimeSeriesValues(); break; } } SequenceData ret = new SequenceData(result, null, PathEx.GiveName(opText, env.SelectedSequence.Title, second)); ret.Type = SequenceType.Numeric; return(ret); }