public void ProcessData() { Status = "Processing data..."; ProcessedStateData.Clear(); ProcessedCountryData.Clear(); List<Metrics> metrics = new List<Metrics>(); if (IncludeDeaths) metrics.Add(Metrics.Deaths); if (IncludeCases) metrics.Add(Metrics.Cases); if (IncludeTests) metrics.Add(Metrics.Tests); if (IncludePercentPositive) metrics.Add(Metrics.PercentPositive); if (IncludeCurrentHospitalizations) metrics.Add(Metrics.HospitalCurrent); if (IncludeNewHospitalizations) metrics.Add(Metrics.HospitalNew); if (UseCovidDataSource) { foreach (State s in StateData) { var processedState = new ProcessedState(s); if (UseDailyData) { var parseSuccess = Int32.TryParse(RollingAverageNumber, out int rollingAvg); if (rollingAvg == 0) rollingAvg = 7; processedState.ProcessDailyData(metrics, ProcessRollingAverage, rollingAvg, ProcessPerCapita); } else if (UseCumeData) { processedState.ProcessCumulativeData(metrics, ProcessPerCapita); } ProcessedStateData.Add(processedState); } } else if (UseOwidSource) { foreach (OwidCountry c in CountryData) { var processedCountry = new ProcessedCountry(c); if (UseDailyData) { int rollingAvg = 7; var parseSuccess = Int32.TryParse(RollingAverageNumber, out rollingAvg); if (rollingAvg == 0) rollingAvg = 7; processedCountry.ProcessDailyData(metrics, ProcessRollingAverage, rollingAvg, ProcessPerCapita); } else if (UseCumeData) { processedCountry.ProcessCumulativeData(metrics, ProcessPerCapita); } ProcessedCountryData.Add(processedCountry); } } isDataProcessed = true; Status = "Data Processed!"; }
public async void ExportData() { Status = "Exporting Data..."; var folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync("ExportFolder"); // https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-using-file-and-folder-pickers DateTime startDate = new DateTime(2020, 3, 1); Dictionary<string, List<CalculatedValue>> listOfFiles = null; if (UseCovidDataSource) listOfFiles = ProcessedStateData?.FirstOrDefault()?.OutputFiles; else if (UseOwidSource) { listOfFiles = ProcessedCountryData?.FirstOrDefault()?.OutputFiles; startDate = new DateTime(2020, 1, 1); } if (folder == null || listOfFiles == null) return; foreach (KeyValuePair<string, List<CalculatedValue>> kvp in listOfFiles) { DateTime currentDate = startDate; DateTime latestDate = listOfFiles.Values.FirstOrDefault().Max(cv => cv.Date); StorageFile csvFile = await folder?.CreateFileAsync(kvp.Key + ".csv", Windows.Storage.CreationCollisionOption.ReplaceExisting); using (CsvFileWriter dataWriter = new CsvFileWriter(await csvFile.OpenStreamForWriteAsync())) { CsvRow headerRow = new CsvRow(); headerRow.Add("Date"); if (UseCovidDataSource) { foreach (ProcessedState ps in ProcessedStateData) headerRow.Add(ps.CoreStateData.StateBase.Code.ToString()); } else if (UseOwidSource) { foreach (ProcessedCountry pc in ProcessedCountryData) headerRow.Add(pc.CoreCountryData.CountryName); } dataWriter.WriteRow(headerRow); while (currentDate.Date <= latestDate) { CsvRow nextRow = new CsvRow(); nextRow.Add(currentDate.Date.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture)); if (UseCovidDataSource) { foreach (ProcessedState ps in ProcessedStateData) { var calcVals = ps.OutputFiles[kvp.Key].FirstOrDefault(calcv => calcv.Date.Date == currentDate.Date); if (calcVals == null) nextRow.Add("0"); else nextRow.Add(calcVals.Value.ToString("F3", CultureInfo.InvariantCulture)); } } else if (UseOwidSource) { foreach (ProcessedCountry pc in ProcessedCountryData) { var calcVals = pc.OutputFiles[kvp.Key].FirstOrDefault(calcv => calcv.Date.Date == currentDate.Date); if (calcVals == null) nextRow.Add("0"); else nextRow.Add(calcVals.Value.ToString("F3", CultureInfo.InvariantCulture)); } } dataWriter.WriteRow(nextRow); currentDate = currentDate + new TimeSpan(1, 0, 0, 0); } } } Status = "Data Exported!"; }