예제 #1
0
        /// <summary>
        /// Returns records that represent the variance of the data value as a percentage from the median
        /// </summary>
        public List <MedianVariance> GetMedianVariances()
        {
            var varianceRecords = new List <MedianVariance>();
            var lpRecords       = _repository.GetLPRecords()?.ToList();
            var touRecords      = _repository.GetTOURecords()?.ToList();

            // group all LP records by Filename
            var lpRecsGroupedByFilename = lpRecords
                                          ?.GroupBy(u => u.Filename)
                                          .Select(grp => new { Filename = grp.Key, Records = grp.ToList() })
                                          .ToList();

            // group all TOU records by Filename
            var touRecsGroupedByFilename = touRecords
                                           ?.GroupBy(u => u.Filename)
                                           .Select(grp => new { Filename = grp.Key, Records = grp.ToList() })
                                           .ToList();

            if (lpRecsGroupedByFilename != null)
            {
                foreach (var group in lpRecsGroupedByFilename)
                {
                    var median = _medianCalculator.CalculateMedian(group.Records.Select(a => a.DataValue).ToList());
                    foreach (var record in group.Records)
                    {
                        var medianVariance = CreateMedianVariance(
                            group.Filename,
                            median,
                            record.Timestamp,
                            record.DataValue
                            );

                        varianceRecords.Add(medianVariance);
                    }
                }
            }

            if (touRecsGroupedByFilename != null)
            {
                foreach (var group in touRecsGroupedByFilename)
                {
                    var median = _medianCalculator.CalculateMedian(group.Records.Select(a => a.Energy).ToList());
                    foreach (var record in group.Records)
                    {
                        var medianVariance = CreateMedianVariance(
                            group.Filename,
                            median,
                            record.Timestamp,
                            record.Energy
                            );

                        varianceRecords.Add(medianVariance);
                    }
                }
            }

            return(varianceRecords);
        }