コード例 #1
0
        public ForecastingData CreateTimeFeatures(ForecastingData forecastData)
        {
            // Note: These properties could be set at the model level but to better illustrate the
            // concepts of time series it was more clear to put them in a method with the other
            // data time processing steps.

            forecastData.Year        = forecastData.Time.Year;
            forecastData.Month       = forecastData.Time.Month;
            forecastData.WeekOfMonth = Convert.ToInt32(Math.Ceiling(forecastData.Time.Day / 7.0));
            forecastData.WeekOfYear  = Convert.ToInt32(Math.Ceiling(forecastData.Time.DayOfYear / 7.0));

            // 4th Friday in November
            forecastData.IsBlackFriday = forecastData.DatesInWeek.Any(date => date.Month == 11 &&
                                                                      date.DayOfWeek == DayOfWeek.Friday &&
                                                                      date.Day > 22 &&
                                                                      date.Day < 29);

            // 1st Monday in September
            forecastData.IsUsLaborDay = forecastData.DatesInWeek.Any(date => date.Month == 9 &&
                                                                     date.DayOfWeek == DayOfWeek.Monday &&
                                                                     date.Day < 8);
            // 25th of December
            forecastData.IsChristmasDay = forecastData.DatesInWeek.Any(date => date.Month == 12 && date.Day == 25);
            // 1st of January
            forecastData.IsUsNewYearsDay = forecastData.DatesInWeek.Any(date => date.Month == 1 && date.Day == 1);

            return(forecastData);
        }
コード例 #2
0
        public List <ForecastingData> AddWeeksToPredict(List <ForecastingData> forecastData, int weeksToPredict, int storeID1, int itemID2)
        {
            var latestData = forecastData.OrderByDescending(data => data.Time).First();
            var latestDate = latestData.Time;
            var latestRdpi = latestData.RDPI;

            for (int i = 0; i < weeksToPredict; i++)
            {
                latestDate = latestDate.AddDays(7);
                var forcastingDataItem = new ForecastingData
                {
                    ID1         = storeID1,
                    ID2         = itemID2,
                    Time        = latestDate,
                    Value       = 0,
                    RDPI        = latestRdpi,
                    DatesInWeek = new List <DateTime>()
                };
                // Populate dates in week for new items.
                for (var dt = forcastingDataItem.Time; dt <= forcastingDataItem.Time.AddDays(6); dt = dt.AddDays(1))
                {
                    forcastingDataItem.DatesInWeek.Add(dt);
                }
                // Create Time Features for new week.
                forcastingDataItem = CreateTimeFeatures(forcastingDataItem);
                // Create Fourier Features for new week.
                forcastingDataItem = CreateFourierFeatures(forcastingDataItem);
                forecastData.Add(forcastingDataItem);
            }
            return(forecastData);
        }
コード例 #3
0
        public static List <ForecastingData> GetForecastingDataFromLocal(string fileName)
        {
            string sourceFile = $"{Environment.CurrentDirectory}\\Datasets\\{fileName}.csv";

            return(File.ReadAllLines(sourceFile)
                   .Skip(1)
                   .Select(line => ForecastingData.FromCsv(line))
                   .ToList());
        }
コード例 #4
0
        public static List <ForecastingData> GetForecastingDataFromLocal(string fileName)
        {
            //set path based on OS
            string sourceFile = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ?
                                $"{Environment.CurrentDirectory}\\Datasets\\{fileName}.csv"
                : sourceFile = $"{Environment.CurrentDirectory}//Datasets//{fileName}.csv";

            return(File.ReadAllLines(sourceFile)
                   .Skip(1)
                   .Select(line => ForecastingData.FromCsv(line))
                   .ToList());
        }
コード例 #5
0
        public ForecastingData CreateFourierFeatures(ForecastingData forecastData)
        {
            // Set seasonality to 52 which is the number of weeks in a year.

            var seasonality = 52;

            forecastData.FreqCos1 = Math.Cos(forecastData.WeekOfYear * 2 * Math.PI * 1 / seasonality);
            forecastData.FreqSin1 = Math.Sin(forecastData.WeekOfYear * 2 * Math.PI * 1 / seasonality);

            forecastData.FreqCos2 = Math.Cos(forecastData.WeekOfYear * 2 * Math.PI * 2 / seasonality);
            forecastData.FreqSin2 = Math.Sin(forecastData.WeekOfYear * 2 * Math.PI * 2 / seasonality);

            forecastData.FreqCos3 = Math.Cos(forecastData.WeekOfYear * 2 * Math.PI * 3 / seasonality);
            forecastData.FreqSin3 = Math.Sin(forecastData.WeekOfYear * 2 * Math.PI * 3 / seasonality);

            forecastData.FreqCos4 = Math.Cos(forecastData.WeekOfYear * 2 * Math.PI * 4 / seasonality);
            forecastData.FreqSin4 = Math.Sin(forecastData.WeekOfYear * 2 * Math.PI * 4 / seasonality);


            return(forecastData);
        }