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); }
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); }
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); }
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 }); }