コード例 #1
0
        public override async Task <FResult> Forecast(List <double> data, int lead, string savePlot, int frequency, int plotWidth, int plotHeight)
        {
            var returnData = new FResult();

            var template = $@"
                data <- ts(data, {(frequency > 0 ? $"frequency = {frequency}" : "")})
                forec <- holt(data,h={lead})
            ";

            returnData = await IBasicMethod.Forecast(returnData, data, template, savePlot, plotWidth, plotHeight);


            return(returnData);
        }
コード例 #2
0
        public async Task <ActionResult> Result(ForecastingRequest request)
        {
            ForecastingResult dataResult = new ForecastingResult();
            List <double>     items      = null;

            using (var db = new dbContext()) {
                items = db.Sales_Histories.Where(x => x.Entry_No >= request.From && x.Entry_No <= request.To).OrderBy(x => x.Entry_No).Select(x => (double)x.Sales_Quantity).ToList();
            }
            IBasicMethod method = null;

            foreach (var cMethod in methods)
            {
                if (cMethod.GetMethodName() == request.Method)
                {
                    method = cMethod;
                }
            }
            if (method == null)
            {
                dataResult.Error = "Couldn't found method that you need!";
                return(View(dataResult));
            }
            FResult result        = null;
            var     imageName     = Guid.NewGuid().ToString();
            var     dir           = Server.MapPath("/Images");
            var     imageFileName = Path.Combine(dir, imageName + ".png");

            dataResult.Image = imageName;
            try {
                result = await method.Forecast(items, request.Count, imageFileName, request.Periodicity, request.ImageWidth, request.ImageHeight);
            } catch (Exception ex) {
                dataResult.Error = "Unknown error appeared while trying to forecast data";
                return(View(dataResult));
            }
            if (result.Data != null)
            {
                dataResult.ForecastData = result.Data;
                dataResult.Low80Data    = result.Low80;
                dataResult.High80Data   = result.High80;
                dataResult.Low95Data    = result.Low95;
                dataResult.High95Data   = result.High95;
                dataResult.Error        = "";
            }
            else
            {
                dataResult.Error = result.Error;
            }
            return(View(dataResult));
        }
コード例 #3
0
ファイル: Settings.cs プロジェクト: vadosik199/Forecast
 static Forecast_Method GetForecastMethodSetup(IBasicMethod method)
 {
     using (var db = new dbContext())
     {
         var setup = db.Forecast_Methods.First(x => x.Code == method.GetMethodName());
         if (setup == null)
         {
             setup      = new Forecast_Method();
             setup.Code = method.GetMethodName();
             db.Forecast_Methods.Add(setup);
             db.SaveChanges();
         }
         return(setup);
     }
 }
コード例 #4
0
        public override async Task <FResult> Forecast(List <double> data, int lead, string savePlot, int frequency, int plotWidth, int plotHeight)
        {
            var returnData = new FResult();

            if (frequency <= 1)
            {
                returnData.Error = "Period should be higher than 1";
                return(returnData);
            }

            var template = $@"
                data <- ts(data, frequency = {frequency}) 
                forec <- hw(data,h={lead}) 
            ";

            returnData = await IBasicMethod.Forecast(returnData, data, template, savePlot, plotWidth, plotHeight);


            return(returnData);
        }
コード例 #5
0
        private async void button2_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex == -1)
            {
                MessageBox.Show("Please, select fitting method to use!");
                return;
            }
            if (comboBox1.SelectedIndex > availableMethods.Count)
            {
                MessageBox.Show("Method currently not available!");
                return;
            }
            int days;
            var ok = int.TryParse(textBox1.Text, out days);
            int count;
            var ok2 = int.TryParse(textBox2.Text, out count);
            int period;
            var ok3 = int.TryParse(textBox3.Text, out period);

            if (!ok || !ok2 || days <= 0 || count <= 0 || (ok3 && period < 0))
            {
                MessageBox.Show("Invalid count!");
                return;
            }
            List <double> items = null;

            using (var db = new dbContext())
            {
                /*items = db.Sales_Histories
                 *  .OrderByDescending(u => u.Entry_No)
                 *  .Take(days)
                 *  .OrderBy(u => u.Entry_No)
                 *  .Select(x => (double)x.Sales_Quantity)
                 *  .ToList();*/
                items = db.Sales_Histories
                        .GroupBy(x => x.Invoice_Date)
                        .OrderByDescending(x => x.Key)
                        .Take(days)
                        .OrderBy(x => x.Key)
                        .Select(x => x.Select(o => (double)o.Sales_Quantity).ToList().Sum())
                        .ToList();
            }
            IBasicMethod method = availableMethods[comboBox1.SelectedIndex];

            if (!ok3)
            {
                period = 0;
            }
            FResult result = null;

            if (items.Count != days)
            {
                textBox1.Text = items.Count.ToString();
            }
            var filepath = Directory.GetCurrentDirectory() + "\\result.png";

            try
            {
                result = await method.Forecast(items, count, filepath, period, 1920, 1080);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                MessageBox.Show("Unknown error appeared while trying to forecast data " + ex.Message);
                return;
            }
            if (result.Data == null)
            {
                MessageBox.Show(result.Error);
            }
            else
            {
                pictureBox1.ImageLocation = filepath;
                dataGridView1.Columns.Clear();
                dataGridView1.Columns.Add("Value", "Value");
                dataGridView1.Rows.Clear();
                foreach (var item in result.Data)
                {
                    dataGridView1.Rows.Add(new object[] { item });
                }
                ChartService.RefreshForecastChart(testChart, result);
                testChart.Zoom           = ZoomingOptions.Xy;
                testChart.LegendLocation = LegendLocation.Left;
            }
        }