Advertisement
Guest User

Untitled

a guest
Oct 12th, 2021
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import fetch from 'node-fetch';
  2.  
  3. const ageMap = {
  4.   "10000": "all",
  5.   "41700": "0-65",
  6.   "53950": "65-80",
  7.   "21700": "80+"
  8. };
  9.  
  10. const sexMap = {
  11.   "1100": "all"
  12. };
  13.  
  14. const residents = {
  15.   "2015": (16992010 + 17072044) / 2,
  16.   "2016": (16992010 + 17072044) / 2,
  17.   "2017": (17091456 + 17172903) / 2,
  18.   "2018": (17192306 + 17271231) / 2,
  19.   "2019": (17299343 + 17399364) / 2,
  20.   "2020": (17422992 + 17469635) / 2,
  21.   "2021": (17422992 + 17469635) / 2
  22. };
  23.  
  24. function range(start, stop, step) {
  25.   var a = [start], b = start;
  26.   while (b < stop) {
  27.     a.push(b += step || 1);
  28.   }
  29.   return a;
  30. }
  31.  
  32. const selectSex = (sex = 1100) => `(Geslacht eq '${sex}')`;
  33. const selectAge = (age = 10000) => `(LeeftijdOp31December eq '${age}')`;
  34. const selectWeek = (year, week) => `(Perioden eq '${year}W${100 + week}')`;
  35. const selectYear = (year, startWeek = 2, endWeek = 51) => range(startWeek, endWeek).map((week) => selectWeek(year, week));
  36.  
  37. function buildUrl(year, startWeek = 2, endWeek = 51) {
  38.   const filterSexes = [1100].map(selectSex);
  39.   const filterAges = [10000, 41700, 53950, 21700].map(selectAge);
  40.   const filterPeriods = selectYear(year, startWeek, endWeek);
  41.   const select = `Geslacht, LeeftijdOp31December, Perioden, Overledenen_1`;
  42.   const filter = `(${filterSexes.join(' or ')}) and (${filterAges.join(' or ')}) and (${filterPeriods.join(' or ')})`;
  43.   return `https://opendata.cbs.nl/ODataApi/odata/70895ned/UntypedDataSet?$filter=${filter}&$select=${select}`
  44. }
  45.  
  46. async function main() {
  47.   const data = [];
  48.  
  49.   const getYearTasks = range(2015, 2021).map((year) => ({year, get: new Promise((resolve, reject) => {
  50.     (async () => {
  51.       try {
  52.         const response = await fetch(buildUrl(year, 29, 39));
  53.         const json = await response.json();
  54.         resolve(json);
  55.       } catch(e) {
  56.         reject(e);
  57.       }
  58.     })();
  59.   })}));
  60.  
  61.   for(const getYearTask of getYearTasks) {
  62.     const deathsWeekMap = {};
  63.     const yearData = await getYearTask.get;
  64.     const yearValues = yearData.value;
  65.  
  66.     for(const value of yearValues) {
  67.       const sex = sexMap[value['Geslacht']];
  68.       const age = ageMap[value['LeeftijdOp31December']];
  69.       const year = Number(value['Perioden'].substring(0, 4));
  70.       const week = Number(value['Perioden'].substring(6, 8));
  71.       const deaths = Number(value['Overledenen_1']);
  72.       if(!deathsWeekMap[week]) {
  73.         deathsWeekMap[week] = {};
  74.       }
  75.       deathsWeekMap[week]['Week'] = `${year} week ${week}`;
  76.       deathsWeekMap[week][age] = deaths;
  77.     }
  78.  
  79.     data.push(Object.values(deathsWeekMap));
  80.   }
  81.  
  82.   const [during_2021, during_2020, ...before_2020_rest] = data.reverse();
  83.  
  84.   {
  85.     console.log("all:");
  86.     const during_2020_total = during_2020.reduce((r, week) => week['all'] + r, 0);
  87.     const during_2021_total = during_2021.reduce((r, week) => week['all'] + r, 0);
  88.     const before_2020_average = before_2020_rest.reduce((r, year) => year.reduce((r, week) => week['all'] + r, 0) + r, 0) / before_2020_rest.length;
  89.  
  90.     console.log("deaths during 2020 week 29-39:\n", during_2020_total);
  91.     console.log("deaths during 2021 week 29-39:\n", during_2021_total);
  92.     console.log("average between 2015 until 2019 week 29-39:\n", before_2020_average);
  93.     console.log("difference before 2020 vs during 2020 week 29-39:\n", during_2020_total - before_2020_average);
  94.     console.log("difference before 2020 vs during 2021 week 29-39:\n", during_2021_total - before_2020_average);
  95.   }
  96.   console.log();
  97.   {
  98.     console.log("0-65:");
  99.     const during_2020_total = during_2020.reduce((r, week) => week['0-65'] + r, 0);
  100.     const during_2021_total = during_2021.reduce((r, week) => week['0-65'] + r, 0);
  101.     const before_2020_average = before_2020_rest.reduce((r, year) => year.reduce((r, week) => week['0-65'] + r, 0) + r, 0) / before_2020_rest.length;
  102.  
  103.     console.log("deaths during 2020 week 29-39:\n", during_2020_total);
  104.     console.log("deaths during 2021 week 29-39:\n", during_2021_total);
  105.     console.log("average between 2015 until 2019 week 29-39:\n", before_2020_average);
  106.     console.log("difference before 2020 vs during 2020 week 29-39:\n", during_2020_total - before_2020_average);
  107.     console.log("difference before 2020 vs during 2021 week 29-39:\n", during_2021_total - before_2020_average);
  108.   }
  109.   console.log();
  110.   {
  111.     console.log("65-80:");
  112.     const during_2020_total = during_2020.reduce((r, week) => week['65-80'] + r, 0);
  113.     const during_2021_total = during_2021.reduce((r, week) => week['65-80'] + r, 0);
  114.     const before_2020_average = before_2020_rest.reduce((r, year) => year.reduce((r, week) => week['65-80'] + r, 0) + r, 0) / before_2020_rest.length;
  115.  
  116.     console.log("deaths during 2020 week 29-39:\n", during_2020_total);
  117.     console.log("deaths during 2021 week 29-39:\n", during_2021_total);
  118.     console.log("average between 2015 until 2019 week 29-39:\n", before_2020_average);
  119.     console.log("difference before 2020 vs during 2020 week 29-39:\n", during_2020_total - before_2020_average);
  120.     console.log("difference before 2020 vs during 2021 week 29-39:\n", during_2021_total - before_2020_average);
  121.   }
  122.   console.log();
  123.   {
  124.     console.log("80+:");
  125.     const during_2020_total = during_2020.reduce((r, week) => week['80+'] + r, 0);
  126.     const during_2021_total = during_2021.reduce((r, week) => week['80+'] + r, 0);
  127.     const before_2020_average = before_2020_rest.reduce((r, year) => year.reduce((r, week) => week['80+'] + r, 0) + r, 0) / before_2020_rest.length;
  128.  
  129.     console.log("deaths during 2020 week 29-39:\n", during_2020_total);
  130.     console.log("deaths during 2021 week 29-39:\n", during_2021_total);
  131.     console.log("average between 2015 until 2019 week 29-39:\n", before_2020_average);
  132.     console.log("difference before 2020 vs during 2020 week 29-39:\n", during_2020_total - before_2020_average);
  133.     console.log("difference before 2020 vs during 2021 week 29-39:\n", during_2021_total - before_2020_average);
  134.   }
  135. }
  136.  
  137. main().catch(x => console.error(x));
  138.  
  139.  
  140.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement