...
 
Commits (13)
import { appSettingsDefault } from '../data-on-a-map-app/config/default/app'
import { normalizeLetters } from '../data-on-a-map-app/src/util/data'
import { moment } from "../data-on-a-map-app/src/util/time"
const cities = [
"Amsterdam",
"Barcelona",
"Fundão",
"Gent",
"Helsinki",
"Luxemburg",
"Milano",
"Palermo",
"Roma",
"Teresina",
"Torino"
]
const travelCategories = [
"Biking",
"Walking",
"Public",
"Bus",
"Metro",
"Train",
]
const citiesNav = {}
cities.forEach(city => { citiesNav[city] = "/app-data/" + normalizeLetters(city.toLowerCase()) })
const citiesPages = cities.map(city => {
return {
route: "/app-data/" + normalizeLetters(city.toLowerCase()),
title: city,
intro: `<p>Visualisation of selected data from the MUV app for ${city}.</p><p>&nbsp;</p>`,
content: [
{
type: 'scatter-chart',
title: '1. traveled time vs traveled distance',
settings: {
data: `https://dataviz.muv2020.eu/data/${normalizeLetters(city)}_1.json`,
x: {
name: 'traveled time (log)',
dataKey: "time_travelled",
type: "number",
scale: "log",
unit: " min",
domain: [1, 1440],
interval: "preserveStartEnd",
ticks: [1, 10, 100, 1000],
allowDecimals: false
},
y: {
name: 'traveled distance (log)',
dataKey: "distance_travelled",
type: "number",
unit: " km",
domain: [1, 60],
ticks: [0.5, 1, 30, 60],
scale: "log",
}
}
},
{
type: 'line-chart',
title: '2. traveled time vs traveled distance per modality',
settings: {
data: `https://dataviz.muv2020.eu/data/${normalizeLetters(city)}_2.json`,
categories: travelCategories,
x: {
name: "traveled time",
dataKey: "time_travelled",
unit: " min",
tickFormatter: value => {
if(value) return value.replace(",", "-")
}
},
y: {
name: "traveled distance",
unit: " km",
domain: [0, 45],
ticks: [0, 15, 30, 45]
}
}
},
{
type: 'bar-chart',
title: '3. app user statistics',
settings: {
data: `https://dataviz.muv2020.eu/data/${normalizeLetters(city)}_3.json`,
categories: ['yes', 'no'],
x: {
dataKey: "question",
},
y: {
name: " users"
}
}
},
{
type: 'bar-chart',
title: '4. vehicle owners by modality',
settings: {
data: `https://dataviz.muv2020.eu/data/${normalizeLetters(city)}_4.json`,
categories: ['TRUE', 'FALSE'],
x: {
dataKey: "modal_type"
},
y: {
name: " count"
}
}
},
{
type: 'area-chart',
title: '5. travelled distance per modality over time',
settings: {
data: `https://dataviz.muv2020.eu/data/${normalizeLetters(city)}_5.json`,
categories: travelCategories,
x: {
dataKey: "month",
tickFormatter: t => {
return t !== 'auto' ? moment(t).format("MMM YY") : t
}
},
y: {
name: "travelled distance (km)",
},
tooltip: {
labelFormatter: t => moment(t).format("MMM YY")
}
}
},
{
type: 'area-chart',
title: '6. Number of trips per modality over time',
settings: {
data: `https://dataviz.muv2020.eu/data/${normalizeLetters(city)}_6.json`,
categories: travelCategories,
x: {
dataKey: "month",
tickFormatter: t => {
return t !== 'auto' ? moment(t).format("MMM YY") : t
}
},
y: {
name: " trips"
},
tooltip: {
labelFormatter: t => moment(t).format("MMM YY")
}
}
}
]
}
})
let pagesHtml = ''
Object.keys(citiesNav).forEach(city => {
pagesHtml += `<a class="btn" href="${citiesNav[city]}">${city}</a>`
})
export const appSettings = {
...appSettingsDefault,
language: "en",
// colors: [
// "#E72F75",
// "#6BBB7E",
// "#F9B222",
// "#60368C",
// "#4FC6E0",
// "#3069B3"
// ],
colors: [
"#E72F75",
"#6BBB7E",
"#60368C",
"#3069B3",
"#3f97ca",
"#4FC6E0"
],
colorsBinary: [
"#6BBB7E",
"#E72F75",
],
header: {
title: "MUV",
subtitle: "Data Visualization",
navigation: {
"App Data": citiesNav,
"Monitoring Stations Data": "/monitoring-stations-data/"
}
},
mapRoute: "/monitoring-stations-data/",
pages: [
...citiesPages,
{
route: "/app-data/",
title: "App Data",
intro: `<p>Choose city:</p><p>${ pagesHtml }</p><p>&nbsp;</p>`,
content: []
},
{
route: "/",
title: "",
intro: `
<p>This site shows data from monitoring stations in six European pilot cities of the <a href="https://www.muv2020.eu/" target='_blank' rel='noopener noreferrer' style="white-space:nowrap;">MUV project.</a> and usage data from the <a href="https://www.muvapp.eu/" target='_blank' rel='noopener noreferrer' style="white-space:nowrap;">MUV app</a>. Choose below which data you want to explore.</p>
<div class="columns">
<div class="column">
<a href="/app-data/"><img src="https://dataviz.muv2020.eu/images/app-data.png" /></a>
<h2>App Data</h2>
<p>Visualization of selected data from the MUV app.</p>
<p>Choose city:</p><p>${ pagesHtml }</p>
</div>
<div class="column">
<a href="/monitoring-stations-data/"><img src="https://dataviz.muv2020.eu/images/monitoring-stations-data.png" /></a>
<h2><a href="/monitoring-stations-data/">Monitoring Stations Data</a></h2>
<p>Visualization of measurements from monitoring stations in six European pilot cities of the MUV project.</p>
<a class="btn" href="/monitoring-stations-data/">Explore Monitoring Stations Data</a>
</div>
</div>
<div style="display:flex; align-items: flex-start; margin-top:6rem;">
<img src="https://dataviz.muv2020.eu/images/eu-flag.png" style='width:30px; height:auto; flex-shrink:0; margin: 0.15em 0.5em 0 0;' />
<small style='font-size:12px'>
<em>This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No [723521]</em>
</small>
</div>
`,
content: []
}
]
}
......@@ -26,14 +26,15 @@ export const dataGroups = [
0: { label: "Good", color: colors[0] },
70: { label: "Bad", color: colors[1] },
150: { label: "Very bad", color: colors[2] },
}
},
tooltip: "EU Air Quality directive: limit value of 25 μg/m3 as annual average. Source: <a href='https://www.eea.europa.eu/themes/air/air-quality-concentrations/air-quality-standards' target='_blank' rel='noopener noreferrer'>eea.europa.eu</a>"
}
],
//tooltip: "",
tooltip: "<p>The daily concentration of PM2,5 is greatly influenced by the weather. In cities the concentrations are slightly higher during the day than at night, due to traffic. PM2,5 is a collective term for suspended particles that can be inhaled and have a maximum diameter of 0,0025 millimetres. As PM2,5 is even smaller than PM10 it can penetrate even deeper into the lungs and causes even more significant health risks. Source: <a href='https://www.luchtmeetnet.nl/' target='_blank' rel='noopener noreferrer'>luchtmeetnet.nl</a></p>",
type: "StationLayer",
sources: [
muv,
//holu
holu,
muv
]
},
......@@ -49,13 +50,15 @@ export const dataGroups = [
0: { label: "Good", color: colors[0] },
100: { label: "Bad", color: colors[1] },
250: { label: "Very bad", color: colors[2] },
}
},
tooltip: "EU Air Quality directive: limit of 40 μg/m3 as annual average, and a maximum of 35 days per year in which the limit 50 μg/m3 for hourly averages are exceeded. Source: <a href='https://www.eea.europa.eu/themes/air/air-quality-concentrations/air-quality-standards' target='_blank' rel='noopener noreferrer'>eea.europa.eu</a>"
}
],
tooltip: "<p>De daily concentration of particulate matter (PM10) is influenced by the weather. In cities the concentrations are slightly higher during the day than at night, due to traffic. PM10 is a collective term for suspended particles that can be inhaled and have a maximum diameter of 0,01 millimetres. Source: <a href='https://www.luchtmeetnet.nl/' target='_blank' rel='noopener noreferrer'>luchtmeetnet.nl</a></p>",
type: "StationLayer",
sources: [
muv,
//holu
holu
]
},
......@@ -71,13 +74,15 @@ export const dataGroups = [
0: { label: "Good", color: colors[0] },
140: { label: "Bad", color: colors[1] },
250: { label: "Very bad", color: colors[2] },
}
},
tooltip: "EU Air Quality directive: limit of 40 μg/m3 as annual average, and a maximum of 18 days per calendar year in which the limit 200 μg/m3 for hourly averages are exceeded. Source: <a href='https://www.eea.europa.eu/themes/air/air-quality-concentrations/air-quality-standards' target='_blank' rel='noopener noreferrer'>eea.europa.eu</a>"
}
],
tooltip: "<p>The highest concentrations of NO2 exist during the morning and evening rush hour. NOx is emitted when fuel is being burned e.g. in transport, industrial processes and power generation. NO2 is formed in a reaction between nitric oxide (NO) and ozone (O3). The weather and traffic influence the concentrations substantially. Source: <a href='https://www.luchtmeetnet.nl/' target='_blank' rel='noopener noreferrer'>luchtmeetnet.nl</a></p>",
type: "StationLayer",
sources: [
muv,
//holu
holu
]
},
......@@ -96,8 +101,12 @@ export const dataGroups = [
},
}
],
tooltip: "<p>Ozone is not emitted directly into the atmosphere but is a secondary pollutant produced by reaction between nitrogen dioxide (NO2), hydrocarbons and sunlight. The ozone concentration is mainly weather dependent. In Europe citizens are warned if concentrations exceed 180 (μg/m3). The European alarm threshold is 240 (μg/m3). Source: <a href='https://www.luchtmeetnet.nl/' target='_blank' rel='noopener noreferrer'>luchtmeetnet.nl</a></p>",
type: "StationLayer",
sources: [ muv ]
sources: [
muv,
holu
]
},
}
......@@ -142,7 +151,9 @@ export const dataGroups = [
}
],
type: "StationLayer",
sources: [ muv ]
sources: [
muv
]
},
"humidity": {
......@@ -160,7 +171,9 @@ export const dataGroups = [
}
],
type: "StationLayer",
sources: [ muv ]
sources: [
muv
]
},
"pressure": {
......@@ -178,7 +191,9 @@ export const dataGroups = [
}
],
type: "StationLayer",
sources: [ muv ]
sources: [
muv
]
}
}
}
......
......@@ -24,7 +24,7 @@ export const mapLocations = [
]
},
{
name: "Ghent",
name: "Gent",
bounds: [
[3.700477, 51.066355],
[3.750341, 51.038297]
......@@ -88,12 +88,12 @@ export const lightSettings = {
}
const colors = {
background: "#eee",
background: "#f7f8fa",
water: "#61bcdb",
road: "#ddd",
wood: "#c6ddca",
text: "#000",
textHalo: "#eee"
textHalo: "#f7f8fa"
}
......
import { addMissingDataPoints } from "../../data-on-a-map-app/src/util/data"
import { addMissingDataPoints, addMissingDataPointsAll } from "../../data-on-a-map-app/src/util/data"
import { getNowHourISO, getDaysAgoHourISO } from "../../data-on-a-map-app/src/util/time"
const endPointDataPlatform = process.env.NODE_ENV === 'development' ? "http://localhost:1881" : "https://data.waag.org"
const endPointDataPlatformMUV = process.env.NODE_ENV === 'development' ? "http://localhost:1886" : "https://data.waag.org"
export default {
......@@ -36,15 +41,52 @@ export default {
}
},
all: async function(parameter) {
try {
const allResponse = await fetch(`${endPointDataPlatformMUV}/api/muv/getCalibratedStations`)
const all = await allResponse.json()
const start = getDaysAgoHourISO(14)
const end = getNowHourISO()
const rangeResponse = await fetch(`${endPointDataPlatform}/api/holu/holukit/calibrated/tail?parameter=${parameter}&start=${start}&end=${end}`)
const range = await rangeResponse.json()
const filterExtended = parameter === "no2" ? true : false
const stations = {}
all.filter(station => {
return filterExtended ? station.extended : true
}).forEach(station => {
const id = station.id > 1000000 ? "HLL_MUV_device_"+station.id : station.id.toString()
stations[id] = {
id: id,
name: station.tag + ": " + station.name,
type: station.extended ? "extended" : "basic",
source: "holu",
coordinates: [station.longitude, station.latitude],
}
})
const data = addMissingDataPointsAll(range, stations, start, end)
return data
} catch (error) {
console.log(error)
}
},
allold: async function(parameter) {
try {
const allResponse = await fetch(`https://data.waag.org/api/muv/getHoluStations`)
const allResponse = await fetch(`${endPointDataPlatformMUV}/api/muv/getCalibratedStations`)
const all = await allResponse.json()
const latestRawResponse = await fetch(`https://data.waag.org/api/getAllSensors`)
const latestRawResponse = await fetch(`${endPointDataPlatform}/api/getAllSensors`)
let latestRaw = await latestRawResponse.json()
const latestResponse = await fetch(`https://data.waag.org/api/holu/holukit/calibrated/recent`)
const latestResponse = await fetch(`${endPointDataPlatform}/api/holu/holukit/calibrated/recent`)
let latest = await latestResponse.json()
let offlineSensors = []
......@@ -56,11 +98,13 @@ export default {
const data = all.filter(sensor => {
return filterExtended ? sensor.extended : true
}).map(sensor => {
const sensorData = latest.find(o => +o.id === +sensor.id)
//const kitType = sensor.id > 1000000 ? "MUV-kit" : "HOLU-kit"
const idPrefix = sensor.id > 1000000 ? "HLL_MUV_device_" : ""
const sensorData = latest.find(o => o.id.toString().replace(idPrefix, "") === sensor.id.toString())
const sensorDataReturn = {
id: sensor.id.toString(),
//name: `HOLU-kit ${sensor.id.toString()}: ${sensor.tag} - ${sensor.name}`,
id: idPrefix + sensor.id,
name: `${sensor.tag}: ${sensor.name}`,
source: "holu",
type: sensor.extended ? "extended" : "basic",
......@@ -145,7 +189,13 @@ export default {
let data = []
if(parameter === "pm25" || parameter === "pm10") {
const responseRaw = await fetch(`https://data.waag.org/api/getHourlyValuesSensor?sensor_id=${station.id}&start=${start}&end=${end}`)
let rawURL = `${endPointDataPlatform}/api/holu/getHourlyValuesSensor?sensor_id=${station.id}&start=${start}&end=${end}`
if(station.id.includes('MUV')) {
rawURL = `${endPointDataPlatformMUV}/api/muv/ms/hourly?sensor_id=${station.id.replace('HLL_MUV_device_','')}&start=${start}&end=${end}`
}
const responseRaw = await fetch(rawURL)
const jsonRaw = await responseRaw.json()
let dataRaw = jsonRaw.map(m => {
......@@ -157,7 +207,7 @@ export default {
})
const responseCal = await fetch(`https://data.waag.org/api/holu/holukit/calibrated/hourly?sensor_id=${station.id}&start=${start}&end=${end}`)
const responseCal = await fetch(`${endPointDataPlatform}/api/holu/holukit/calibrated/hourly?sensor_id=${station.id}&start=${start}&end=${end}`)
const jsonCal = await responseCal.json()
let dataCal = jsonCal.map(m => {
......@@ -194,7 +244,7 @@ export default {
data.push(o)
}
} else {
const response = await fetch(`https://data.waag.org/api/holu/holukit/calibrated/hourly?sensor_id=${station.id}&start=${start}&end=${end}`)
const response = await fetch(`${endPointDataPlatform}/api/holu/holukit/calibrated/hourly?sensor_id=${station.id}&start=${start}&end=${end}`)
const json = await response.json()
data = json.map(m => {
......@@ -222,6 +272,6 @@ export default {
},
// download: function(id, parameter, start, end) {
// return `https://data.waag.org/api/holu/holukit/calibrated/hourly?sensor_id=${id}&start=${start}&end=${end}&format=csv`
// return `${endPointDataPlatform}/api/holu/holukit/calibrated/hourly?sensor_id=${id}&start=${start}&end=${end}&format=csv`
// }
}
\ No newline at end of file
export const muvStations = [
{
"id": "1340424",
"name": "Barcelona - Institut Dr PuigVert",
"latitude": 41.44608,
"longitude": 2.193347
},
{
"id": "5800147",
"name": "Barcelona - BCN Camina",
"latitude": 41.386795,
"longitude": 2.162094
},
{
"id": "5800390",
"name": "Barcelona - Fabra i Puig - Meridiana",
"latitude": 41.430312,
"longitude": 2.182291
},
{
"id": "11707143",
"name": "Barcelona - Escola Sunion",
"latitude": 41.410707,
"longitude": 2.145643
},
{
"id": "2160711",
"name": "Barcelona - Av Roma - Urgell (I)",
"latitude": 41.385416,
"longitude": 2.154086
},
{
"id": "11707771",
"name": "Barcelona - Escola Lurdes",
"latitude": 41.400606,
"longitude": 2.150654
},
{
"id": "11707092",
"name": "Barcelona - Bruc - Aragó",
"latitude": 41.394403,
"longitude": 2.169287
},
{
"id": "11707152",
"name": "Barcelona - Av Roma - Urgell (II)",
"latitude": 41.385416,
"longitude": 2.154086
},
{
"id": "1340511",
"name": "Barcelona - Can Portabella",
"latitude": 41.42908,
"longitude": 2.19393
},
{
"id": "11708346",
"name": "Barcelona - Escola Casas",
"latitude": 41.408089,
"longitude": 2.192425
},
{
"id": "11709125",
"name": "Barcelona - Institut Rbla Prim",
"latitude": 41.416038,
"longitude": 2.212285
},
{
"id": "11709010",
"name": "Barcelona - Casal EAMP",
"latitude": 41.413001,
"longitude": 2.184744
},
{
"id": "11709202",
"name": "Barcelona - Institut Narcís Monturiol",
"latitude": 41.381842,
"longitude": 2.192054
},
{
"id": "5801167",
"name": "Barcelona - IAAC",
"latitude": 41.396719,
"longitude": 2.194296
},
{
"id": "5799871",
"name": "Barcelona - CSIC - Pedralbes",
"latitude": 41.38731,
"longitude": 2.115284
},
{
"id": "5801118",
"name": "Barcelona - CC Baró de Viver",
"latitude": 41.445895,
"longitude": 2.200417
},
{
"id": "5800177",
"name": "Barcelona - CC Trinitat Vella",
"latitude": 41.451528,
"longitude": 2.191346
},
{
"id": "5802283",
"name": "Barcelona - Maria Claret - Meridiana",
"latitude": 41.420971,
"longitude": 2.188186
},
{
"id": "1340722",
"name": "Barcelona - La Torre de la Sagrera",
"latitude": 41.423852,
"longitude": 2.192135
},
{
"id": "11707174",
"name": "Fundão - Parque Verde",
"latitude": 40.143156,
"longitude": -7.501544
},
{
"id": "11707890",
"name": "Fundão - Escola Secundária",
"latitude": 40.140117,
"longitude": -7.501217
},
{
"id": "3004191",
"name": "Fundão - Câmara Municipal do Fundão",
"latitude": 40.138061,
"longitude": -7.500658
},
{
"id": "3004881",
"name": "Fundão - FabLab Aldeias do Xisto",
"latitude": 40.137257,
"longitude": -7.501635
},
{
"id": "9734047",
"name": "Fundão - Escola Gardunha e Xisto",
"latitude": 40.133136,
"longitude": -7.506042
},
{
"id": "9734087",
"name": "Fundão - Escola profissional do Fundão",
"latitude": 40.134978,
"longitude": -7.503721
},
{
"id": "3000824",
"name": "Gent - Weefstraat",
"latitude": 50.973124,
"longitude": 3.652578
},
{
"id": "3001694",
"name": "Gent - Groenespechtstraat",
"latitude": 51.077986,
"longitude": 3.761124
},
{
"id": "3005011",
"name": "Gent - Gustaaf Callierlaan",
"latitude": 51.039712,
"longitude": 3.73533
},
{
"id": "373773207e330120",
"name": "Helsinki",
"latitude": 60.157475,
"longitude": 24.919015
},
{
"id": "373773207e330121",
"name": "Helsinki",
"latitude": 60.157324,
"longitude": 24.913128
},
{
"id": "373773207e330122",
"name": "Helsinki",
"latitude": 60.157338,
"longitude": 24.912011
},
{
"id": "373773207e330123",
"name": "Helsinki",
"latitude": 60.157688,
"longitude": 24.909689
},
{
"id": "373773207e330124",
"name": "Helsinki",
"latitude": 60.15909,
"longitude": 24.917867
},
{
"id": "373773207e330125",
"name": "Helsinki",
"latitude": 60.156507,
"longitude": 24.917277
},
{
"id": "373773207e330126",
"name": "Helsinki",
"latitude": 60.158181,
"longitude": 24.913403
},
{
"id": "373773207e330127",
"name": "Helsinki",
"latitude": 60.15858,
"longitude": 24.921348
},
{
"id": "373773207e330128",
"name": "Helsinki",
"latitude": 60.157171,
"longitude": 24.920708
},
{
"id": "373773207e330129",
"name": "Helsinki",
"latitude": 60.157293,
"longitude": 24.913413
},
{
"id": "373773207e33012b",
"name": "Helsinki",
"latitude": 60.156959,
"longitude": 24.921304
},
{
"id": "373773207e33012c",
"name": "Helsinki",
"latitude": 60.156461,
"longitude": 24.917639
},
{
"id": "373773207e33012d",
"name": "Helsinki",
"latitude": 60.155222,
"longitude": 24.915464
},
{
"id": "373773207e33012e",
"name": "Helsinki",
"latitude": 60.156717,
"longitude": 24.913481
},
{
"id": "373773207e33012f",
"name": "Helsinki",
"latitude": 60.155353,
"longitude": 24.91646
},
{
"id": "5937990",
"name": "Palermo - PUSH",
"latitude": 38.115035,
"longitude": 13.364982
},
{
"id": "5938287",
"name": "Palermo - Moltivolti",
"latitude": 38.112857,
"longitude": 13.359345
}
]
\ No newline at end of file
import { downsampleData, addMissingDataPoints } from "../../data-on-a-map-app/src/util/data"
import { roundBy } from "../../data-on-a-map-app/src/util/math"
import { getDataAge } from "../../data-on-a-map-app/src/util/time"
import { downsampleData, addMissingDataPoints, addMissingDataPointsAll } from "../../data-on-a-map-app/src/util/data"
//import { roundBy } from "../../data-on-a-map-app/src/util/math"
//import { getDataAge } from "../../data-on-a-map-app/src/util/time"
import { getNowHourISO, getDaysAgoHourISO } from "../../data-on-a-map-app/src/util/time"
import { muvStations } from './muv-stations'
const endPointDataPlatform = process.env.NODE_ENV === 'development' ? "http://localhost:1886" : "https://data.waag.org"
//const endPointLinks = 'https://dataviz.muv2020.eu'
const host = 'https://dataviz.muv2020.eu'
//const host = 'http://localhost:8080'
const getPrefix = parameter => {
var prefix = parameter
......@@ -45,129 +47,29 @@ export default {
all: async function(parameter) {
try {
const prefix = getPrefix(parameter)
const allResponse = await fetch(`${host}/api/v1/get_stations`)
const all = await allResponse.json()
// const allResponse = await fetch(`${endPointDataPlatform}/api/muv/getStations`)
// const all = await allResponse.json()
const all = muvStations
// const latestResponse = await fetch(`${host}/api/v1/get_latest_value?sensor_id=all`)
// const latest = await latestResponse.json()
const start = getDaysAgoHourISO(14)
const end = getNowHourISO()
const rangeResponse = await fetch(`https://data.waag.org/api/muv/getHourlyValuesSensor?parameter=${prefix}&start=2020-03-05T00:00:00Z`)
const rangeResponse = await fetch(`${endPointDataPlatform}/api/muv/ms/tail?parameter=${parameter}&start=${start}&end=${end}`)
const range = await rangeResponse.json()
// let offlineSensors = []
// let unregisteredSensors = []
// let places = {}
const stations = {}
//.filter(station => station.ms === '11707152')
all.filter(station => station.latitude).forEach(station => {
const place = (station.city_id ? station.city_id.city_name : null)
stations[station.ms.toString()] = {
id: station.ms.toString(),
name: place ? `${place}: ${station.name}` : station.name,
all.forEach(station => {
stations[station.id] = {
id: station.id,
name: station.name,
source: "muv",
coordinates: [station.longitude, station.latitude],
}
})
const last = {}
const rangeData = {}
Object.keys(range).forEach(timestamp => {
rangeData[timestamp] = []
Object.keys(stations).forEach(station => {
let stationData = range[timestamp].find(o => o.id === station)
let data = {}
if(stationData) {
data = {
timestamp: timestamp,
mean: stationData.value
}
} else {
if(last[station]) {
data = {
...last[station],
dataAge: ((new Date(timestamp) - new Date(last[station].timestamp)) / 3600000) - 1
}
}
}
rangeData[timestamp].push({
...stations[station],
...data
})
last[station] = data
})
})
const data = addMissingDataPointsAll(range, stations, start, end)
return data
return rangeData
// const data = Object.keys(stations).map(sensor => {
// sensor = stations[sensor]
// let sensorData = latest.find(o => o.ms === sensor.ms)
// const place = (sensor.city_id ? sensor.city_id.city_name : null)
// const sensorDataReturn = {
// id: sensor.ms.toString(),
// name: place ? `${place}: ${sensor.name}` : sensor.name,
// source: "muv",
// //place: place,
// coordinates: [sensor.longitude, sensor.latitude],
// mean: null,
// status: null
// }
// if(sensorData) {
// if(place) {
// if(!places[place]) places[place] = { all: [] }
// places[place].all.push(sensorData[`${prefix}`])
// }
// const dataAgeInHours = getDataAge(sensorData.ts, "hourly")
// if(dataAgeInHours >= 48 || dataAgeInHours < -1) {
// sensorDataReturn.status = 0
// } else if(dataAgeInHours > 4) {
// sensorDataReturn.status = 1
// } else {
// sensorDataReturn.mean = sensorData[`${prefix}`]
// sensorDataReturn.timestamp = sensorData.ts
// sensorDataReturn.dataAge = dataAgeInHours
// }
// } else {
// sensorDataReturn.status = 0
// offlineSensors.push(sensor.ms)
// }
// return sensorDataReturn
// })
// latest.forEach(sensor => {
// if(!all.find(o => +o.ms === +sensor.ms)) {
// unregisteredSensors.push(sensor.ms)
// }
// })
// console.log(`Offline Sensors (${offlineSensors.length}):`, offlineSensors.sort((a, b) => a - b).join(', '))
// console.log(`Unregistered Sensors (${unregisteredSensors.length}):`, unregisteredSensors.sort((a, b) => a - b).join(', '))
// Object.keys(places).forEach(function(place) {
// places[place].amount = places[place].all.length
// places[place].average = roundBy(places[place].all.reduce((a, b) => a + b, 0) / places[place].all.length, 1)
// places[place].highest = Math.max(...places[place].all)
// })
// console.log(places)
//return data
} catch (error) {
console.log(error)
}
......@@ -185,18 +87,14 @@ export default {
stationData: async function(station, parameter, start, end, granularity) {
try {
//const response = await fetch(`${host}/api/v1/get_sensor_value?sensor_id=${station.id}&start=${start}&end=${end}`)
//const responseData = await response.json()
//const downsampledData = downsampleData(responseData, granularity, { timestamp: "ts", value: getPrefix(parameter) }).reverse()
//const conformedData = downsampledData.map(m => { return { ...m, timestamp: new Date(m.timestamp).getTime() }})
//const data = addMissingDataPoints(conformedData, granularity)
// let's get data from a quicker api for now...
const response = await fetch(`https://data.waag.org/api/muv/getSensorData?sensor_id=${station.id}&start=${start}&end=${end}`)
const response = await fetch(`${endPointDataPlatform}/api/muv/getSensorData?sensor_id=${station.id}&start=${start}&end=${end}`)
const responseData = await response.json()
const downsampledData = downsampleData(responseData, granularity, { timestamp: "time", value: getPrefix(parameter) })
let prefix = parameter
if(parameter === 'temperature') prefix = 't_out'
if(parameter === 'humidity') prefix = 'h_out'
const downsampledData = downsampleData(responseData, granularity, { timestamp: "time", value: prefix + '_mean' })
const conformedData = downsampledData.map(m => { return { ...m, timestamp: new Date(m.timestamp).getTime() }}).filter(m => m.timestamp < new Date(end).getTime())
const data = addMissingDataPoints(conformedData, conformedData[0].timestamp, new Date(end).getTime(), granularity)
......
This diff is collapsed.
......@@ -4,7 +4,7 @@ export const texts = {
...textsEN,
about: {
title: "about this map",
body: "<p>This map shows measurements from monitoring stations in six European pilot cities of the <a href='https://www.muv2020.eu/' target='_blank' rel='noopener noreferrer' style='white-space:nowrap;'>MUV project.</a></p><small style='display:block; margin-bottom: 14px; font-size:12px'><em>All data are indicative and have no legal significance.</em></small><div style='display:flex; align-items:flex-start;'><img src='eu-flag.png' style='width:30px; height:auto; flex-shrink:0; margin: 0.25em 0.25em 0 0;' /><small style='font-size:12px'><em>This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement No [723521]</em></small></div>"
body: "<p>This map shows measurements from monitoring stations in six European pilot cities of the <a href='https://www.muv2020.eu/' target='_blank' rel='noopener noreferrer' style='white-space:nowrap;'>MUV project.</a></p><small style='display:block; margin-bottom: 14px; font-size:12px'><em>All data are indicative and have no legal significance.</em></small>"
},
search: "Monitoring Stations",
dataStreams: {
......
Subproject commit 8e280e257a7fa2f705f5158bcf2b17e8a17f3545
Subproject commit 902019637a5abd1a52f941e7486cdc88985ce36a
This diff is collapsed.
[{"time_travelled":"0,5","Biking":0.3766,"Walking":0.1786,"Public":0.5796,"Car":1.298,"Train":0.074},{"time_travelled":"5,10","Biking":1.3678,"Walking":0.3314,"Public":2.5517,"Car":1.1195},{"time_travelled":"10,20","Biking":2.7569,"Walking":0.7003,"Public":2.8928,"Car":2.7466,"Motorbike":5.727},{"time_travelled":"20,40","Biking":4.7578,"Walking":1.297,"Public":4.1747,"Car":3.6148},{"time_travelled":"40,80","Biking":6.6,"Walking":1.8758,"Public":2.049,"Car":3.556},{"time_travelled":"80,237","Biking":8.5926,"Walking":2.9069,"Public":5.888}]
[{"question":"car_owning_answer","no":40,"yes":10},{"question":"moto_owning_answer","no":49,"yes":1},{"question":"bike","no":29,"yes":21},{"question":"public_local_transport_subscriber","no":33,"yes":17},{"question":"public_train_transport_subscriber","no":33,"yes":17},{"question":"pooling_pilot","no":50},{"question":"pooling_passenger","no":50},{"question":"bike_sharing_user","no":46,"yes":4},{"question":"car_sharing_user","no":45,"yes":5},{"question":"ride_sharing_user","no":47,"yes":3},{"question":"moto_pooling","no":50}]
[{"modal_type":"Biking","FALSE":238,"TRUE":231},{"modal_type":"Car","FALSE":26},{"modal_type":"Motorbike","FALSE":1},{"modal_type":"Public","FALSE":53,"TRUE":1},{"modal_type":"Train","FALSE":1},{"modal_type":"Walking","FALSE":281,"TRUE":32}]
[{"month":"2018-10-01","Biking":45.344,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":5.304},{"month":"2018-11-01","Biking":202.468,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":30.559},{"month":"2018-12-01","Biking":49.176,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":11.443},{"month":"2019-01-01","Biking":136.064,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":8.645},{"month":"2019-02-01","Biking":206.246,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":9.725},{"month":"2019-03-01","Biking":353.034,"Car":0,"Motorbike":0,"Public":2.961,"Train":0,"Walking":28.949},{"month":"2019-04-01","Biking":148.279,"Car":0,"Motorbike":0,"Public":40.188,"Train":0,"Walking":17.269},{"month":"2019-05-01","Biking":65.98,"Car":0,"Motorbike":0,"Public":1.59,"Train":0,"Walking":35.011},{"month":"2019-06-01","Biking":114.877,"Car":0,"Motorbike":0,"Public":16.536,"Train":0,"Walking":28.623},{"month":"2019-07-01","Biking":343.119,"Car":9.567,"Motorbike":0,"Public":99.376,"Train":0,"Walking":71.535},{"month":"2019-08-01","Biking":1.728,"Car":53.681,"Motorbike":0,"Public":0,"Train":0,"Walking":19.717},{"month":"2019-09-01","Biking":11.629,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":1.427},{"month":"2019-10-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":3.3},{"month":"2019-11-01","Biking":81.577,"Car":0,"Motorbike":5.727,"Public":0,"Train":0.074,"Walking":3.846},{"month":"2019-12-01","Biking":3.187,"Car":0.011,"Motorbike":0,"Public":0,"Train":0,"Walking":0},{"month":"2020-01-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":13.02},{"month":"2020-02-01","Biking":17.286,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":0.885},{"month":"2020-03-01","Biking":127.945,"Car":3.898,"Motorbike":0,"Public":0,"Train":0,"Walking":1.72}]
[{"month":"2018-10-01","Biking":24,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":6},{"month":"2018-11-01","Biking":71,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":21},{"month":"2018-12-01","Biking":13,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":6},{"month":"2019-01-01","Biking":27,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":3},{"month":"2019-02-01","Biking":36,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":3},{"month":"2019-03-01","Biking":84,"Car":0,"Motorbike":0,"Public":3,"Train":0,"Walking":32},{"month":"2019-04-01","Biking":36,"Car":0,"Motorbike":0,"Public":10,"Train":0,"Walking":32},{"month":"2019-05-01","Biking":16,"Car":0,"Motorbike":0,"Public":1,"Train":0,"Walking":23},{"month":"2019-06-01","Biking":25,"Car":0,"Motorbike":0,"Public":7,"Train":0,"Walking":37},{"month":"2019-07-01","Biking":66,"Car":3,"Motorbike":0,"Public":33,"Train":0,"Walking":91},{"month":"2019-08-01","Biking":1,"Car":21,"Motorbike":0,"Public":0,"Train":0,"Walking":41},{"month":"2019-09-01","Biking":1,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":1},{"month":"2019-10-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":1},{"month":"2019-11-01","Biking":23,"Car":0,"Motorbike":1,"Public":0,"Train":1,"Walking":5},{"month":"2019-12-01","Biking":1,"Car":1,"Motorbike":0,"Public":0,"Train":0,"Walking":0},{"month":"2020-01-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":6},{"month":"2020-02-01","Biking":6,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":2},{"month":"2020-03-01","Biking":39,"Car":1,"Motorbike":0,"Public":0,"Train":0,"Walking":3}]
This diff is collapsed.
[{"time_travelled":"0,5","Public":0.6883,"Walking":0.1911,"Biking":0.5794,"Car":0.8624,"Train":0.6438,"Motorbike":0.7997},{"time_travelled":"5,10","Public":1.7641,"Walking":0.4506,"Biking":1.3745,"Car":2.3782,"Train":0.7344,"Motorbike":6.073},{"time_travelled":"10,20","Public":5.1109,"Walking":0.8574,"Biking":2.9749,"Car":4.1921,"Train":1.5338,"Motorbike":2.6183},{"time_travelled":"20,40","Public":4.8431,"Walking":1.8417,"Biking":4.5165,"Car":6.678,"Train":1.1493},{"time_travelled":"40,80","Public":1.978,"Walking":2.1493,"Biking":5.8231,"Car":43.2137,"Train":0.314,"Motorbike":20.709},{"time_travelled":"80,240","Public":5.3426,"Walking":2.3163,"Biking":8.538,"Car":21.5166,"Train":0.4936,"Motorbike":2.057}]
[{"question":"car_owning_answer","no":84,"yes":49},{"question":"moto_owning_answer","no":126,"yes":7},{"question":"bike","no":86,"yes":47},{"question":"public_local_transport_subscriber","no":80,"yes":53},{"question":"public_train_transport_subscriber","no":88,"yes":45},{"question":"pooling_pilot","no":133},{"question":"pooling_passenger","no":131,"yes":2},{"question":"bike_sharing_user","no":116,"yes":17},{"question":"car_sharing_user","no":127,"yes":6},{"question":"ride_sharing_user","no":128,"yes":5},{"question":"moto_pooling","no":130,"yes":3}]
[{"modal_type":"Biking","FALSE":635,"TRUE":476},{"modal_type":"Car","FALSE":37,"TRUE":49},{"modal_type":"Motorbike","FALSE":3,"TRUE":6},{"modal_type":"Public","FALSE":59,"TRUE":27},{"modal_type":"Train","FALSE":17,"TRUE":35},{"modal_type":"Walking","FALSE":1407,"TRUE":1028}]
[{"month":"2018-10-01","Biking":0,"Car":0,"Motorbike":0,"Public":4.301,"Train":0,"Walking":0},{"month":"2018-11-01","Biking":210.201,"Car":0,"Motorbike":0,"Public":7.455,"Train":0,"Walking":256.585},{"month":"2018-12-01","Biking":461.614,"Car":0,"Motorbike":0,"Public":17.016,"Train":0,"Walking":136.355},{"month":"2019-01-01","Biking":99.062,"Car":0,"Motorbike":0,"Public":141.847,"Train":0,"Walking":98.103},{"month":"2019-02-01","Biking":170.856,"Car":0,"Motorbike":0,"Public":27.279,"Train":0,"Walking":82.834},{"month":"2019-03-01","Biking":245.987,"Car":0,"Motorbike":0,"Public":1.562,"Train":0,"Walking":77.195},{"month":"2019-04-01","Biking":311.758,"Car":0,"Motorbike":0,"Public":7.236,"Train":0,"Walking":73.462},{"month":"2019-05-01","Biking":75.226,"Car":0,"Motorbike":0,"Public":1.161,"Train":0,"Walking":8.407},{"month":"2019-06-01","Biking":23.539,"Car":0,"Motorbike":0,"Public":21.771,"Train":0,"Walking":15.868},{"month":"2019-07-01","Biking":366.492,"Car":22.197,"Motorbike":0,"Public":66.602,"Train":0,"Walking":394.277},{"month":"2019-08-01","Biking":302.174,"Car":132.308,"Motorbike":23.137,"Public":0,"Train":21.124,"Walking":414},{"month":"2019-09-01","Biking":181.651,"Car":9.926,"Motorbike":0,"Public":0,"Train":2.77,"Walking":165.205},{"month":"2019-10-01","Biking":263.726,"Car":17.375,"Motorbike":0,"Public":0,"Train":2.638,"Walking":213.493},{"month":"2019-11-01","Biking":527.291,"Car":5.094,"Motorbike":7.778,"Public":0,"Train":6.375,"Walking":301.662},{"month":"2019-12-01","Biking":677.45,"Car":48.298,"Motorbike":0.694,"Public":0,"Train":10.496,"Walking":474.961},{"month":"2020-01-01","Biking":432.671,"Car":310.519,"Motorbike":0,"Public":0,"Train":1.486,"Walking":287.226},{"month":"2020-02-01","Biking":221.035,"Car":245.935,"Motorbike":7.484,"Public":0,"Train":1.682,"Walking":122.328},{"month":"2020-03-01","Biking":149.49,"Car":379.926,"Motorbike":0,"Public":0,"Train":10.375,"Walking":102.521}]
[{"month":"2018-10-01","Biking":0,"Car":0,"Motorbike":0,"Public":1,"Train":0,"Walking":0},{"month":"2018-11-01","Biking":70,"Car":0,"Motorbike":0,"Public":4,"Train":0,"Walking":156},{"month":"2018-12-01","Biking":89,"Car":0,"Motorbike":0,"Public":5,"Train":0,"Walking":90},{"month":"2019-01-01","Biking":19,"Car":0,"Motorbike":0,"Public":24,"Train":0,"Walking":57},{"month":"2019-02-01","Biking":49,"Car":0,"Motorbike":0,"Public":5,"Train":0,"Walking":44},{"month":"2019-03-01","Biking":56,"Car":0,"Motorbike":0,"Public":1,"Train":0,"Walking":34},{"month":"2019-04-01","Biking":68,"Car":0,"Motorbike":0,"Public":5,"Train":0,"Walking":54},{"month":"2019-05-01","Biking":17,"Car":0,"Motorbike":0,"Public":2,"Train":0,"Walking":7},{"month":"2019-06-01","Biking":11,"Car":0,"Motorbike":0,"Public":6,"Train":0,"Walking":24},{"month":"2019-07-01","Biking":107,"Car":6,"Motorbike":0,"Public":33,"Train":0,"Walking":404},{"month":"2019-08-01","Biking":93,"Car":34,"Motorbike":2,"Public":0,"Train":12,"Walking":366},{"month":"2019-09-01","Biking":39,"Car":4,"Motorbike":0,"Public":0,"Train":3,"Walking":108},{"month":"2019-10-01","Biking":58,"Car":4,"Motorbike":0,"Public":0,"Train":5,"Walking":147},{"month":"2019-11-01","Biking":99,"Car":4,"Motorbike":2,"Public":0,"Train":4,"Walking":202},{"month":"2019-12-01","Biking":153,"Car":8,"Motorbike":2,"Public":0,"Train":12,"Walking":382},{"month":"2020-01-01","Biking":99,"Car":9,"Motorbike":0,"Public":0,"Train":2,"Walking":211},{"month":"2020-02-01","Biking":48,"Car":5,"Motorbike":3,"Public":0,"Train":3,"Walking":63},{"month":"2020-03-01","Biking":36,"Car":12,"Motorbike":0,"Public":0,"Train":11,"Walking":86}]
This diff is collapsed.
[{"time_travelled":"0,5","Walking":0.1611,"Motorbike":1.4074,"Biking":0.1686,"Car":0.8744},{"time_travelled":"5,10","Walking":0.4322,"Motorbike":1.879,"Biking":2.0314,"Car":2.7266},{"time_travelled":"10,20","Walking":0.8069,"Motorbike":2.008,"Biking":1.5447,"Car":7.3369},{"time_travelled":"20,40","Walking":1.3199,"Biking":1.152,"Car":16.5623},{"time_travelled":"40,80","Walking":1.8828,"Biking":2.289,"Car":25.1493},{"time_travelled":"80,209","Walking":2.0773,"Biking":0.39,"Car":19.0845}]
[{"question":"car_owning_answer","no":56,"yes":13},{"question":"moto_owning_answer","no":69},{"question":"bike","no":68,"yes":1},{"question":"public_local_transport_subscriber","no":68,"yes":1},{"question":"public_train_transport_subscriber","no":66,"yes":3},{"question":"pooling_pilot","no":69},{"question":"pooling_passenger","no":69},{"question":"bike_sharing_user","no":69},{"question":"car_sharing_user","no":67,"yes":2},{"question":"ride_sharing_user","no":69},{"question":"moto_pooling","no":69}]
[{"modal_type":"Biking","TRUE":26,"FALSE":10},{"modal_type":"Car","TRUE":11,"FALSE":101},{"modal_type":"Motorbike","TRUE":1,"FALSE":9},{"modal_type":"Walking","TRUE":345,"FALSE":628}]
[{"month":"2018-11-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":0.365},{"month":"2019-02-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":5.112},{"month":"2019-08-01","Biking":0,"Car":0,"Motorbike":2.446,"Public":0,"Train":0,"Walking":5.059},{"month":"2019-10-01","Biking":9.074,"Car":11.207,"Motorbike":0,"Public":0,"Train":0,"Walking":74.427},{"month":"2019-11-01","Biking":3.519,"Car":533.366,"Motorbike":12.716,"Public":0,"Train":0,"Walking":265.988},{"month":"2019-12-01","Biking":0.506,"Car":124.22,"Motorbike":1.399,"Public":0,"Train":0,"Walking":94.556},{"month":"2020-01-01","Biking":1.573,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":63.572},{"month":"2020-02-01","Biking":4.487,"Car":64.918,"Motorbike":0,"Public":0,"Train":0,"Walking":130.602},{"month":"2020-03-01","Biking":40.706,"Car":793.608,"Motorbike":0,"Public":0,"Train":0,"Walking":152.071}]
[{"month":"2018-11-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":1},{"month":"2019-02-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":8},{"month":"2019-08-01","Biking":0,"Car":0,"Motorbike":1,"Public":0,"Train":0,"Walking":7},{"month":"2019-10-01","Biking":8,"Car":2,"Motorbike":0,"Public":0,"Train":0,"Walking":101},{"month":"2019-11-01","Biking":7,"Car":48,"Motorbike":8,"Public":0,"Train":0,"Walking":285},{"month":"2019-12-01","Biking":1,"Car":13,"Motorbike":1,"Public":0,"Train":0,"Walking":89},{"month":"2020-01-01","Biking":2,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":89},{"month":"2020-02-01","Biking":1,"Car":6,"Motorbike":0,"Public":0,"Train":0,"Walking":151},{"month":"2020-03-01","Biking":17,"Car":43,"Motorbike":0,"Public":0,"Train":0,"Walking":242}]
This diff is collapsed.
[{"time_travelled":"0,5","Biking":0.6029,"Walking":0.1333,"Public":0.9748,"Motorbike":0.892},{"time_travelled":"5,10","Biking":1.6126,"Walking":0.3828,"Public":3.448,"Motorbike":0.827,"Car":1.794,"Train":0.615},{"time_travelled":"10,20","Biking":2.8628,"Walking":0.6849,"Public":14.7719,"Motorbike":1.9447,"Car":3.0041},{"time_travelled":"20,40","Biking":5.4138,"Walking":1.3379,"Public":22.0396},{"time_travelled":"40,80","Biking":6.7025,"Walking":1.6496,"Public":9.3497,"Motorbike":0.103,"Car":6.224},{"time_travelled":"80,237","Biking":8.3729,"Walking":1.9286,"Car":4.559}]
[{"question":"car_owning_answer","no":67,"yes":40},{"question":"moto_owning_answer","no":102,"yes":5},{"question":"bike","no":57,"yes":50},{"question":"public_local_transport_subscriber","no":69,"yes":38},{"question":"public_train_transport_subscriber","no":72,"yes":35},{"question":"pooling_pilot","no":106,"yes":1},{"question":"pooling_passenger","no":106,"yes":1},{"question":"bike_sharing_user","no":103,"yes":4},{"question":"car_sharing_user","no":100,"yes":7},{"question":"ride_sharing_user","no":106,"yes":1},{"question":"moto_pooling","no":104,"yes":3}]
[{"modal_type":"Biking","TRUE":1586,"FALSE":459},{"modal_type":"Car","TRUE":9,"FALSE":5},{"modal_type":"Motorbike","TRUE":9,"FALSE":1},{"modal_type":"Public","TRUE":29,"FALSE":7},{"modal_type":"Train","FALSE":2},{"modal_type":"Walking","TRUE":410,"FALSE":153}]
[{"month":"2018-11-01","Biking":18.569,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":0.928},{"month":"2018-12-01","Biking":140.381,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":14.177},{"month":"2019-01-01","Biking":127.002,"Car":0,"Motorbike":0,"Public":1.082,"Train":0,"Walking":21.102},{"month":"2019-02-01","Biking":343.858,"Car":0,"Motorbike":0,"Public":263.343,"Train":0,"Walking":44.965},{"month":"2019-03-01","Biking":274.878,"Car":0,"Motorbike":0,"Public":157.589,"Train":0,"Walking":31.057},{"month":"2019-04-01","Biking":267.282,"Car":0,"Motorbike":0,"Public":6.064,"Train":0,"Walking":9.213},{"month":"2019-05-01","Biking":78.095,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":11.026},{"month":"2019-06-01","Biking":412.521,"Car":0,"Motorbike":0,"Public":10.203,"Train":0,"Walking":34.948},{"month":"2019-07-01","Biking":958.197,"Car":1.986,"Motorbike":0,"Public":34.792,"Train":0,"Walking":71.861},{"month":"2019-08-01","Biking":418.585,"Car":0,"Motorbike":0.103,"Public":0,"Train":0,"Walking":27.441},{"month":"2019-09-01","Biking":128.964,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":5.135},{"month":"2019-10-01","Biking":677.548,"Car":0,"Motorbike":1.48,"Public":0,"Train":1.14,"Walking":18.782},{"month":"2019-11-01","Biking":1579.95,"Car":6.457,"Motorbike":0.304,"Public":0,"Train":0,"Walking":73.419},{"month":"2019-12-01","Biking":523.831,"Car":1.67,"Motorbike":0.17,"Public":0,"Train":0,"Walking":13.161},{"month":"2020-01-01","Biking":297.367,"Car":0.369,"Motorbike":3.5,"Public":0,"Train":0.09,"Walking":44.628},{"month":"2020-02-01","Biking":536.495,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":5.881},{"month":"2020-03-01","Biking":1380.99,"Car":37.15,"Motorbike":5.472,"Public":0,"Train":0,"Walking":50.816}]
[{"month":"2018-11-01","Biking":7,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":2},{"month":"2018-12-01","Biking":25,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":9},{"month":"2019-01-01","Biking":37,"Car":0,"Motorbike":0,"Public":1,"Train":0,"Walking":18},{"month":"2019-02-01","Biking":96,"Car":0,"Motorbike":0,"Public":15,"Train":0,"Walking":57},{"month":"2019-03-01","Biking":105,"Car":0,"Motorbike":0,"Public":9,"Train":0,"Walking":46},{"month":"2019-04-01","Biking":91,"Car":0,"Motorbike":0,"Public":2,"Train":0,"Walking":23},{"month":"2019-05-01","Biking":33,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":10},{"month":"2019-06-01","Biking":114,"Car":0,"Motorbike":0,"Public":4,"Train":0,"Walking":38},{"month":"2019-07-01","Biking":234,"Car":1,"Motorbike":0,"Public":5,"Train":0,"Walking":108},{"month":"2019-08-01","Biking":103,"Car":0,"Motorbike":1,"Public":0,"Train":0,"Walking":24},{"month":"2019-09-01","Biking":39,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":2},{"month":"2019-10-01","Biking":170,"Car":0,"Motorbike":1,"Public":0,"Train":1,"Walking":27},{"month":"2019-11-01","Biking":344,"Car":2,"Motorbike":1,"Public":0,"Train":0,"Walking":64},{"month":"2019-12-01","Biking":123,"Car":1,"Motorbike":1,"Public":0,"Train":0,"Walking":13},{"month":"2020-01-01","Biking":73,"Car":1,"Motorbike":2,"Public":0,"Train":1,"Walking":21},{"month":"2020-02-01","Biking":137,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":13},{"month":"2020-03-01","Biking":314,"Car":9,"Motorbike":4,"Public":0,"Train":0,"Walking":88}]
This diff is collapsed.
[{"time_travelled":"0,5","Walking":0.1685,"Public":0.8061,"Biking":0.5092,"Car":0.435,"Train":0.3167},{"time_travelled":"5,10","Walking":0.4265,"Public":1.7213,"Biking":1.2145,"Car":1.7242,"Motorbike":3.468,"Train":1.647},{"time_travelled":"10,20","Walking":0.9191,"Public":3.4589,"Biking":2.5557,"Car":4.3158,"Motorbike":0.542,"Train":0.007},{"time_travelled":"20,40","Walking":1.6772,"Public":4.5324,"Biking":5.0598,"Car":8.1734},{"time_travelled":"40,80","Walking":2.9632,"Public":7.2959,"Biking":5.3779,"Car":10.6701,"Train":0.113},{"time_travelled":"80,238","Walking":3.4056,"Public":4.4045,"Biking":3.8566}]
[{"question":"car_owning_answer","yes":13,"no":78},{"question":"moto_owning_answer","yes":2,"no":89},{"question":"bike","yes":60,"no":31},{"question":"public_local_transport_subscriber","yes":62,"no":29},{"question":"public_train_transport_subscriber","yes":54,"no":37},{"question":"pooling_pilot","no":91},{"question":"pooling_passenger","no":91},{"question":"bike_sharing_user","yes":8,"no":83},{"question":"car_sharing_user","yes":3,"no":88},{"question":"ride_sharing_user","yes":4,"no":87},{"question":"moto_pooling","yes":1,"no":90}]
[{"modal_type":"Biking","TRUE":453,"FALSE":188},{"modal_type":"Car","TRUE":3,"FALSE":197},{"modal_type":"Motorbike","TRUE":1,"FALSE":4},{"modal_type":"Public","TRUE":95,"FALSE":53},{"modal_type":"Train","FALSE":6},{"modal_type":"Walking","TRUE":757,"FALSE":864}]
[{"month":"2018-11-01","Biking":20.125,"Car":0,"Motorbike":0,"Public":22.066,"Train":0,"Walking":36.942},{"month":"2018-12-01","Biking":79.113,"Car":0,"Motorbike":0,"Public":46.265,"Train":0,"Walking":137.15},{"month":"2019-01-01","Biking":78.32,"Car":0,"Motorbike":0,"Public":21.22,"Train":0,"Walking":35.906},{"month":"2019-02-01","Biking":6.618,"Car":0,"Motorbike":0,"Public":39.623,"Train":0,"Walking":104.808},{"month":"2019-03-01","Biking":57.854,"Car":0,"Motorbike":0,"Public":49.071,"Train":0,"Walking":100.132},{"month":"2019-04-01","Biking":145.057,"Car":0,"Motorbike":0,"Public":81.463,"Train":0,"Walking":84.804},{"month":"2019-05-01","Biking":249.225,"Car":0,"Motorbike":0,"Public":28.734,"Train":0,"Walking":87.23},{"month":"2019-06-01","Biking":403.968,"Car":0,"Motorbike":0,"Public":17.741,"Train":0,"Walking":146.74},{"month":"2019-07-01","Biking":275.693,"Car":2.4,"Motorbike":0,"Public":144.436,"Train":0,"Walking":196.899},{"month":"2019-08-01","Biking":417.632,"Car":268.548,"Motorbike":6.576,"Public":3.449,"Train":1.671,"Walking":577.767},{"month":"2019-09-01","Biking":268.132,"Car":568.931,"Motorbike":0,"Public":0,"Train":0.689,"Walking":318.437},{"month":"2019-10-01","Biking":30.948,"Car":379.908,"Motorbike":0,"Public":0,"Train":0.113,"Walking":292.503},{"month":"2019-11-01","Biking":0,"Car":13.018,"Motorbike":2.332,"Public":0,"Train":0.244,"Walking":51.911},{"month":"2020-01-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":0.816},{"month":"2020-02-01","Biking":7.078,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":0.394},{"month":"2020-03-01","Biking":61.969,"Car":3.717,"Motorbike":5.506,"Public":0,"Train":0,"Walking":39.939}]
[{"month":"2018-11-01","Biking":4,"Car":0,"Motorbike":0,"Public":7,"Train":0,"Walking":34},{"month":"2018-12-01","Biking":27,"Car":0,"Motorbike":0,"Public":14,"Train":0,"Walking":82},{"month":"2019-01-01","Biking":26,"Car":0,"Motorbike":0,"Public":12,"Train":0,"Walking":38},{"month":"2019-02-01","Biking":2,"Car":0,"Motorbike":0,"Public":14,"Train":0,"Walking":86},{"month":"2019-03-01","Biking":29,"Car":0,"Motorbike":0,"Public":20,"Train":0,"Walking":112},{"month":"2019-04-01","Biking":69,"Car":0,"Motorbike":0,"Public":28,"Train":0,"Walking":108},{"month":"2019-05-01","Biking":97,"Car":0,"Motorbike":0,"Public":11,"Train":0,"Walking":109},{"month":"2019-06-01","Biking":107,"Car":0,"Motorbike":0,"Public":7,"Train":0,"Walking":123},{"month":"2019-07-01","Biking":81,"Car":2,"Motorbike":0,"Public":34,"Train":0,"Walking":164},{"month":"2019-08-01","Biking":98,"Car":49,"Motorbike":2,"Public":1,"Train":2,"Walking":327},{"month":"2019-09-01","Biking":67,"Car":94,"Motorbike":0,"Public":0,"Train":2,"Walking":213},{"month":"2019-10-01","Biking":8,"Car":49,"Motorbike":0,"Public":0,"Train":1,"Walking":147},{"month":"2019-11-01","Biking":0,"Car":4,"Motorbike":1,"Public":0,"Train":1,"Walking":34},{"month":"2020-01-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":1},{"month":"2020-02-01","Biking":2,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":4},{"month":"2020-03-01","Biking":24,"Car":2,"Motorbike":2,"Public":0,"Train":0,"Walking":39}]
This diff is collapsed.
[{"time_travelled":"0,5","Walking":0.1232,"Public":2.9054,"Biking":0.509,"Motorbike":2.8478},{"time_travelled":"5,10","Walking":0.4182,"Public":3.0558,"Biking":1.069,"Motorbike":4.3635,"Train":2.191},{"time_travelled":"10,20","Walking":1.0022,"Public":3.416,"Biking":2.1222,"Motorbike":6.7252,"Train":2.471},{"time_travelled":"20,40","Walking":1.3405,"Public":7.413,"Biking":1.7991,"Motorbike":12.867},{"time_travelled":"40,80","Walking":2.9995,"Biking":0.545},{"time_travelled":"80,181","Walking":1.1083,"Biking":3.625}]
[{"question":"car_owning_answer","yes":4,"no":5},{"question":"moto_owning_answer","yes":1,"no":8},{"question":"bike","yes":3,"no":6},{"question":"public_local_transport_subscriber","yes":3,"no":6},{"question":"public_train_transport_subscriber","yes":5,"no":4},{"question":"pooling_pilot","no":9},{"question":"pooling_passenger","no":9},{"question":"bike_sharing_user","yes":1,"no":8},{"question":"car_sharing_user","no":9},{"question":"ride_sharing_user","no":9},{"question":"moto_pooling","no":9}]
[{"modal_type":"Biking","TRUE":257,"FALSE":4},{"modal_type":"Motorbike","TRUE":24,"FALSE":7},{"modal_type":"Public","TRUE":183},{"modal_type":"Train","TRUE":2},{"modal_type":"Walking","TRUE":224,"FALSE":92}]
[{"month":"2018-12-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":0.333},{"month":"2019-01-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":5.109},{"month":"2019-02-01","Biking":19.082,"Car":0,"Motorbike":0,"Public":52.161,"Train":0,"Walking":25.335},{"month":"2019-03-01","Biking":42.74,"Car":0,"Motorbike":0,"Public":194.107,"Train":0,"Walking":37.818},{"month":"2019-04-01","Biking":41.169,"Car":0,"Motorbike":0,"Public":84.274,"Train":0,"Walking":12.141},{"month":"2019-05-01","Biking":39.04,"Car":0,"Motorbike":0,"Public":90.374,"Train":0,"Walking":55.591},{"month":"2019-06-01","Biking":24.512,"Car":0,"Motorbike":0,"Public":67.646,"Train":0,"Walking":64.677},{"month":"2019-07-01","Biking":53.618,"Car":0,"Motorbike":18.979,"Public":73.249,"Train":0,"Walking":24.459},{"month":"2019-08-01","Biking":22.008,"Car":0,"Motorbike":51.546,"Public":3.154,"Train":4.662,"Walking":9.551},{"month":"2019-09-01","Biking":3.768,"Car":0,"Motorbike":7.721,"Public":0,"Train":0,"Walking":0},{"month":"2019-10-01","Biking":1.912,"Car":0,"Motorbike":31.624,"Public":0,"Train":0,"Walking":6.579},{"month":"2019-12-01","Biking":1.895,"Car":0,"Motorbike":45.473,"Public":0,"Train":0,"Walking":59.096},{"month":"2020-02-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":1.283}]
[{"month":"2018-12-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":2},{"month":"2019-01-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":5},{"month":"2019-02-01","Biking":23,"Car":0,"Motorbike":0,"Public":22,"Train":0,"Walking":51},{"month":"2019-03-01","Biking":56,"Car":0,"Motorbike":0,"Public":61,"Train":0,"Walking":55},{"month":"2019-04-01","Biking":46,"Car":0,"Motorbike":0,"Public":22,"Train":0,"Walking":16},{"month":"2019-05-01","Biking":42,"Car":0,"Motorbike":0,"Public":30,"Train":0,"Walking":50},{"month":"2019-06-01","Biking":21,"Car":0,"Motorbike":0,"Public":24,"Train":0,"Walking":53},{"month":"2019-07-01","Biking":42,"Car":0,"Motorbike":3,"Public":23,"Train":0,"Walking":29},{"month":"2019-08-01","Biking":22,"Car":0,"Motorbike":8,"Public":1,"Train":2,"Walking":11},{"month":"2019-09-01","Biking":3,"Car":0,"Motorbike":3,"Public":0,"Train":0,"Walking":0},{"month":"2019-10-01","Biking":3,"Car":0,"Motorbike":10,"Public":0,"Train":0,"Walking":12},{"month":"2019-12-01","Biking":3,"Car":0,"Motorbike":7,"Public":0,"Train":0,"Walking":30},{"month":"2020-02-01","Biking":0,"Car":0,"Motorbike":0,"Public":0,"Train":0,"Walking":2}]
This diff is collapsed.
[{"time_travelled":"0,5","Walking":0.1958,"Biking":0.3218,"Public":1.1799,"Car":0.8636,"Train":0.862,"Motorbike":2.4174},{"time_travelled":"5,10","Walking":0.4954,"Biking":1.2644,"Public":2.2223,"Car":1.4839,"Train":2.2001,"Motorbike":3.0322},{"time_travelled":"10,20","Walking":0.8249,"Biking":2.9919,"Public":2.793,"Car":2.2939,"Train":2.9376,"Motorbike":7.5679},{"time_travelled":"20,40","Walking":1.1376,"Biking":6.0432,"Public":4.0388,"Car":3.8652,"Train":4.0569,"Motorbike":23.7139},{"time_travelled":"40,80","Walking":2.3694,"Biking":10.2683,"Public":0.8487,"Car":1.879,"Train":1.853,"Motorbike":30.7945},{"time_travelled":"80,239","Walking":3.6785,"Biking":9.6667,"Public":0.344,"Car":3.6827,"Train":0.105,"Motorbike":18.134}]
[{"question":"car_owning_answer","no":74,"yes":37},{"question":"moto_owning_answer","no":107,"yes":4},{"question":"bike","no":75,"yes":36},{"question":"public_local_transport_subscriber","no":66,"yes":45},{"question":"public_train_transport_subscriber","no":65,"yes":46},{"question":"pooling_pilot","no":109,"yes":2},{"question":"pooling_passenger","no":109,"yes":2},{"question":"bike_sharing_user","no":101,"yes":10},{"question":"car_sharing_user","no":95,"yes":16},{"question":"ride_sharing_user","no":103,"yes":8},{"question":"moto_pooling","no":110,"yes":1}]
[{"modal_type":"Biking","TRUE":280,"FALSE":253},{"modal_type":"Car","TRUE":50,"FALSE":103},{"modal_type":"Motorbike","TRUE":65,"FALSE":94},{"modal_type":"Public","TRUE":175,"FALSE":3},{"modal_type":"Train","TRUE":196,"FALSE":45},{"modal_type":"Walking","TRUE":1415,"FALSE":604}]
[{"month":"2018-11-01","Biking":67.037,"Car":0,"Motorbike":0,"Public":8.456,"Train":0,"Walking":19.789},{"month":"2018-12-01","Biking":125.853,"Car":0,"Motorbike":0,"Public":70.38,"Train":0,"Walking":23.509},{"month":"2019-01-01","Biking":67.049,"Car":0,"Motorbike":0,"Public":37.441,"Train":0,"Walking":27.828},{"month":"2019-02-01","Biking":22.747,"Car":0,"Motorbike":0,"Public":0.61,"Train":0,"Walking":1.683},{"month":"2019-03-01","Biking":23.731,"Car":0,"Motorbike":0,"Public":7.866,"Train":0,"Walking":8.367},{"month":"2019-04-01","Biking":21.863,"Car":0,"Motorbike":0,"Public":7.693,"Train":0,"Walking":16.931},{"month":"2019-05-01","Biking":36.07,"Car":0,"Motorbike":0,"Public":37.743,"Train":0,"Walking":26.077},{"month":"2019-06-01","Biking":7.975,"Car":0,"Motorbike":0,"Public":225.592,"Train":0,"Walking":111.26},{"month":"2019-07-01","Biking":0,"Car":0,"Motorbike":0,"Public":5.311,"Train":0,"Walking":9.515},{"month":"2019-08-01","Biking":36.58,"Car":6.493,"Motorbike":20.455,"Public":0,"Train":32.587,"Walking":74.436},{"month":"2019-09-01","Biking":0,"Car":2.188,"Motorbike":15.412,"Public":0,"Train":22.886,"Walking":18.931},{"month":"2019-10-01","Biking":212.773,"Car":55.287,"Motorbike":120.111,"Public":0,"Train":162.358,"Walking":475.073},{"month":"2019-11-01","Biking":683.104,"Car":83.026,"Motorbike":385.797,"Public":0,"Train":77.824,"Walking":638.581},{"month":"2019-12-01","Biking":695.247,"Car":96.591,"Motorbike":887.076,"Public":0,"Train":110.562,"Walking":493.462},{"month":"2020-01-01","Biking":322.377,"Car":37.643,"Motorbike":668.783,"Public":0,"Train":72.359,"Walking":338.697},{"month":"2020-02-01","Biking":192.639,"Car":9.197,"Motorbike":179.732,"Public":0,"Train":150.071,"Walking":342.729},{"month":"2020-03-01","Biking":177.135,"Car":8.154,"Motorbike":201.991,"Public":0,"Train":41.933,"Walking":216.894}]
[{"month":"2018-11-01","Biking":10,"Car":0,"Motorbike":0,"Public":1,"Train":0,"Walking":16},{"month":"2018-12-01","Biking":23,"Car":0,"Motorbike":0,"Public":18,"Train":0,"Walking":42},{"month":"2019-01-01","Biking":15,"Car":0,"Motorbike":0,"Public":12,"Train":0,"Walking":40},{"month":"2019-02-01","Biking":3,"Car":0,"Motorbike":0,"Public":1,"Train":0,"Walking":3},{"month":"2019-03-01","Biking":3,"Car":0,"Motorbike":0,"Public":6,"Train":0,"Walking":12},{"month":"2019-04-01","Biking":6,"Car":0,"Motorbike":0,"Public":6,"Train":0,"Walking":23},{"month":"2019-05-01","Biking":6,"Car":0,