コード例 #1
0
        private TimeSeriesByDay GroupByContinents(TimeSeriesByDay countiesTimeSeriesByDay)
        {
            var continentTimeSeries = new TimeSeriesByDay();

            foreach (var countryDay in countiesTimeSeriesByDay.DaysWithLocationData)
            {
                var continentsData = countryDay.LocationsData.GroupBy(countryData => countryData.Continent).Select(
                    continentData => new LocationData
                {
                    Continent  = continentData.Key,
                    TotalCases = continentData.Sum(countryData => countryData.TotalCases)
                }).ToList();

                var continentDay = new DayWithLocationsData
                {
                    DayNumber     = countryDay.DayNumber,
                    Date          = countryDay.Date,
                    LocationsData = continentsData.Where(continentData => !string.IsNullOrEmpty(continentData.Continent)).ToList()
                };

                continentTimeSeries.DaysWithLocationData.Add(continentDay);
            }

            this.AdjustRealDaysData(continentTimeSeries);

            return(continentTimeSeries);
        }
コード例 #2
0
        private TimeSeriesByDay AggregateTimeSeries(TimeSeriesByDay countriesTimeSeriesByDay, PredictionSettings predictionSettings)
        {
            var aggregatedTimeSeries = new TimeSeriesByDay();

            foreach (var day in countriesTimeSeriesByDay.DaysWithLocationData)
            {
                var aggregatedTimeSeriesDay = new DayWithLocationsData
                {
                    DayNumber = day.DayNumber,
                    Date      = day.Date
                };

                foreach (var locationData in day.LocationsData)
                {
                    switch (predictionSettings.CountrySearchType)
                    {
                    case CountrySearchType.Inside when !string.IsNullOrEmpty(locationData.Country) && predictionSettings.Countries.Contains(locationData.Country):
                    case CountrySearchType.Outside when string.IsNullOrEmpty(locationData.Country) || !predictionSettings.Countries.Contains(locationData.Country):
                        aggregatedTimeSeriesDay.TotalCases += locationData.TotalCases;

                        break;
                    }
                }

                aggregatedTimeSeries.DaysWithLocationData.Add(aggregatedTimeSeriesDay);
            }

            this.AdjustRealDaysData(aggregatedTimeSeries);

            return(aggregatedTimeSeries);
        }
コード例 #3
0
        private TimeSeriesByDay GroupByCountries(TimeSeriesByDay readTimeSeriesByDay)
        {
            var countryTimeSeries = new TimeSeriesByDay();

            foreach (var countryDay in readTimeSeriesByDay.DaysWithLocationData)
            {
                var countriesData = countryDay.LocationsData.GroupBy(readData => readData.Country)
                                    .Select(
                    countryData => new LocationData
                {
                    Country    = countryData.Key,
                    TotalCases = countryData.Sum(readData => readData.TotalCases)
                }).ToList();

                var continentDay = new DayWithLocationsData
                {
                    DayNumber     = countryDay.DayNumber,
                    Date          = countryDay.Date,
                    LocationsData = countriesData
                };

                countryTimeSeries.DaysWithLocationData.Add(continentDay);
            }

            this.AdjustRealDaysData(countryTimeSeries);

            return(countryTimeSeries);
        }
コード例 #4
0
        private TimeSeriesByDay ReadTimeSeries(DataTable timeSeriesDataTable)
        {
            var dayNumber = 1;
            var daysData  = new List <DayWithLocationsData>();

            for (var columnIndex = 4; columnIndex < timeSeriesDataTable.Columns.Count; columnIndex++)
            {
                var dayData = new DayWithLocationsData
                {
                    DayNumber = dayNumber,
                    Date      = DateTime.Parse(timeSeriesDataTable.Columns[columnIndex].ColumnName)
                };

                for (var rowIndex = 0; rowIndex < timeSeriesDataTable.Rows.Count; rowIndex++)
                {
                    var currentCountryName = timeSeriesDataTable.Rows[rowIndex][1].ToString();
                    var totalCases         = int.Parse(timeSeriesDataTable.Rows[rowIndex][columnIndex].ToString());

                    var locationData = new LocationData
                    {
                        Country    = currentCountryName,
                        Continent  = this.countryToContinentConverter.GetContinentByCountry(currentCountryName),
                        TotalCases = totalCases
                    };

                    dayData.LocationsData.Add(locationData);
                }

                daysData.Add(dayData);
                dayNumber++;
            }

            return(new TimeSeriesByDay {
                DaysWithLocationData = daysData
            });
        }