Пример #1
0
        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";
        }
Пример #2
0
        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();
        }