Beispiel #1
0
        // GET: api/DemoTimeSeries
        public IEnumerable <DemoTimeSeries> GetDemoTimeSeries()
        {
            var period  = new Period(_starTime, _endTime);
            var service = new TimeSeriesService();
            var infos   = GetTsInfos();

            var timeSeries = service.GetTimeSeries(infos, period);

            return(MapToDemoTimeSeries(timeSeries));
        }
        public void MoveBackwardByMonthShouldCorret2()
        {
            // Arrange
            var generator         = new TimeSeriesService();
            var targetDate        = new DateTime(2018, 01, 15);
            var count             = 12;
            var includeTargetDate = true;

            // Action
            var series = generator.MoveBackwardByMonth(targetDate, count, includeTargetDate);

            // Assertions
            var list = series.ToList();

            list.Count.Should().Be(count + 1);
            for (int i = 0; i < list.Count - 1; i += 2)
            {
                list[i].AddMonths(-1).Ticks.Should().Be(list[i + 1].Ticks);
            }
        }
Beispiel #3
0
        private static async Task RunAsync(string[] args)
        {
            if (args.Length < 1)
            {
                throw new InvalidDataException("Missing path to configuration file");
            }

            var configurationFilePath = new FileInfo(args[0]);

            Logger.Info(CultureInfo.InvariantCulture, "Path to configuration file: {0}", configurationFilePath);

            // read data needed for processing time series data
            Logger.Info(CultureInfo.InvariantCulture, "Read configurations");
            var reader         = new DefaultConfigurationReader(new JsonConfigurationParser());
            var configurations = await reader.ReadAsync(configurationFilePath).ConfigureAwait(false);

            var timeSeriesReaderFactory = new TimeSeriesReaderFactory();
            var meteoReader             = new MeteoXmlReader();
            var excelWriter             = new EppExcelWriter();
            var fileService             = new FileService();
            var timeSeriesService       = new TimeSeriesService(timeSeriesReaderFactory, meteoReader, excelWriter, fileService);

            // read and write time series data
            Logger.Info(CultureInfo.InvariantCulture, "Read meteo data from sources");
            var meteoSeries = await timeSeriesService.ReadAsync(configurations.MeteoConfigs, CancellationToken.None).ConfigureAwait(false);

            Logger.Info(CultureInfo.InvariantCulture, "Read energy data from sources");
            var energySeries = await timeSeriesService.ReadAsync(configurations.EnergyConfigs, CancellationToken.None).ConfigureAwait(false);

            var summary = meteoSeries.Concat(energySeries);

            // write time series data to target excel files
            Logger.Info(CultureInfo.InvariantCulture, "Write data to target files");
            await timeSeriesService.WriteAsync(summary, configurations.SummaryConfigs, CancellationToken.None).ConfigureAwait(false);

            Logger.Info(CultureInfo.InvariantCulture, "Successfully Finished");
        }
Beispiel #4
0
        private void BindForecast()
        {
            //BindGrids();


            int predictCount = Convert.ToInt32(txtPredictCount.Text);
            int p            = Convert.ToInt32(txtp.Text);
            int q            = Convert.ToInt32(txtq.Text);
            int s            = Convert.ToInt32(txts.Text);
            int d            = Convert.ToInt32(txtd.Text);
            int forcastStep  = 4;

            var forecastType = ((Enums.ForecastsType)Convert.ToInt32(drpForecatsType.SelectedValue)).ToString();

            CultureInfo persianCultureInfo = new CultureInfo("en-US");
            var         values             = new Dictionary <string, List <string> >
            {
                { "Date", Categories },
                { "riders", ActualActivityTrend.Select(x => x.Value.ToString()).ToList() }
            };


            ForecastModel model = new ForecastModel
            {
                Data         = values,
                PredictCount = predictCount,
                ForcastStep  = forcastStep,
                p            = p,
                q            = q,
                d            = d,
                s            = s,
                type         = forecastType
            };


            var timeSeriseSrv = TimeSeriesService.Instance();

            var serviceResult = timeSeriseSrv.GetTimeSeriesForcastResult(model);

            if (!serviceResult.IsSuccessful)
            {
                lbMessage.Text = serviceResult.Message;
                return;
            }

            var prgressResult = (TimeSeriDto)serviceResult.Data;


            if (string.IsNullOrEmpty(prgressResult.Exception) == false)
            {
                lbMessage.Text =
                    "مقادیر لگهای انتخاب شده متناسب با اعداد دوره های عملکرد نمی باشد!" +
                    "<br />" +
                    prgressResult.Exception;
                return;
            }
            if (prgressResult.Forecast is null || prgressResult.Forecast.Count == 0)
            {
                lbMessage.Text = "با مقادیر ارسال شده ، سیستم قادر به انجام عملیات پیش بینی نمی باشد!";
                return;
            }


            var forecastResult = prgressResult.Forecast;

            var predictResult = prgressResult.PredictResult;

            //ChartModel cmActivity = new ChartModel() { ChartType = ChartTypes.Line, Data = chartData };

            List <ChartData> cmPrePredicat = predictResult.Select(x => new ChartData()
            {
                IntervalDate = x.Key.ToString(),
                Value        = x.Value
            }).ToList();


            List <ChartData> cdPredicate = new List <ChartData>();

            foreach (var item in Categories)
            {
                double?val = null;
                if (cmPrePredicat.Any(x => x.IntervalDate == item))
                {
                    val = cmPrePredicat.Single(x => x.IntervalDate == item).Value;
                }
                cdPredicate.Add(new ChartData(item, val));
            }

            //ChartModel cmPredicat = new ChartModel() { ChartType = ChartTypes.Line, Data = cdPredicate };

            List <ChartData> cdForcast = new List <ChartData>();



            var joinerPoint      = Categories.Last();
            var joinerTrendPoint = ActualActivityTrend.Last();

            cdForcast.AddRange(Categories.Select(x => new ChartData(x, null)).ToList());

            var checkExists = cdForcast.SingleOrDefault(x => x.IntervalDate == joinerPoint);

            if (checkExists != null)
            {
                cdForcast.Remove(checkExists);
            }

            cdForcast.Add(new ChartData(joinerPoint, joinerTrendPoint));


            for (int i = 0; i < forcastStep; i++)
            {
                int forcastIndex = Convert.ToInt32(joinerPoint) + i + 1;
                cdForcast.Add(new ChartData(forcastIndex.ToString(), forecastResult.ElementAt(i).Value));
            }
            //UcIndicatorView.Visible = true;
            //ChartModel cmForecast = new ChartModel() { ChartType = ChartTypes.Line, Data = cdForcast };


            var chartModelforcast = new HighChartViewModel(Categories);

            chartModelforcast.HighChartDataItems.Add(new HighChartDataItems("عملکرد", "#2962ff", ActualActivityTrend));
            chartModelforcast.HighChartDataItems.Add(new HighChartDataItems("تطبیق", "#d7ccc8", cdPredicate.Select(x => x.Value).ToList()));
            chartModelforcast.HighChartDataItems.Add(new HighChartDataItems("پیش بینی", "#ab47bc", cdForcast.Select(x => x.Value).ToList()));
            UCSplineForcast.ChartId          = "chartModelforcast";
            UCSplineForcast.vmHighChartModel = chartModelforcast;

            BindActivityCharts();



            //var forecastsData =
            //    (from x in cdForcast

            //     let activity = AiFChartData.SingleOrDefault(y => y.IntervalDate == x.IntervalDate)

            //     where
            //     x.IntervalDate != joinerPoint.IntervalDate && x.Value.HasValue

            //     orderby x.IntervalDate
            //     let percent = (activity?.Value.HasValue == true) ? ((x.Value - activity.Value.Value) / ((activity.Value.Value + x.Value) / 2)) * 100 : 0
            //     select new
            //     {
            //         IntervalDate = x.IntervalDate,
            //         Value = x.Value,
            //         ActivityValue = activity?.Value,
            //         Diff =
            //         activity?.Value.HasValue == true ?
            //         percent.Value.ToString("N2") : "",



            //         Increase = (activity?.Value.HasValue == true) &&

            //            ((x.Value < activity.Value.Value && Math.Abs(percent.Value) <= 5) || (x.Value >= activity.Value.Value))

            //            ? true : false,

            //         Decrease = (activity?.Value.HasValue == true) &&

            //                (x.Value < activity.Value.Value && (Math.Abs(percent.Value)) > 5) ? true : false

            //     }
            //     ).ToList();

            ////cdForcast.Where(x => x.IntervalDate != joinerPoint.IntervalDate && x.Value.HasValue).OrderBy(x => x.IntervalDate).ToList();

            //var statisticDataSource = new List<TimeSeriDto>();
            //statisticDataSource.Add(new TimeSeriDto
            //{
            //    aic = prgressResult.aic,
            //    hqic = prgressResult.hqic,
            //    Exception = string.Empty,
            //    Forecast = null,
            //    PredictResult = null
            //});
            //lvStatistics.DataSource = statisticDataSource;
            //lvStatistics.DataBind();
            //lvStatistics.Visible = true;

            //lvForecast.DataSource = forecastsData;
            //lvForecast.DataBind();
            //lvForecast.Visible = true;


            //UcChartBefore.SetChart(IndicatorTitle, chartModelFirst, new Dictionary<string, string>() { { "جزئیات", "$('.tables2').html($('#pnl3').html()); $('#mainContainer2').dialog('open');" } });
            //UcIndicatorView.SetChart(IndicatorTitle, chartModelSecond, new Dictionary<string, string>() { { "جزئیات", "$('.tables1').html($('#pnl2').html()); $('#mainContainer').dialog('open');" } });
        }
Beispiel #5
0
        public void GetTimeSeriseDate(List <string> categories, List <double?> actualActivityTrend)
        {
            CultureInfo persianCultureInfo = new CultureInfo("en-US");

            var values = new Dictionary <string, List <string> >
            {
                { "Date", categories },
                { "riders", actualActivityTrend.Select(x => x.Value.ToString()).ToList() }
            };


            ForecastModel model = new ForecastModel
            {
                Data         = values,
                PredictCount = 0,
                ForcastStep  = 0,
                p            = 0,
                q            = 0,
                d            = 0,
                s            = 0
            };


            var timeSeriesSrv = TimeSeriesService.Instance();



            var fs = timeSeriesSrv.GetChart <ForecastModel>(model);


            imgPacf.Visible = !string.IsNullOrEmpty(fs);

            imgPacf.ImageUrl = String.Format(@"data:image/jpeg;base64,{0}", fs);



            var serviceResult = timeSeriesSrv.GetTimeSeriesDecomposeResult(model);

            if (!serviceResult.IsSuccessful)
            {
                lbMessage.Text = serviceResult.Message;
                return;
            }

            var composedResult = (TimeSeriesDecomposeModel)serviceResult.Data;


            if (composedResult == null)
            {
                lbMessage.Text = "مقادیر لگهای انتخاب شده متناسب با اعداد دوره های عملکرد نمی باشد!";
                //UcChartBefore.Visible = UcIndicatorView.Visible = false;
                return;
            }

            if (string.IsNullOrEmpty(composedResult.Exception) == false)
            {
                lbMessage.Text =
                    "مقادیر لگهای انتخاب شده متناسب با اعداد دوره های عملکرد نمی باشد!" +
                    "<br />" +
                    composedResult.Exception;

                //UcChartBefore.Visible = UcIndicatorView.Visible = false;
                return;
            }



            ResidComposed = new List <ChartData>();

            ResidComposed.AddRange(categories.Select(x => new ChartData(x, null)).ToList());

            for (int i = 0; i < composedResult.Resid.Count; i++)
            {
                ResidComposed[i].Value = composedResult.Resid[i] == null ? new Nullable <double>() : composedResult.Resid[i].Value;
            }

            TrendComposed = new List <ChartData>();



            TrendComposed.AddRange(categories.Select(x => new ChartData(x, null)).ToList());

            for (int i = 0; i < composedResult.Trend.Count; i++)
            {
                TrendComposed[i].Value = composedResult.Trend[i] == null ? new Nullable <double>() : composedResult.Trend[i].Value;
            }



            SeasonalComposed = new List <ChartData>();

            SeasonalComposed.AddRange(categories.Select(x => new ChartData(x, null)).ToList());

            for (int i = 0; i < composedResult.Seasonal.Count; i++)
            {
                SeasonalComposed[i].Value = composedResult.Seasonal[i] == null ? new Nullable <double>() : composedResult.Seasonal[i].Value;
            }
        }