getData = async (endpoint) => {
const minDate = new Date("2018-10-01 00:00:00")
const maxDate = new Date("2018-10-05 00:00:00")
const allData = await d3.csv(endpoint).then((data) => {
return data.map((datapoint) => {
const parseTime = d3.timeParse("%m/%d/%Y")
const date = new Date(datapoint.datetime)
const hour = date.getHours()
const minute = date.getMinutes()
let wait = +datapoint["SPOSTMIN"]
wait = wait >= 0 ? wait : 0
const ref = `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`
return {
date,
ref,
hour,
minute,
wait
}
}).sort((a, b) => a.date - b.date)
.filter((d) => (d.date> minDate && d.date < maxDate) )
})
const rollup = d3Array.rollup(allData, v => v, d => d.ref, d => d.hour)
const rollupArray = Array.from(rollup)
const rolledUpTimes = rollupArray.map(dateArray => {
const localDate = dateArray[0]
const valuesMap = dateArray[1]
const times = {}
for (let key of valuesMap.keys()) {
const valueArray = valuesMap.get(key)
let wait = 0
const count = valueArray.length
valueArray.forEach(timeObject => {
wait += timeObject.wait
})
times[key] = Math.round(wait/count)
}
return {date: localDate, times}
})
return rolledUpTimes
}