Guest User

Untitled

a guest
May 14th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const https = require('https');
  2.  
  3. loadedData = {}
  4. function loadJson(name, url) {
  5.     https.get(url, (resp) => {
  6.         let data = '';
  7.  
  8.         resp.on('data', (chunk) => {data += chunk})
  9.         resp.on('end', () => {
  10.             loadedData[name] = JSON.parse(data)
  11.             renderTable()
  12.         });
  13.  
  14.     }).on("error", (err) => {
  15.       console.log("Error: " + err.message);
  16.     });
  17. }
  18.  
  19. loadJson("cases", 'https://epistat.sciensano.be/Data/COVID19BE_CASES_AGESEX.json')
  20. loadJson("deaths", "https://epistat.sciensano.be/Data/COVID19BE_MORT.json")
  21. loadJson("hosp", "https://epistat.sciensano.be/Data/COVID19BE_HOSP.json")
  22. loadJson("tests", "https://epistat.sciensano.be/Data/COVID19BE_tests.json")
  23. let columns = ['casesFlanders', 'casesBrussels', 'casesWallonia', 'casesUnknown', 'casesNew', 'casesTotal', 'deathsNew', 'deathsTotal', 'activeICU', 'activeTotal', 'hospNew', 'hospTotal', 'hospDisch', 'dischTotal', 'testsPosPct', 'testsNew', 'testsTotal']
  24.  
  25. function renderTable() {
  26.     if (!loadedData.cases || !loadedData.deaths || !loadedData.hosp || !loadedData.tests)
  27.         return // wait for all data to be loaded
  28.    
  29.     let data = {}
  30.     function addToDateCount(date, category, count) {
  31.         if (!data[date]) {
  32.             // init all columns to 0
  33.             data[date] = {}
  34.             for (let c of columns) {
  35.                 data[date][c] = 0
  36.             }
  37.         }
  38.         data[date][category] += count
  39.     }
  40.    
  41.     let totalCases = 0
  42.     for (let r of loadedData.cases) {
  43.         let date = r["DATE"]
  44.         let region = r["REGION"]
  45.         let cases = r["CASES"]
  46.         if (region == "Flanders" || region == "Brussels" || region == "Wallonia") {
  47.             addToDateCount(date, "cases" + region, cases)
  48.         } else {
  49.             addToDateCount(date, "casesUnknown", cases)
  50.         }
  51.         addToDateCount(date, "casesNew", cases)
  52.         totalCases += cases
  53.         data[date].casesTotal = totalCases
  54.     }
  55.    
  56.     let totalDeaths = 0
  57.     for (let r of loadedData.deaths) {
  58.         let date = r["DATE"]
  59.         let deaths = r["DEATHS"]
  60.         addToDateCount(date, "deathsNew", deaths)
  61.         totalDeaths += deaths
  62.         data[date].deathsTotal = totalDeaths
  63.     }
  64.    
  65.     let totalHosp = 0
  66.     let totalDischHosp = 0
  67.     for (let r of loadedData.hosp) {
  68.         let date = r["DATE"]
  69.        
  70.         addToDateCount(date, "activeICU", r["TOTAL_IN_ICU"])
  71.         addToDateCount(date, "activeTotal", r["TOTAL_IN"])
  72.         addToDateCount(date, "hospNew", r["NEW_IN"])
  73.         addToDateCount(date, "hospDisch", r["NEW_OUT"])
  74.        
  75.         totalHosp += r["NEW_IN"]
  76.         data[date].hospTotal = totalHosp
  77.         totalDischHosp += r["NEW_OUT"]
  78.         data[date].dischTotal = totalDischHosp
  79.     }
  80.    
  81.     let totalTests = 0
  82.     for (let r of loadedData.tests) {
  83.         let date = r["DATE"]
  84.         let tests = r["TESTS"]
  85.         addToDateCount(date, "testsNew", tests)
  86.         totalTests += tests
  87.         data[date].testsTotal = totalTests
  88.         data[date].testsPosPct = 100 * data[date].casesNew / totalTests
  89.     }
  90.    
  91.     let tableRows = []
  92.     let formatFunctions = {}
  93.     for (let c of columns) {
  94.         let format = {}
  95.         if (c == "testsPosPct")
  96.             format = { maximumFractionDigits: 2, minimumFractionDigits: 2}
  97.        
  98.         let numberFormat = new Intl.NumberFormat('en-US', format)
  99.         formatFunctions[c] = (n) => {
  100.             if (c == "casesNew" || c == "casesTotal") {
  101.                 return ("'''" + numberFormat.format(n) + "'''").padStart(13, ' ')
  102.             }
  103.             if (n == 0) {
  104.                 return ''.padStart(7, ' ')
  105.             }
  106.             let formattedNumber = numberFormat.format(n)
  107.             if (c == "testsPosPct")
  108.                 formattedNumber += '%'
  109.             return formattedNumber.padStart(7, ' ')
  110.         }
  111.     }
  112.     for (let date of Object.keys(data).sort()) {
  113.         let values = columns.map((c) => formatFunctions[c](data[date][c]))
  114.         tableRows.push([date, ...values, ''])
  115.     }
  116.    
  117.     console.log("TABLE:")
  118.     console.log('|-\n' + tableRows.map(r => '||' + r.join('||')).join('\n|-\n'))
  119. }
Add Comment
Please, Sign In to add comment