public async void ExportHopkinsData() { Status = "Exporting Johns Hopkins Data"; StorageFolder exportFolder = null; if (StorageApplicationPermissions.FutureAccessList.ContainsItem("ExportFolder")) { exportFolder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync("ExportFolder"); } else { var picker = new Windows.Storage.Pickers.FolderPicker(); picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop; picker.FileTypeFilter.Add("*"); exportFolder = await picker.PickSingleFolderAsync(); if (exportFolder != null) { StorageApplicationPermissions.FutureAccessList.AddOrReplace("ExportFolder", exportFolder); } } DateTime startDate = new DateTime(2020, 3, 1); Dictionary <string, List <CalculatedValue> > listOfFiles = null; listOfFiles = ProcessedJhStateData?.FirstOrDefault()?.OutputFiles; if (exportFolder == 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 exportFolder?.CreateFileAsync(kvp.Key + ".csv", Windows.Storage.CreationCollisionOption.ReplaceExisting); using (CsvFileWriter dataWriter = new CsvFileWriter(await csvFile.OpenStreamForWriteAsync())) { CsvRow headerRow = new CsvRow(); headerRow.Add("Date"); foreach (ProcessedJhState ps in ProcessedJhStateData) { headerRow.Add(ps.CoreStateData.State.Code.ToString()); } dataWriter.WriteRow(headerRow); while (currentDate.Date <= latestDate) { CsvRow nextRow = new CsvRow(); nextRow.Add(currentDate.Date.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture)); foreach (ProcessedJhState ps in ProcessedJhStateData) { 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)); } } dataWriter.WriteRow(nextRow); currentDate = currentDate + new TimeSpan(1, 0, 0, 0); } } } Status = "Done with JH Data"; }
public async void ProcessHopkinsData() { Status = "Loading John Hopkins Data"; var jhFiles = await jhFolder.GetFilesAsync(); jhStateData.Clear(); // set up all the states with all the dates foreach (StorageFile file in jhFiles) { if (file.FileType.Contains("csv")) { var stream = await file.OpenStreamForReadAsync(); using (var reader = new StreamReader(stream)) { using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { var rawData = new List <RawJhState>(); csv.Read(); csv.ReadHeader(); while (csv.Read()) { var tests = csv[11]; var Province_State = csv.GetField("Province_State"); var Country_Region = csv.GetField("Country_Region"); var Last_Update = csv.GetField("Last_Update"); var Lat = Double.TryParse(csv.GetField("Lat"), out double lat) ? lat : 0; var Long_ = Double.TryParse(csv.GetField("Long_"), out double lon) ? lon : 0; var Confirmed = Int32.TryParse(csv.GetField("Confirmed"), out int con) ? con : 0; var Deaths = Int32.TryParse(csv.GetField("Deaths"), out int d) ? d : 0; var Recovered = Int32.TryParse(csv.GetField("Recovered"), out int rec) ? rec : 0; var Active = Int32.TryParse(csv.GetField("Active"), out int activ) ? activ : 0; var FIPS = Int32.TryParse(csv.GetField("FIPS"), out int fips) ? fips : 0; var Incident_Rate = Double.TryParse(csv.GetField("Incident_Rate"), out double incident) ? incident : 0; var People_Tested = Int32.TryParse(csv[11], out int test) ? test : 0; var People_Hospitalized = Int32.TryParse(csv.GetField("People_Hospitalized"), out int hosp) ? hosp : 0; var Mortality_Rate = Double.TryParse(csv[13], out double mort) ? mort : 0; var UID = Int32.TryParse(csv.GetField("UID"), out int uid) ? uid : 0; var ISO3 = csv.GetField("ISO3"); var Testing_Rate = Double.TryParse(csv.GetField("Testing_Rate"), out double testrate) ? testrate : 0; //var Hospitalization_Rate = Double.TryParse(csv.GetField("Hospitalization_Rate"), out double hosprate) ? hosprate : 0; var newDay = new RawJhState() { Province_State = Province_State, Country_Region = Country_Region, Last_Update = Last_Update, Lat = Lat, Long_ = Long_, Confirmed = Confirmed, Deaths = Deaths, Recovered = Recovered, Active = Active, FIPS = FIPS, Incident_Rate = Incident_Rate, People_Tested = People_Tested, People_Hospitalized = People_Hospitalized, Mortality_Rate = Mortality_Rate, UID = UID, ISO3 = ISO3, Testing_Rate = Testing_Rate, //Hospitalization_Rate = Hospitalization_Rate }; rawData.Add(newDay); } foreach (RawJhState rjhs in rawData) { if (jhStateData.FirstOrDefault(st => st.StateString == rjhs.Province_State) == null) { jhStateData.Add(new JhState(rjhs.Province_State)); } JhCovidDay covidDay = new JhCovidDay(rjhs, file.Name); jhStateData.FirstOrDefault(st => st.StateString == rjhs.Province_State).CovidData.Add(covidDay); } } } } } jhStateData.RemoveAll(jhs => jhs.State == null); jhStateData = PerformStateSortByRegion(jhStateData); Status = "Processing Johns Hopkins Data"; ProcessedJhStateData.Clear(); List <Metrics> metrics = new List <Metrics>() { Metrics.Deaths, Metrics.Tests, Metrics.Cases, Metrics.PercentPositive }; foreach (JhState state in jhStateData) { if (state?.State != null) { var processedJhState = new ProcessedJhState(state); var rollAverage = Int32.TryParse(RollingAverage, out int rollingAvg) ? rollingAvg : 7; if (rollAverage == 0) { rollAverage = 7; } processedJhState.ProcessDailyData(metrics, true, rollAverage); //processedJhState.ProcessDailyData(metrics, false, rollAverage); processedJhState.ProcessCumulativeData(metrics); ProcessedJhStateData.Add(processedJhState); } } ExportHopkinsData(); }