示例#1
0
        public void Apply_When11thIs110And21thIs120_MonthAverageIs115()
        {
            // Arrange
            var ts = new Timeseries
            {
                new Tvq(
                    new DateTime(2015, 03, 11, 0, 0, 0, 0),
                    110,
                    Quality.Ok),
                new Tvq(
                    new DateTime(2015, 03, 21, 0, 0, 0, 0),
                    120,
                    Quality.Ok)
            };

            // Act
            var t0     = new DateTime(2015, 03, 01, 0, 0, 0, 0);
            var t1     = new DateTime(2015, 03, 30, 23, 59, 59, 999);
            var result = new Average().Apply(t0, t1, ts);

            // Assert
            var area1    = 110 * (ts[0].Time - t0).TotalSeconds;
            var area2    = 115 * (ts[1].Time - ts[0].Time).TotalSeconds;
            var area3    = 120 * (t1 - ts[1].Time).TotalSeconds;
            var expected = (area1 + area2 + area3) / (t1 - t0).TotalSeconds;

            Assert.Equal(expected, result.V, 4);
        }
示例#2
0
        public void Apply_WhenFirstValueIsInsidePeriod_AssumesStepwise()
        {
            // Arrange
            var tvq1 = new Tvq(
                new DateTime(2015, 01, 10, 0, 0, 0, 0),
                110,
                Quality.Ok);
            var tvq2 = new Tvq(
                new DateTime(2015, 01, 20, 0, 0, 0, 0),
                120,
                Quality.Ok);
            var ts = new Timeseries {
                tvq1, tvq2
            };

            // Act
            var t0     = new DateTime(2015, 01, 01, 0, 0, 0, 0);
            var t1     = new DateTime(2015, 01, 31, 23, 59, 59, 999);
            var result = new Average().Apply(t0, t1, ts);

            // Assert
            var area1    = tvq1.V * (tvq1.Time - t0).TotalSeconds;
            var area2    = (tvq2.Time - tvq1.Time).TotalSeconds * (tvq1.V + tvq2.V) / 2;
            var area3    = (t1 - tvq2.Time).TotalSeconds * tvq2.V;
            var expected = (area1 + area2 + area3) / (t1 - t0).TotalSeconds;

            Assert.Equal(expected, result.V);
        }
示例#3
0
        public void MonthlyAverage_WhenWholeMonthDiminishingConsumption_ConsumptionIsCorrect()
        {
            // Arrange
            const double v0 = 0;
            var          t0 = new DateTime(2015, 09, 01, 0, 0, 0);
            var          t1 = new DateTime(2015, 09, 16, 0, 0, 0);
            var          t2 = new DateTime(2015, 10, 01, 0, 0, 0);

            double[] consumptionPerDay = { 2d, 1d };

            var v1 = v0 + consumptionPerDay[0] * (t1 - t0).TotalDays;
            var v2 = v1 + consumptionPerDay[1] * (t2 - t1).TotalDays;
            var ts = new Timeseries
            {
                new Tvq(t0, v0, Quality.Ok),
                new Tvq(t1, v1, Quality.Ok),
                new Tvq(t2, v2, Quality.Ok)
            };

            // Act
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var x             = averages[0];
            var expectedValue =
                (t1 - t0).TotalDays * consumptionPerDay[0]
                + (t2 - t1).TotalDays * consumptionPerDay[1];

            Assert.Equal(expectedValue, x.V, 7);
        }
示例#4
0
        public static Timeseries GetMonthlyAverages(string identityName)
        {
            var repo       = new RegistryEntryRepoFactory().GetRegistryEntryRepo(identityName);
            var sortedTvqs = repo.GetRegistryEntries().OrderBy(x => x.Time);

            var tsWithRegisterEntries = new Timeseries();

            tsWithRegisterEntries.AddRange(sortedTvqs.ToList());

            var periodizer      = new Periodizer();
            var monthlyAverages = periodizer.MonthlyAverage(tsWithRegisterEntries);

            //const int minMonths = 2;
            //var tooFewEntries = monthlyRegisterEntries.Count < minMonths;
            //var areTooFewEntries = tooFewEntries;
            //if (areTooFewEntries)
            //{
            //    throw new TooFewEntriesException(minMonths);
            //}

            //var deltaOperator = new DeltaTsOperator();
            //var monthlyAverages = deltaOperator.Apply(monthlyRegisterEntries);

            return(monthlyAverages);
        }
示例#5
0
        /// <summary>
        /// Splits a timeseries into possibly several with one timeseries per year.
        /// </summary>
        /// <param name="timeseries"></param>
        /// <returns></returns>
        public IList<Timeseries> SplitPerYear(Timeseries timeseries)
        {
            if (! timeseries.Any())
            {
                return new List<Timeseries>();
            }

            var result = new List<Timeseries>();
            Tvq previous = null;
            Timeseries currentTs = null;

            foreach (var tvq in timeseries)
            {
                if (previous == null)
                {
                    currentTs = new Timeseries {tvq};
                    result.Add(currentTs);
                }
                else
                {
                    if (previous.Time.Year != tvq.Time.Year)
                    {
                        currentTs = new Timeseries();
                        result.Add(currentTs);
                    }
                    currentTs.Add(tvq);
                }
                previous = tvq;
            }

            return result;
        }
示例#6
0
            /// <summary>
            /// Simple Moving average
            /// </summary>
            /// <param name="period"></param>
            /// <returns>This variable after transformation.</returns>
            public Variable Sma(int period)
            {
                // TODO Direct buffer speed optimization (in-place change).
                Timeseries ts = mVarParent.Sma(period);

                return(mVarParent.mParent[mVarParent.Name] = ts.Default);
            }
示例#7
0
        public void Apply_WhenFirstValueIsInsidePeriod_AssumesStepwise()
        {
            // Arrange
            var tvq1 = new Tvq(
                new DateTime(2015, 01, 10, 0, 0, 0, 0),
                110,
                Quality.Ok);
            var tvq2 = new Tvq(
                new DateTime(2015, 01, 20, 0, 0, 0, 0),
                120,
                Quality.Ok);
            var ts = new Timeseries { tvq1, tvq2 };

            // Act
            var t0 = new DateTime(2015, 01, 01, 0, 0, 0, 0);
            var t1 = new DateTime(2015, 01, 31, 23, 59, 59, 999);
            var result = new Average().Apply(t0, t1, ts);

            // Assert
            var area1 = tvq1.V*(tvq1.Time - t0).TotalSeconds;
            var area2 = (tvq2.Time - tvq1.Time).TotalSeconds*(tvq1.V + tvq2.V)/2;
            var area3 = (t1 - tvq2.Time).TotalSeconds*tvq2.V;
            var expected = (area1 + area2 + area3) / (t1 - t0).TotalSeconds;
            Assert.Equal(expected, result.V);
        }
示例#8
0
        /// <summary>
        /// Applies the delta function to each pair of consecutive values.
        /// </summary>
        /// <param name="ts">A time series</param>
        /// <returns></returns>
        public Timeseries Apply(Timeseries ts)
        {
            const string paramNameTs = "ts";

            if (ts == null)
            {
                throw new ArgumentException("Must be non-null", paramNameTs);
            }

            //if (ts.Count < 2) throw new ArgumentException("ts must contain at least two elements", paramNameTs);

            var result = new Timeseries();

            using (var enumerator = ts.GetEnumerator())
            {
                if (!enumerator.MoveNext())
                {
                    throw new ArgumentException("ts must contain at least two elements", paramNameTs);
                }

                var previous = enumerator.Current;
                result.Add(new Tvq(previous.Time, 0, Quality.Ok)); // trying to indicate that the consumption starts at 0, but that may not work well if algorithms extrapolate backwards
                while (enumerator.MoveNext())
                {
                    var current = enumerator.Current;
                    var delta   = CalculateDelta(current, previous);
                    result.Add(delta);
                    previous = current;
                }
            }
            return(result);
        }
示例#9
0
        public void InsertPoints_WhenFrom2015To2016_TimesAreCorrect()
        {
            // Arrange
            // Act
            var ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150601.Time, 4, Quality.Ok),
                new Tvq(m_Tvqs.Tvq20160601.Time, 4, Quality.Ok)
            };
            var averages = m_Periodizer.InsertPoints(ts, Interval.Month);

            //Assert
            var i = 0;

            Assert.Equal(new DateTime(2015, 06, 01, 0, 0, 0), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 06, 30, 23, 59, 59), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 07, 01, 0, 0, 0), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 07, 31, 23, 59, 59), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 08, 01, 0, 0, 0), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 08, 31, 23, 59, 59), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 09, 01, 0, 0, 0), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 09, 30, 23, 59, 59), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 10, 01, 0, 0, 0), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 10, 31, 23, 59, 59), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 11, 01, 0, 0, 0), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 11, 30, 23, 59, 59), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 12, 01, 0, 0, 0), averages[i++].Time);
            Assert.Equal(new DateTime(2015, 12, 31, 23, 59, 59), averages[i++].Time);
            Assert.Equal(new DateTime(2016, 01, 01, 0, 0, 0), averages[i++].Time);
            Assert.Equal(new DateTime(2016, 06, 30, 23, 59, 59), averages.Last().Time);
        }
示例#10
0
        public void InsertPoints_WhenTwoPointsSameMonth_InsertsExtrapolatedEndValue()
        {
            // Arrange
            var tvq1 = m_Tvqs.Tvq20150601;
            var tvq2 = m_Tvqs.Tvq20150622;
            var ts   = new Timeseries {
                tvq1, tvq2
            };

            // Act
            var result = m_Periodizer.InsertPoints(ts, Interval.Month);

            // Assert
            Assert.Equal(3, result.Count);
            var dt = result[1].Time - result[0].Time;
            // y = k*x + m
            var k   = (tvq2.V - tvq1.V) / dt.TotalSeconds;
            var t1  = m_Tvqs.Tvq20150630.Time;
            var x   = (t1 - tvq1.Time).TotalSeconds;
            var y   = k * x + tvq1.V;
            var tvq = result.Last();

            Assert.Equal(t1, tvq.Time);
            Assert.Equal(y, tvq.V);
            Assert.Equal(Quality.Interpolated, tvq.Q);
        }
示例#11
0
        public void MonthlyAverage_When2ValuesInMiddleOfJan_ReturnsAsAverageAtFirstSecond()
        {
            // Arrange
            const double v0 = 0;
            const double v1 = 500;
            var          ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150105.Time, v0, Quality.Ok),
                new Tvq(m_Tvqs.Tvq20150110.Time, v1, Quality.Ok)
            };

            // Act
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var x = averages[0];

            Assert.Equal(m_Tvqs.Tvq20150101.Time, x.Time);

            var totalDays         = (ts[1].Time - ts[0].Time).Days;
            var consumptionPerDay = (v1 - v0) / totalDays;

            var nDaysExtrapolated       = 1 + 31 - ts[1].Time.Day;
            var extrapolatedConsumption = consumptionPerDay * nDaysExtrapolated;
            var valueAtEnd    = v1 + extrapolatedConsumption;
            var expectedValue = valueAtEnd - v0;

            Assert.Equal(expectedValue, x.V, 4);
        }
示例#12
0
        public void MonthlyAverage_When1ValueAtStartOfJanAnd1InFeb_InterpolatesMonthEndValue()
        {
            // Arrange
            const double v0                = 0;
            const int    nDaysJan          = 31;
            var          t1                = new DateTime(2015, 2, 23, 0, 0, 0);
            var          totalDays         = nDaysJan + t1.Day - 1;
            const double consumptionPerDay = 2;
            var          v1                = v0 + consumptionPerDay * totalDays;
            var          ts                = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150101.Time, v0, Quality.Ok),
                new Tvq(t1, v1, Quality.Ok)
            };

            // Act
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var x = averages[0];

            Assert.Equal(m_Tvqs.Tvq20150101.Time, x.Time);
            const double expectedValue = consumptionPerDay * nDaysJan;

            Assert.Equal(expectedValue, x.V, 7);
        }
示例#13
0
        public void MonthlyAverage_When1ValueAtStartOfJanAnd1InFebAndFirstIs1000_InterpolatesJanEndValue()
        {
            // Arrange
            const double v0 = 1000;
            const double v1 = v0 + 600d;
            var          ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150101.Time, v0, Quality.Ok),
                new Tvq(new DateTime(2015, 2, 23, 0, 0, 0), v1, Quality.Ok)
            };

            // Act
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var x = averages[0];

            Assert.Equal(m_Tvqs.Tvq20150101.Time, x.Time);
            const int    nDaysJan          = 31;
            const double totalDays         = nDaysJan + 22;
            const double consumptionPerDay = (v1 - v0) / totalDays;
            const double expectedValue     = consumptionPerDay * nDaysJan;

            Assert.Equal(expectedValue, x.V, 7);
        }
 public MonthlyValueTextRendererTest()
 {
     m_Renderer = new MonthlyValueTextRenderer(new CultureInfo("SV"));
     m_Writer = new StringWriter();
     m_Tvqs = new Tvqs();
     m_FebToDec = Create(m_Tvqs.Tvq20160201.Time, 11, 200, 100);
 }
示例#15
0
    public List <AnomalyReport> detect(Timeseries ts)
    {
        List <AnomalyReport> vector = new List <AnomalyReport>();
        int i = 0;

        foreach (correlatedFeatures var in cf)
        {
            for (int j = 0; j < ts.table.First().Value.Count(); ++j)
            { // Loop through the map.
                int iter = -1;
                // Loop through the cf vector.
                iter++;
                float   floatA = ts.table[var.feature1][j];
                float   floatB = ts.table[var.feature2][j];
                dynamic p      = new Point(floatA, floatB); // A point represent the two current features.

                //float correlation = dev(*p, i->lin_reg);
                // Case the correlation is bigger then the threshold determined by the current correlation deviation.
                if (isAnomalous(var, p))
                {
                    string        description = var.feature1 + "-" + var.feature2;
                    long          timeStep    = j + 1;                                    // For time step to start with 1 instead of 0.
                    AnomalyReport ar          = new AnomalyReport(description, timeStep); // Build a anomaly report with those features.
                    vector.Add(ar);
                }
            }
            i++;
        }
        return(vector);
    }
示例#16
0
        /// <summary>
        /// Splits a timeseries into possibly several with one timeseries per year.
        /// </summary>
        /// <param name="timeseries"></param>
        /// <returns></returns>
        public IList <Timeseries> SplitPerYear(Timeseries timeseries)
        {
            if (!timeseries.Any())
            {
                return(new List <Timeseries>());
            }

            var        result    = new List <Timeseries>();
            Tvq        previous  = null;
            Timeseries currentTs = null;

            foreach (var tvq in timeseries)
            {
                if (previous == null)
                {
                    currentTs = new Timeseries {
                        tvq
                    };
                    result.Add(currentTs);
                }
                else
                {
                    if (previous.Time.Year != tvq.Time.Year)
                    {
                        currentTs = new Timeseries();
                        result.Add(currentTs);
                    }
                    currentTs.Add(tvq);
                }
                previous = tvq;
            }

            return(result);
        }
        public static void GetMatchingDatapoints___Should_return_single_matching_datapoint___When_reportingPeriodComparison_is_set_to_Contains()
        {
            // Arrange
            var datapointReportingPeriods = new[]
            {
                new ReportingPeriod(new CalendarUnbounded(), new CalendarYear(2018)),
                new CalendarYear(2020).ToReportingPeriod(),
                new CalendarYear(2021).ToReportingPeriod(),
                new CalendarYear(2023).ToReportingPeriod(),
                new ReportingPeriod(new CalendarYear(2024), new CalendarUnbounded()),
            };

            var datapoints = datapointReportingPeriods.Select(_ => new Datapoint <Version>(_, A.Dummy <Version>())).ToList();

            var timeseries = new Timeseries <Version>(datapoints);

            var reportingPeriods = new[]
            {
                new ReportingPeriod(new CalendarYear(2016), new CalendarYear(2018)),
                new ReportingPeriod(new CalendarYear(2020), new CalendarYear(2020)),
                new ReportingPeriod(new CalendarQuarter(2021, QuarterNumber.Q2), new CalendarQuarter(2021, QuarterNumber.Q3)),
                new ReportingPeriod(new CalendarQuarter(2023, QuarterNumber.Q1), new CalendarQuarter(2023, QuarterNumber.Q4)),
                new ReportingPeriod(new CalendarYear(2025), new CalendarYear(2028)),
            };

            var mostGranularDatapointReportingPeriods = reportingPeriods.Select(_ => _.ToMostGranular());

            // Act
            var actual1 = reportingPeriods.Select(_ => timeseries.GetMatchingDatapoints(_.DeepClone(), ReportingPeriodComparison.Contains).Single()).ToList();
            var actual2 = mostGranularDatapointReportingPeriods.Select(_ => timeseries.GetMatchingDatapoints(_.DeepClone(), ReportingPeriodComparison.Contains).Single()).ToList();

            // Assert
            actual1.AsTest().Must().BeEqualTo(datapoints);
            actual2.AsTest().Must().BeEqualTo(datapoints);
        }
        public static void GetMatchingDatapoints___Should_return_empty_collection___When_there_are_no_matching_datapoints_regardless_of_reportingPeriodComparison()
        {
            // Arrange
            var datapointReportingPeriods = new[]
            {
                new ReportingPeriod(new CalendarUnbounded(), new CalendarYear(2018)),
                new CalendarYear(2020).ToReportingPeriod(),
                new CalendarYear(2021).ToReportingPeriod(),
                new CalendarYear(2023).ToReportingPeriod(),
                new ReportingPeriod(new CalendarYear(2024), new CalendarUnbounded()),
            };

            var datapoints = datapointReportingPeriods.Select(_ => new Datapoint <Version>(_, A.Dummy <Version>())).ToList();

            var timeseries = new Timeseries <Version>(datapoints);

            var reportingPeriods = new[]
            {
                new FiscalYear(2020).ToReportingPeriod(),
                new CalendarYear(2019).ToReportingPeriod(),
                new CalendarYear(2022).ToReportingPeriod(),
            };

            // Act
            var actual1 = reportingPeriods.Select(_ => timeseries.GetMatchingDatapoints(_, ReportingPeriodComparison.Contains));
            var actual2 = reportingPeriods.Select(_ => timeseries.GetMatchingDatapoints(_, ReportingPeriodComparison.IsEqualToIgnoringGranularity));

            // Assert
            actual1.AsTest().Must().Each().BeEmptyEnumerable();
            actual2.AsTest().Must().Each().BeEmptyEnumerable();
        }
示例#19
0
 public MonthlyValueTextRendererTest()
 {
     m_Renderer = new MonthlyValueTextRenderer(new CultureInfo("SV"));
     m_Writer   = new StringWriter();
     m_Tvqs     = new Tvqs();
     m_FebToDec = Create(m_Tvqs.Tvq20160201.Time, 11, 200, 100);
 }
        public static void GetMatchingDatapoints___Should_return_empty_collection___When_reportingPeriodComparison_is_set_to_Contains_but_only_contained_or_overlapping_datapoints_exist()
        {
            // Arrange
            var datapointReportingPeriods = new[]
            {
                new ReportingPeriod(new CalendarUnbounded(), new CalendarYear(2018)),
                new CalendarYear(2020).ToReportingPeriod(),
                new CalendarYear(2021).ToReportingPeriod(),
                new CalendarYear(2023).ToReportingPeriod(),
                new ReportingPeriod(new CalendarYear(2024), new CalendarUnbounded()),
            };

            var datapoints = datapointReportingPeriods.Select(_ => new Datapoint <Version>(_, A.Dummy <Version>())).ToList();

            var timeseries = new Timeseries <Version>(datapoints);

            var reportingPeriods = new[]
            {
                new ReportingPeriod(new CalendarYear(2018), new CalendarYear(2019)),
                new ReportingPeriod(new CalendarYear(2020), new CalendarYear(2021)),
                new ReportingPeriod(new CalendarYear(2021), new CalendarYear(2022)),
                new ReportingPeriod(new CalendarYear(2023), new CalendarYear(2025)),
            };

            // Act
            var actual = reportingPeriods.Select(_ => timeseries.GetMatchingDatapoints(_, ReportingPeriodComparison.Contains));

            // Assert
            actual.AsTest().Must().Each().BeEmptyEnumerable();
        }
        public static void R25()
        {
            // Create a timeseries to work with.
            Timeseries ts1 = Timeseries.RandomTimeseries(1);

            ts1.Rename("Test1");
            if (ts1.Length != 1)
            {
                throw new Exception("Unexpected number of variable.");
            }
            // The only timeseries should now be named "Test1"
            Variable v = ts1["Test1"];

            if (ts1["Test1"].Name != "Test1")
            {
                throw new Exception("Unexpected name.");
            }
            // Add a new variable. Should not affect the existing variable.
            // Verify that indexor still return the right object.
            ts1["Test"] = ts1["Test1"].Sma(12);
            if (ts1.Length != 2)
            {
                throw new Exception("Unexpected number of variable.");
            }
            if (v.Equals(ts1["Test1"]) == false)
            {
                throw new Exception("Wrong object returned.");
            }
        }
示例#22
0
        public void MonthlyAverage_When1ValueInMiddleOfJanAnd1InFeb_ExtrapolatesFebEndValue()
        {
            // Arrange
            const double v0 = 0;
            const double v1 = v0 + 700d;
            const double v2 = v1 + 200d;
            var          ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150110.Time, v0, Quality.Ok),
                new Tvq(new DateTime(2015, 2, 13, 0, 0, 0), v1, Quality.Ok),
                new Tvq(new DateTime(2015, 2, 24, 0, 0, 0), v2, Quality.Ok)
            };

            // Act
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var x                   = averages[0];
            var totalDays           = (ts[1].Time - ts[0].Time).Days;
            var consumptionPerDay   = (v1 - v0) / totalDays;
            var nDaysConsumptionJan = 1 + 31 - ts[0].Time.Day;
            var expectedValue       = v0 + nDaysConsumptionJan * consumptionPerDay;

            Assert.Equal(expectedValue, x.V, 3);
        }
示例#23
0
 public void InsertPoints_WhenOnePointAtStart_InsertsEndpointAtLastSecond()
 {
     var ts = new Timeseries {m_Tvqs.Tvq20150101};
     var result = m_Periodizer.InsertPoints(ts, Interval.Year);
     var tvq = result.Last();
     Assert.Equal(new DateTime(2015, 12, 31, 23, 59, 59), tvq.Time);
 }
示例#24
0
 public void InsertPoints_WhenOnePointAtEnd_DoesNotInsertEndpoint()
 {
     var ts = new Timeseries { m_Tvqs.Tvq20151231 };
     var result = m_Periodizer.InsertPoints(ts, Interval.Year);
     Assert.Equal(2, result.Count);
     var tvq = result.Last();
     Assert.Same(m_Tvqs.Tvq20151231, tvq);
 }
示例#25
0
        public void SplitPerYear_WhenOnly20150101_ReturnsOneEnumerableWithTheValue()
        {
            var ts = new Timeseries();
            var source = ts.Add(m_Tvqs.Tvq20150101);

            var result = m_Periodizer.SplitPerYear(source).ToList();

            Assert.Equal(1, result.Count);
        }
示例#26
0
        public void SplitPerYear_WhenOnly20150101_ReturnsOneEnumerableWithTheValue()
        {
            var ts     = new Timeseries();
            var source = ts.Add(m_Tvqs.Tvq20150101);

            var result = m_Periodizer.SplitPerYear(source).ToList();

            Assert.Single(result);
        }
示例#27
0
        public void Apply_When5And7_DeltaIs2()
        {
            var ts = new Timeseries {
                m_Tvq5, m_Tvq7,
            };
            var result = m_Delta.Apply(ts);

            Assert.Equal(2, result[1].V);
        }
示例#28
0
    public virtual bool isAnomaly(Timeseries ts, correlatedFeatures cf, int timeStep)
    {
        List <float> Column1   = ts.GetColumn(cf.feature1);
        List <float> Column2   = ts.GetColumn(cf.feature2);
        Point        currPoint = new Point(Column1[timeStep], Column2[timeStep]);
        float        currDev   = Anomaly_Detection_Util.dev(currPoint, cf.lin_reg);

        return(currDev > cf.threshold * 1.1);
    }
示例#29
0
        public void Apply_When5And7_FirstValueId0AtFirstTime()
        {
            var ts = new Timeseries {
                m_Tvq5, m_Tvq7,
            };
            var result = m_Delta.Apply(ts);

            Assert.Equal(0d, result[0].V);
            Assert.Equal(m_Tvq5.Time, result[0].Time);
        }
示例#30
0
        public void Apply_WhenTsHasOneValue_Returns0()
        {
            var ts = new Timeseries {
                new Tvq(m_t0, 0, Quality.Ok)
            };
            var result = m_Delta.Apply(ts);

            Assert.Equal(0, result[0].V);
            Assert.Equal(m_t0, result[0].Time);
        }
示例#31
0
        private Timeseries Create(DateTime tvq20160201, int nValues, int v0, int delta)
        {
            var ts = new Timeseries();

            for (int i = 0; i < nValues; i++)
            {
                ts.Add(new Tvq(tvq20160201.AddMonths(i), v0 + i * delta, Quality.Ok));
            }
            return(ts);
        }
示例#32
0
 /// <summary>
 /// Execute the function on a timeseries.
 /// </summary>
 public Timeseries <double> Exec(Timeseries <double> input)
 {
     Pre();
     foreach (Index idx in input)
     {
         Iter();
     }
     Post();
     return((Timeseries <double>)input.Clone());
 }
示例#33
0
        public void InsertPoints_WhenMonthOnePoint_InsertsStartpointAtFirstSecond()
        {
            var ts = new Timeseries {
                m_Tvqs.Tvq20150622
            };
            var result = m_Periodizer.InsertPoints(ts, Interval.Month);
            var tvq    = result.First();

            Assert.Equal(new DateTime(2015, 06, 01, 0, 0, 0), tvq.Time);
        }
示例#34
0
        public void InsertPoints_WhenMonthOnePointAtStart_InsertsEndpointAtLastSecond()
        {
            var ts = new Timeseries {
                m_Tvqs.Tvq20150101
            };
            var result = m_Periodizer.InsertPoints(ts, Interval.Month);
            var tvq    = result.Last();

            Assert.Equal(new DateTime(2015, 01, 31, 23, 59, 59), tvq.Time);
        }
        private void loadAllCorrelatedFeatures()
        {
            string newPath = addHeader(this.trainCSVPath, this.xmlDict);

            this.ts = new Timeseries(newPath);

            this.ad = new SimpleAnomalyDetector((float)0.5);

            this.ad.learnNormal(this.ts);
            this.cf = ad.getNormalModel();
        }
示例#36
0
        public void InsertPoints_WhenOnePointAtStart_InsertsEndpointWithSameValueAsInterpolated()
        {
            var ts = new Timeseries {
                m_Tvqs.Tvq20150101
            };
            var result = m_Periodizer.InsertPoints(ts, Interval.Year);
            var tvq    = result.Last();

            Assert.Equal(ts[0].V, tvq.V);
            Assert.Equal(Quality.Interpolated, tvq.Q);
        }
        public ActionResult ListEntriesView()
        {
            var repo = GetRegistryEntryRepo();

            var entries = repo.GetRegistryEntries();
            var sortedTvqs = entries.OrderBy(x => x.Time);
            var tsWithRegisterEntries = new Timeseries();
            tsWithRegisterEntries.AddRange(sortedTvqs.ToList());

            return View(tsWithRegisterEntries);
        }
示例#38
0
        public void SplitPerYear_WhenOnlyOneYear_ReturnsOneEnumerableWithAllValues()
        {
            var ts = new Timeseries();
            var source = ts.Add(m_Tvqs.Tvq20150101).Add(m_Tvqs.Tvq20150601);

            var result = m_Periodizer.SplitPerYear(source).ToList();

            Assert.Equal(1, result.Count);
            Assert.Equal(2, result[0].Count);
            Assert.Equal(m_Tvqs.Tvq20150101, result[0][0]);
            Assert.Equal(m_Tvqs.Tvq20150601, result[0][1]);
        }
示例#39
0
 public void Apply_WhenThreeValues_ResultHasTwoCurrectValues()
 {
     var ts = new Timeseries { m_Tvq5, m_Tvq7, m_Tvq11, };
     var result = m_Delta.Apply(ts);
     Assert.Equal(2, result.Count);
     Assert.Equal(m_t1, result[0].Time);
     Assert.Equal(m_t2, result[1].Time);
     Assert.Equal(2, result[0].V);
     Assert.Equal(4, result[1].V);
     Assert.Equal(Quality.Ok, result[0].Q);
     Assert.Equal(Quality.Ok, result[1].Q);
 }
        public void Render_WhenFirstValueIsInFebruary_RendersJanuarysValueIsEmpty()
        {
            // Arrange
            var ts = new Timeseries { m_Tvqs.Tvq20160201 };

            // Act
            m_Renderer.Render(new[] { m_FebToDec }, m_Writer);

            // Assert
            var tokensWithoutNewlines = GetTokensAfterHeader(m_Writer);
            Assert.Equal("1", tokensWithoutNewlines[0]);
            Assert.Equal(String.Empty, tokensWithoutNewlines[1]);
        }
示例#41
0
        public void SplitPerYear_WhenOneEachYear_ReturnsTwoEnumerablesWithEachOneValue()
        {
            var ts = new Timeseries();
            var source = ts.Add(m_Tvqs.Tvq20150101).Add(m_Tvqs.Tvq20160101);

            var result = m_Periodizer.SplitPerYear(source).ToList();

            Assert.Equal(2, result.Count);
            Assert.Equal(1, result[0].Count);
            Assert.Equal(1, result[1].Count);
            Assert.Equal(m_Tvqs.Tvq20150101, result[0].First());
            Assert.Equal(m_Tvqs.Tvq20160101, result[1].First());
        }
        public void Render_WhenOneValueInJanuary_RendersTheValue()
        {
            // Arrange
            var ts = new Timeseries {m_Tvqs.Tvq20160101};

            // Act
            m_Renderer.Render(new [] { ts }, m_Writer);

            // Assert
            var tokensWithoutNewlines = GetTokensAfterHeader(m_Writer);

            Assert.Equal("1", tokensWithoutNewlines[0]);
            Assert.Equal(m_Tvqs.Tvq20160101.V.ToString(CultureInfo.InvariantCulture), tokensWithoutNewlines[1]);
        }
示例#43
0
        public Timeseries Apply(IUnaryAggregateOperator op, Timeseries ts)
        {
            if (ts == null || ! ts.Any()) return new Timeseries();

            var result = new Timeseries();

            // Default to monthly
            var t = ts.First().Time;
            do
            {
                var t0 = new DateTime(t.Year, t.Month, 1, 0, 0, 0);
                var t1 = new DateTime(t.Year, t.Month, DateTime.DaysInMonth(t.Year, t.Month), 23, 59, 59);
                result.Add(op.Apply(t0, t1, ts));
                t = t0.AddMonths(1);
            } while (t <= ts.Last().Time);

            return result;
        }
示例#44
0
        public static Timeseries ParseTimeseries(string tabSeparatedTimeseries)
        {
            var reader = new StringReader(tabSeparatedTimeseries);
            var result = new Timeseries();

            var line = reader.ReadLine();
            while (line != null)
            {
                var trimmedLine = line.Trim();
                if (!string.IsNullOrEmpty(trimmedLine))
                {
                    var tvq = ParseLine(trimmedLine);
                    result.Add(tvq);
                }
                line = reader.ReadLine();
            }

            return result;
        }
        public ActionResult ListEntriesView()
        {
            try
            {
                var repo = new RegistryEntryRepoFactory().GetRegistryEntryRepo();

                var entries = repo.GetRegistryEntries(Thread.CurrentPrincipal);
                var sortedTvqs = entries.OrderBy(x => x.Time);
                var tsWithRegisterEntries = new Timeseries();
                tsWithRegisterEntries.AddRange(sortedTvqs.ToList());

                return View(tsWithRegisterEntries);
            }
            catch (Exception e)
            {
                _logger.TrackException(e);
                return View("Error");
            }
        }
示例#46
0
        public static Timeseries GetMonthlyAverages(string registerId)
        {
            var storageAccount = CloudStorageAccount.Parse(
                CloudConfigurationManager.GetSetting("StorageConnectionString"));

            var repo = new RegistryEntryRepo(storageAccount);
            var sortedTvqs = repo.GetRegistryEntries().OrderBy(x => x.Time);

            var tsWithRegisterEntries = new Timeseries();
            tsWithRegisterEntries.AddRange(sortedTvqs.ToList());

            var periodizer = new Periodizer();
            var monthlyRegisterEntries = periodizer.MonthlyAverage(tsWithRegisterEntries);

            var deltaOperator = new DeltaTsOperator();
            var monthlyAverages = deltaOperator.Apply(monthlyRegisterEntries);

            return monthlyAverages;
        }
示例#47
0
        public void InsertPoints_When3PointsSameYear_InsertsExtrapolatedEndValue()
        {
            // Arrange
            var ts = new Timeseries { m_Tvqs.Tvq20150101, m_Tvqs.Tvq20150601, m_Tvqs.Tvq20150701 };

            // Act
            var result = m_Periodizer.InsertPoints(ts, Interval.Year);

            // Assert
            Assert.Equal(4, result.Count);
            var dt = result[2].Time - result[1].Time;
            // y = k*x + m
            var k = (m_Tvqs.Tvq20150701.V - m_Tvqs.Tvq20150601.V) / dt.TotalSeconds;
            var t1 = new DateTime(2015, 12, 31, 23, 59, 59);
            var x = (t1 - m_Tvqs.Tvq20150701.Time).TotalSeconds;
            var y = k * x + m_Tvqs.Tvq20150701.V;
            var tvq = result.Last();
            Assert.Equal(t1, tvq.Time);
            Assert.Equal(y, tvq.V);
            Assert.Equal(Quality.Interpolated, tvq.Q);
        }
示例#48
0
        /// <summary>
        /// Applies the delta function to each pair of consecutive values.
        /// </summary>
        /// <param name="ts">A time series</param>
        /// <returns></returns>
        public Timeseries Apply(Timeseries ts)
        {
            const string paramNameTs = "ts";
            if (ts == null) throw new ArgumentException("Must be non-null", paramNameTs);

            if (ts.Count < 2) throw new ArgumentException("ts must contain at least two elements", paramNameTs);

            var result = new Timeseries();

            var enumerator = ts.GetEnumerator();
            enumerator.MoveNext();
            var previous = enumerator.Current;
            while (enumerator.MoveNext())
            {
                var current = enumerator.Current;
                var delta = CalculateDelta(current, previous);
                result.Add(delta);
                previous = current;
            }

            return result;
        }
示例#49
0
        public static Timeseries GetMonthlyAverages()
        {
            var repo = new RegistryEntryRepoFactory().GetRegistryEntryRepo();
            var sortedTvqs = repo.GetRegistryEntries(Thread.CurrentPrincipal).OrderBy(x => x.Time);

            var tsWithRegisterEntries = new Timeseries();
            tsWithRegisterEntries.AddRange(sortedTvqs.ToList());

            var periodizer = new Periodizer();
            var monthlyRegisterEntries = periodizer.MonthlyAverage(tsWithRegisterEntries);

            const int minMonths = 2;
            var tooFewEntries = monthlyRegisterEntries.Count < minMonths;
            var areTooFewEntries = tooFewEntries;
            if (areTooFewEntries)
            {
                throw new TooFewEntriesException(minMonths);
            }

            var deltaOperator = new DeltaTsOperator();
            var monthlyAverages = deltaOperator.Apply(monthlyRegisterEntries);

            return monthlyAverages;
        }
示例#50
0
        public void MonthlyAverage_When1ValueInMiddleOfJanAnd1InFeb_InterpolatesEndValue()
        {
            // Arrange
            // Act
            const double v = 600;
            var ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150110.Time, v, Quality.Ok),
                new Tvq(new DateTime(2015, 2, 23, 0, 0, 0), 0, Quality.Ok)
            };
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var x = averages[0];
            Assert.Equal(m_Tvqs.Tvq20150101.Time, x.Time);
            var area1 = 9 * v;
            const int nDays = 31 - 10 + 1;
            var area2 = (v + 300d) / 2d * nDays;
            var expectedValue = (area1 + area2) / 31d;
            Assert.Equal(expectedValue, x.V, 3);
        }
示例#51
0
        public void MonthlyAverage_When2ValuesInMiddleOfJan_ReturnsAsAverageAtFirstSecond()
        {
            // Arrange
            // Act
            const double v = 500;
            var ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150105.Time, v, Quality.Ok),
                new Tvq(m_Tvqs.Tvq20150110.Time, 0, Quality.Ok)
            };
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var x = averages[0];
            Assert.Equal(m_Tvqs.Tvq20150101.Time, x.Time);
            var area1 = 4 * v;
            var area2 = 5 * v / 2;
            var expectedValue = (area1 + area2) / 31;
            Assert.Equal(expectedValue, x.V, 4);
        }
示例#52
0
        public void MonthlyAverage_WhenConstantValueInJanAndFeb_ReturnsIt()
        {
            // Arrange
            // Act
            const double v = 1000;
            var ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150101.Time, v, Quality.Ok),
                new Tvq(m_Tvqs.Tvq20150110.Time, v, Quality.Ok),
                new Tvq(new DateTime(2015, 2, 21, 0, 0, 0), v, Quality.Ok)
            };
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            Assert.Equal(v, averages[0].V, 4);
        }
示例#53
0
        public void MonthlyAverage_WhenFrom2015To2017_June2016IsAverage()
        {
            // Arrange
            // Act
            var ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150601.Time, 200, Quality.Ok),
                new Tvq(new DateTime(2017, 07, 01, 0, 0, 0), 400, Quality.Ok)
            };
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var average = averages.First(a => a.Time == m_Tvqs.Tvq20160601.Time);
            Assert.Equal(300d, average.V, 0);
        }
示例#54
0
        public void MonthlyAverage_WhenFrom2015To2017_LastMonthIsCorrect()
        {
            // Arrange
            // Act
            const double v = 1000;
            var ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150601.Time, v, Quality.Ok),
                new Tvq(m_Tvqs.Tvq20170601.Time, v, Quality.Ok)
            };
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            var last = averages.Last();
            Assert.Equal(new DateTime(2017, 06, 01, 0, 0, 0), last.Time);
            Assert.Equal(v, last.V);
        }
示例#55
0
 public void InsertPoints_WhenOnePointAtStart_InsertsEndpointWithSameValueAsInterpolated()
 {
     var ts = new Timeseries { m_Tvqs.Tvq20150101 };
     var result = m_Periodizer.InsertPoints(ts, Interval.Year);
     var tvq = result.Last();
     Assert.Equal(ts[0].V, tvq.V);
     Assert.Equal(Quality.Interpolated, tvq.Q);
 }
示例#56
0
 public void Apply_When5And7_DeltaIs2()
 {
     var ts = new Timeseries { m_Tvq5, m_Tvq7, };
     var result = m_Delta.Apply(ts);
     Assert.Equal(2, result[0].V);
 }
 private Timeseries Create(DateTime tvq20160201, int nValues, int v0, int delta)
 {
     var ts = new Timeseries();
     for (int i = 0; i < nValues; i++)
     {
         ts.Add(new Tvq(tvq20160201.AddMonths(i), v0 + i*delta, Quality.Ok));
     }
     return ts;
 }
示例#58
0
        public void MonthlyAverage_WhenFrom2015To2016_TimesAreCorrect()
        {
            // Arrange
            // Act
            const double v = 1000;
            var ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150601.Time, v, Quality.Ok),
                new Tvq(m_Tvqs.Tvq20160601.Time, v, Quality.Ok)
            };
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            Assert.Equal(new DateTime(2015, 06, 01, 0, 0, 0), averages[0].Time);
            Assert.Equal(new DateTime(2015, 07, 01, 0, 0, 0), averages[1].Time);
            Assert.Equal(new DateTime(2015, 12, 01, 0, 0, 0), averages[6].Time);
            Assert.Equal(new DateTime(2016, 01, 01, 0, 0, 0), averages[7].Time);
            Assert.Equal(new DateTime(2016, 06, 01, 0, 0, 0), averages[12].Time);
        }
示例#59
0
        public void MonthlyAverage_WhenConstantValueInJanAndJune_FebThroughMayAreCorrect()
        {
            // Arrange
            // Act
            const double v = 1000;
            var ts = new Timeseries
            {
                new Tvq(m_Tvqs.Tvq20150101.Time, v, Quality.Ok),
                new Tvq(m_Tvqs.Tvq20150601.Time, v, Quality.Ok)
            };
            var averages = m_Periodizer.MonthlyAverage(ts);

            //Assert
            Assert.Equal(v, averages[1].V, 4);
            Assert.Equal(v, averages[2].V, 4);
            Assert.Equal(v, averages[3].V, 4);
            Assert.Equal(v, averages[4].V, 4);
        }
示例#60
0
 public void Apply_WhenTsHasOneValue_ThrowsArgumentException()
 {
     var ts = new Timeseries {new Tvq(m_t0, 0, Quality.Ok)};
     Assert.Throws<ArgumentException>(() => m_Delta.Apply(ts));
 }