Merge pull request #254 from ZeusWPI/datavis-dino-don-elo
Eet en drankgewoonten in Zeus @Miaoulo, @iliclaey
This commit is contained in:
commit
914854ccfc
22 changed files with 6561 additions and 29 deletions
4
Gemfile
4
Gemfile
|
@ -3,6 +3,8 @@ source 'https://rubygems.org'
|
|||
|
||||
gem 'nanoc'
|
||||
|
||||
gem 'uglifier', '>= 4.0.0'
|
||||
|
||||
# General filtering
|
||||
gem 'coffee-script'
|
||||
gem 'icalendar' # ical files
|
||||
|
@ -33,7 +35,7 @@ end
|
|||
group :production do
|
||||
# Autoprefixing for class
|
||||
gem 'autoprefixer-rails'
|
||||
gem 'html_press'
|
||||
gem 'htmlcompressor'
|
||||
end
|
||||
|
||||
group :nanoc do
|
||||
|
|
38
Gemfile.lock
38
Gemfile.lock
|
@ -3,9 +3,9 @@ GEM
|
|||
specs:
|
||||
addressable (2.5.2)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
adsf (1.4.0)
|
||||
adsf (1.4.1)
|
||||
rack (>= 1.0.0, < 3.0.0)
|
||||
autoprefixer-rails (7.2.5)
|
||||
autoprefixer-rails (8.5.0)
|
||||
execjs
|
||||
builder (3.2.3)
|
||||
coderay (1.1.2)
|
||||
|
@ -17,17 +17,13 @@ GEM
|
|||
concurrent-ruby (1.0.5)
|
||||
cri (2.10.1)
|
||||
colored (~> 1.2)
|
||||
css_press (0.3.2)
|
||||
csspool-st (= 3.1.2)
|
||||
json
|
||||
csspool-st (3.1.2)
|
||||
ddmemoize (1.0.0)
|
||||
ddmetrics (~> 1.0)
|
||||
ref (~> 2.0)
|
||||
ddmetrics (1.0.0)
|
||||
ddplugin (1.0.2)
|
||||
execjs (2.7.0)
|
||||
ffi (1.9.18)
|
||||
ffi (1.9.23)
|
||||
formatador (0.2.5)
|
||||
guard (2.14.2)
|
||||
formatador (>= 0.2.4)
|
||||
|
@ -46,11 +42,7 @@ GEM
|
|||
hamster (3.0.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
highline (1.7.10)
|
||||
html_press (0.8.2)
|
||||
htmlentities
|
||||
multi_css (>= 0.1.0)
|
||||
multi_js (>= 0.1.0)
|
||||
htmlentities (4.3.4)
|
||||
htmlcompressor (0.4.0)
|
||||
icalendar (2.4.1)
|
||||
json (2.1.0)
|
||||
kramdown (1.16.2)
|
||||
|
@ -59,13 +51,9 @@ GEM
|
|||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
lumberjack (1.0.12)
|
||||
lumberjack (1.0.13)
|
||||
method_source (0.9.0)
|
||||
mini_portile2 (2.3.0)
|
||||
multi_css (0.1.0)
|
||||
css_press
|
||||
multi_js (0.1.0)
|
||||
uglifier (~> 2)
|
||||
nanoc (4.9.2)
|
||||
addressable (~> 2.5)
|
||||
cri (~> 2.8)
|
||||
|
@ -78,7 +66,7 @@ GEM
|
|||
slow_enumerator_tools (~> 1.0)
|
||||
tomlrb (~> 1.2)
|
||||
nenv (0.3.0)
|
||||
nokogiri (1.8.1)
|
||||
nokogiri (1.8.2)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
notiffany (0.1.1)
|
||||
nenv (~> 0.1)
|
||||
|
@ -89,14 +77,14 @@ GEM
|
|||
coderay (~> 1.1.0)
|
||||
method_source (~> 0.9.0)
|
||||
public_suffix (3.0.2)
|
||||
rack (2.0.3)
|
||||
rb-fsevent (0.10.2)
|
||||
rack (2.0.5)
|
||||
rb-fsevent (0.10.3)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
ref (2.0.0)
|
||||
ruby_dep (1.5.0)
|
||||
rubypants (0.7.0)
|
||||
sass (3.5.5)
|
||||
sass (3.5.6)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
|
@ -112,9 +100,8 @@ GEM
|
|||
tomlrb (1.2.6)
|
||||
typogruby (1.0.18)
|
||||
rubypants
|
||||
uglifier (2.7.2)
|
||||
execjs (>= 0.3.0)
|
||||
json (>= 1.8.0)
|
||||
uglifier (4.1.10)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
w3c_validators (1.3.3)
|
||||
json (>= 1.8)
|
||||
nokogiri (~> 1.6)
|
||||
|
@ -130,7 +117,7 @@ DEPENDENCIES
|
|||
coffee-script
|
||||
guard-nanoc
|
||||
highline
|
||||
html_press
|
||||
htmlcompressor
|
||||
icalendar
|
||||
kramdown
|
||||
nanoc
|
||||
|
@ -140,6 +127,7 @@ DEPENDENCIES
|
|||
terminal-notifier-guard
|
||||
therubyracer
|
||||
typogruby
|
||||
uglifier (>= 4.0.0)
|
||||
w3c_validators
|
||||
words_counted
|
||||
|
||||
|
|
2
Rules
2
Rules
|
@ -170,7 +170,7 @@ compile '/assets/scripts/**/*.coffee' do
|
|||
end
|
||||
|
||||
compile '/assets/scripts/**/*.js' do
|
||||
filter :uglify_js
|
||||
filter :uglify_js, harmony: true
|
||||
end
|
||||
|
||||
ignore '/assets/stylesheets/includes/**/*'
|
||||
|
|
237
content/assets/scripts/datavis/blog.js
Normal file
237
content/assets/scripts/datavis/blog.js
Normal file
|
@ -0,0 +1,237 @@
|
|||
// BUBBLEMAP
|
||||
(function () {
|
||||
let dayFilter = new Set();
|
||||
|
||||
function applyFilter(data) {
|
||||
if (dayFilter.size > 0) {
|
||||
return _.filter(data, e => dayFilter.has(moment(e.starttime).day()))
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function filterData(data, beginTime, endTime) {
|
||||
data = applyFilter(data);
|
||||
return _(data).filter(e => beginTime <= moment(e.starttime) && moment(e.starttime) <= endTime).value();
|
||||
}
|
||||
|
||||
d3.csv(`/csvdata/punchcard.csv`).then(data => {
|
||||
// Sort the data chronologically
|
||||
data = _.sortBy(data, e => Date.parse(e.starttime));
|
||||
|
||||
const chart = bubbleMap();
|
||||
const selection = d3.select('#leafletmap')
|
||||
.datum(data)
|
||||
.call(chart);
|
||||
|
||||
const times = _(data).map(e => moment(e.starttime));
|
||||
|
||||
const slider = timeSlider()
|
||||
.domain([times.min().toDate(), times.max().toDate()])
|
||||
.data(times.value())
|
||||
.on('slide.hm', domain => {
|
||||
const beginTime = domain[0];
|
||||
const endTime = domain[1];
|
||||
|
||||
const d = filterData(data, beginTime, endTime);
|
||||
selection.datum(d).call(chart)
|
||||
});
|
||||
const sel2 = d3.select('#slider1').call(slider);
|
||||
|
||||
d3.selectAll("#dayButtons .button")
|
||||
.on("click", function () {
|
||||
const btn = d3.select(this);
|
||||
const num = +btn.attr('data-day-idx');
|
||||
const selected = btn.classed('is-outlined');
|
||||
|
||||
if (num >= 0) {
|
||||
selected ? dayFilter.add(num) : dayFilter.delete(num) ;
|
||||
btn.classed('is-outlined', !selected)
|
||||
} else {
|
||||
dayFilter = new Set();
|
||||
d3.selectAll("#dayButtons .button").classed('is-outlined', true);
|
||||
}
|
||||
|
||||
const filtered = applyFilter(data);
|
||||
|
||||
const sliderData = _(filtered).map(e => moment(e.starttime).toDate()).value();
|
||||
selection.datum(filtered).call(chart);
|
||||
slider.data(sliderData);
|
||||
});
|
||||
|
||||
var playing = false;
|
||||
var interval;
|
||||
|
||||
d3.select('#playButton')
|
||||
.on('click', function () {
|
||||
if(playing) {
|
||||
clearInterval(interval);
|
||||
playing = false;
|
||||
d3.select(this).text('Play');
|
||||
return;
|
||||
}
|
||||
|
||||
playing = true;
|
||||
d3.select(this).text('Pause');
|
||||
|
||||
let beginTime = moment(slider.slider()[0]);
|
||||
let endTime = moment(slider.slider()[1]);
|
||||
|
||||
interval = setInterval(() => {
|
||||
const bt = beginTime.toDate();
|
||||
const et = endTime.toDate();
|
||||
|
||||
if (endTime < times.max()) {
|
||||
const filtData = filterData(data, bt, et);
|
||||
|
||||
selection.datum(filtData).call(chart);
|
||||
slider.slider([bt, et]);
|
||||
|
||||
beginTime.add(1, 'd');
|
||||
endTime.add(1, 'd');
|
||||
} else {
|
||||
clearInterval(interval);
|
||||
}
|
||||
}, 20);
|
||||
|
||||
d3.select(this).text('Pause');
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
||||
// PUNCHCARD
|
||||
(function () {
|
||||
d3.csv(`/csvdata/punchcard.csv`, e => { return { ...e, starttime: moment(e.starttime) } }).then(data => {
|
||||
function prepareData(data) {
|
||||
let grouped = _(data).groupBy(e => e.name).mapValues(e => _(e).groupBy(e => e.starttime.hour()).mapValues(e => e.length).value()).value();
|
||||
grouped = _(grouped).toPairs().sortBy(e => -_(e[1]).values().sum()).fromPairs().value();
|
||||
|
||||
return grouped;
|
||||
}
|
||||
|
||||
const grouped = prepareData(data);
|
||||
|
||||
const pChart = punchCard().data(grouped);
|
||||
const svg = d3.select('svg#punchcard').call(pChart);
|
||||
|
||||
const times = _(data).map(e => e.starttime);
|
||||
|
||||
function filterData(data, beginTime, endTime) {
|
||||
return _(data).filter(e => beginTime <= e.starttime && e.starttime <= endTime).value();
|
||||
}
|
||||
|
||||
const slider = timeSlider()
|
||||
.domain([times.min(), times.max()])
|
||||
.data(times.value())
|
||||
.on('slide.punchcard', domain => {
|
||||
const beginTime = domain[0];
|
||||
const endTime = domain[1];
|
||||
|
||||
const d = filterData(data, beginTime, endTime);
|
||||
pChart.data(prepareData(d));
|
||||
});
|
||||
const sel2 = d3.select('#slider2').call(slider);
|
||||
|
||||
var playing = false;
|
||||
var interval;
|
||||
|
||||
d3.select('#playButton2')
|
||||
.on('click', function () {
|
||||
if(playing) {
|
||||
clearInterval(interval);
|
||||
playing = false;
|
||||
d3.select(this).text('Play');
|
||||
return;
|
||||
}
|
||||
|
||||
playing = true;
|
||||
d3.select(this).text('Pause');
|
||||
|
||||
let beginTime = moment(slider.slider()[0]);
|
||||
let endTime = moment(slider.slider()[1]);
|
||||
|
||||
interval = setInterval(() => {
|
||||
const bt = beginTime.toDate();
|
||||
const et = endTime.toDate();
|
||||
|
||||
if (endTime < times.max()) {
|
||||
const filtData = prepareData(filterData(data, bt, et));
|
||||
|
||||
pChart.data(filtData);
|
||||
slider.slider([bt, et]);
|
||||
|
||||
beginTime.add(1, 'd');
|
||||
endTime.add(1, 'd');
|
||||
} else {
|
||||
clearInterval(interval);
|
||||
}
|
||||
}, 20);
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
||||
// INSTANCE CHART
|
||||
(function () {
|
||||
d3.csv(`/csvdata/punchcard.csv`, e => {
|
||||
return { ...e, starttime: moment(e.starttime) }
|
||||
}).then(data => {
|
||||
function prepareData(data, interval) {
|
||||
data = _(data).sortBy(e => e.starttime).groupBy('name').value();
|
||||
return data
|
||||
}
|
||||
|
||||
const prepped = prepareData(data, d3.timeDay);
|
||||
|
||||
let chart = instanceChart().data(prepped);
|
||||
|
||||
d3.select('svg#instance').call(chart);
|
||||
});
|
||||
})();
|
||||
|
||||
// RANKING CHART
|
||||
(function () {
|
||||
function prepareData(data, interval) {
|
||||
let l = data.length;
|
||||
|
||||
data = _(data).sortBy(e => e.starttime).value();
|
||||
|
||||
let slices = [];
|
||||
let slice = []
|
||||
let itv = interval(data[0].starttime);
|
||||
|
||||
for (const d of data) {
|
||||
slice.push(d);
|
||||
let nItv = interval(d.starttime);
|
||||
|
||||
if (itv.getTime() !== nItv.getTime()) {
|
||||
slices.push({
|
||||
slice: slice.slice(),
|
||||
time: itv
|
||||
});
|
||||
itv = nItv;
|
||||
}
|
||||
}
|
||||
|
||||
let res = slices.map(e => {
|
||||
let r = _(e.slice).countBy('name').toPairs().orderBy('1', 'desc').value();
|
||||
|
||||
return { slice: r, time: e.time };
|
||||
});
|
||||
|
||||
res = res.map((l, _) => l.slice.map((e, i) => { return { time: l.time, name: e[0], count: e[1], idx: i }; }));
|
||||
res = _(res).flatten();
|
||||
|
||||
return res.groupBy('name').value();
|
||||
}
|
||||
|
||||
d3.csv(`/csvdata/punchcard.csv`, e => {
|
||||
return { ...e, starttime: moment(e.starttime) }
|
||||
}).then(data => {
|
||||
const prepped = prepareData(data, d3.timeDay.every(1));
|
||||
|
||||
let chart = rankingChart()
|
||||
.data(prepped);
|
||||
|
||||
d3.select('svg#rankings').call(chart);
|
||||
});
|
||||
})();
|
116
content/assets/scripts/datavis/bubbleMap.js
Normal file
116
content/assets/scripts/datavis/bubbleMap.js
Normal file
|
@ -0,0 +1,116 @@
|
|||
(function () {
|
||||
function bubbleMap() {
|
||||
// Empty map variable, will init once
|
||||
var map;
|
||||
|
||||
function init(mapId) {
|
||||
if (map == null) {
|
||||
map = new L.Map(mapId, { center: [51.023115, 3.710299], zoom: 12 })
|
||||
.addLayer(new L.TileLayer('https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png'));
|
||||
|
||||
map._initPathRoot();
|
||||
|
||||
d3.select(`#${mapId}`)
|
||||
.select('svg')
|
||||
.append('g')
|
||||
.attr("class", "leaflet-zoom-hide")
|
||||
}
|
||||
}
|
||||
|
||||
function my(sel) {
|
||||
init(sel.attr('id'));
|
||||
|
||||
const g = sel.select('g');
|
||||
const dt = g.datum();
|
||||
|
||||
var div = d3.select(".tooltip").style('opacity', 0);
|
||||
|
||||
function vrUpdate() {
|
||||
let g = d3.select('g');
|
||||
|
||||
const selection = g.selectAll('.location');
|
||||
const data = selection.data();
|
||||
const lines = g.selectAll('line');
|
||||
const latlngs = data.map(e => map.latLngToLayerPoint(new L.LatLng(e.lat, e.lon)));
|
||||
|
||||
selection
|
||||
.attr('cx', (e, i) => latlngs[i].x)
|
||||
.attr('cy', (e, i) => latlngs[i].y)
|
||||
;
|
||||
}
|
||||
|
||||
const t = d3.transition()
|
||||
.ease(d3.easeLinear)
|
||||
.duration(100);
|
||||
|
||||
const sizes = _.countBy(dt, 'location_id');
|
||||
const data = _.uniqBy(dt, 'location_id')
|
||||
|
||||
let radius = d3.scaleSqrt()
|
||||
.range([0, 50])
|
||||
.domain([0, 177])
|
||||
;
|
||||
|
||||
// JOIN DATA
|
||||
const selection = g.selectAll('.location').data(data, d => d.location_id);
|
||||
const lines = g.selectAll('line').data(data, d => d.location_id);
|
||||
|
||||
// EXIT
|
||||
selection.exit()
|
||||
.transition(t)
|
||||
.attr('r', 0)
|
||||
.remove();
|
||||
|
||||
// ENTER
|
||||
selection.enter()
|
||||
.append('circle')
|
||||
.style("stroke", "white")
|
||||
.style("opacity", .4)
|
||||
.style("fill", "blue")
|
||||
.attr("r", 0)
|
||||
.attr('class', 'location')
|
||||
.each(d => {
|
||||
const coord = map.latLngToLayerPoint(new L.LatLng(d.lat, d.lon));
|
||||
g.append('circle')
|
||||
.attr('r', radius(sizes[d.location_id]))
|
||||
.attr('fill-opacity', 0)
|
||||
.style('stroke', 'black')
|
||||
.attr('transform', e => `translate(${coord.x}, ${coord.y})`)
|
||||
.attr('opacity', 1)
|
||||
.transition()
|
||||
.duration(1000)
|
||||
.ease(d3.easeLinear)
|
||||
.attr('r', 75)
|
||||
.attr('opacity', 0)
|
||||
.remove();
|
||||
})
|
||||
.on("mouseout", _ => {
|
||||
div.style("opacity", 0);
|
||||
})
|
||||
.merge(selection)
|
||||
// We do the mouseover after the merge so the values update when changing time
|
||||
.on("mouseover", function (d) {
|
||||
div.text(`${d.name} (${sizes[d.location_id]})`);
|
||||
|
||||
let rect = d3.select(this).node().getBoundingClientRect();
|
||||
let t_rect = div.node().getBoundingClientRect();
|
||||
div
|
||||
.style("opacity", .9)
|
||||
.style("left", (rect.left + rect.width/2 - t_rect.width/2) + "px")
|
||||
.style("top", (rect.top - t_rect.height - 5) + "px")
|
||||
;
|
||||
})
|
||||
.transition(t)
|
||||
.attr("r", d => radius(sizes[d.location_id]))
|
||||
;
|
||||
|
||||
vrUpdate();
|
||||
|
||||
map.on("viewreset", vrUpdate);
|
||||
}
|
||||
|
||||
return my;
|
||||
}
|
||||
|
||||
window['bubbleMap'] = bubbleMap;
|
||||
})();
|
172
content/assets/scripts/datavis/instanceChart.js
Normal file
172
content/assets/scripts/datavis/instanceChart.js
Normal file
|
@ -0,0 +1,172 @@
|
|||
(function() {
|
||||
const EMOJI_TYPES = {
|
||||
chinese: '🥡',
|
||||
pasta: '🍝',
|
||||
fries: '🍟',
|
||||
pizza: '🍕',
|
||||
pitta: '🥙',
|
||||
burgers: '🍔',
|
||||
sandwich: '🥪'
|
||||
}
|
||||
function instanceChart() {
|
||||
var margin = { top: 40, right: 60, bottom: 20, left: 20 };
|
||||
var data;
|
||||
var updateData;
|
||||
|
||||
function chart(svg) {
|
||||
let width = svg.attr('width');
|
||||
let height = svg.attr('height');
|
||||
|
||||
width -= margin.left + margin.right;
|
||||
height -= margin.top + margin.bottom;
|
||||
|
||||
const g = svg.append('g')
|
||||
.attr("transform", `translate(${margin.left}, ${margin.top})`);
|
||||
|
||||
updateData = function () {
|
||||
times = _(data).toPairs().map(1).flatten().map('starttime').value();
|
||||
|
||||
const leftPad = 170;
|
||||
|
||||
const x = d3.scaleTime()
|
||||
.domain(d3.extent(times))
|
||||
.range([0, width - leftPad])
|
||||
;
|
||||
|
||||
console.log(x.domain());
|
||||
|
||||
|
||||
const y = d3.scaleBand()
|
||||
.domain(d3.keys(data))
|
||||
.range([0, height])
|
||||
;
|
||||
|
||||
const yLegend = d3.scaleBand()
|
||||
.domain(d3.keys(EMOJI_TYPES))
|
||||
.range([0, 170])
|
||||
.paddingInner(0.4)
|
||||
;
|
||||
|
||||
// const c = d3.scaleOrdinal(d3.schemeCategory10);
|
||||
const c = d3.scaleOrdinal(d3.schemeCategory10).domain(d3.keys(EMOJI_TYPES));
|
||||
|
||||
let axis = d3.axisTop(x);
|
||||
|
||||
const selection = g.selectAll('g.instance').data(d3.entries(data));
|
||||
|
||||
let instance = selection.enter().append('g')
|
||||
.classed('instance', true)
|
||||
.attr('transform', d => `translate(0, ${y(d.key)})`)
|
||||
;
|
||||
|
||||
instance.append('text')
|
||||
.attr('y', y.bandwidth() / 2)
|
||||
// .style('fill', d => `${c(d.value[0].type)}`)
|
||||
.text(d => `${EMOJI_TYPES[d.value[0].type]} ${d.key} (${d.value.length})`)
|
||||
.style('font-size', '12pt')
|
||||
;
|
||||
|
||||
const iHeightMod = 0.8;
|
||||
|
||||
// GRAY BACKGROUND
|
||||
instance.append('rect')
|
||||
.attr('x', leftPad)
|
||||
.attr('width', width - leftPad)
|
||||
.attr('height', y.bandwidth() * iHeightMod)
|
||||
.attr('fill-opacity', 0.03)
|
||||
;
|
||||
|
||||
instance.append('g')
|
||||
.classed('innerInstance', true)
|
||||
.selectAll('rect.tick').data(d => d.value).enter().append('rect')
|
||||
.classed('tick', true)
|
||||
.attr('x', d => leftPad + x(d.starttime))
|
||||
.attr('width', 2)
|
||||
.attr('height', y.bandwidth() * iHeightMod)
|
||||
.attr('fill', d => c(d.type))
|
||||
.attr('fill-opacity', 0.8)
|
||||
;
|
||||
|
||||
g.append('g')
|
||||
.attr('transform', `translate(${leftPad}, -5)`)
|
||||
.call(axis)
|
||||
;
|
||||
|
||||
const text = d3.select('body').append('div')
|
||||
.style('position', 'fixed')
|
||||
.style('opacity', 0)
|
||||
.style('background-color', 'white')
|
||||
.style('border-radius', '20px')
|
||||
.style('padding', '5px')
|
||||
;
|
||||
|
||||
const line = g.append('rect')
|
||||
.attr('y', 0)
|
||||
.attr('height', height - (y.bandwidth() * (1 - iHeightMod)))
|
||||
.attr('width', 1)
|
||||
.attr('opacity', 0)
|
||||
;
|
||||
|
||||
const legendEntry = g.selectAll('g.legendEntry').data(d3.keys(EMOJI_TYPES)).enter().append('g')
|
||||
.classed('legendEntry', true)
|
||||
.attr('transform', d => `translate(${20 + leftPad + x.range()[1]}, ${yLegend(d)})`)
|
||||
;
|
||||
|
||||
legendEntry
|
||||
.append('rect')
|
||||
.attr('width', yLegend.bandwidth())
|
||||
.attr('height', yLegend.bandwidth())
|
||||
.attr('fill', c)
|
||||
.attr('fill-opacity', 0.8)
|
||||
;
|
||||
|
||||
legendEntry
|
||||
.append('text')
|
||||
.attr('x', yLegend.bandwidth() + 5)
|
||||
.attr('y', 17)
|
||||
.text(d => EMOJI_TYPES[d])
|
||||
;
|
||||
|
||||
g.append('rect')
|
||||
.attr('width', x.range()[1])
|
||||
.attr('height', y.range()[1])
|
||||
.attr('fill-opacity', 0)
|
||||
.attr('x', leftPad)
|
||||
.on('mouseover', () => {
|
||||
text.style('opacity', 1);
|
||||
line.attr('opacity', 1);
|
||||
})
|
||||
.on('mousemove', function () {
|
||||
let mouse = d3.mouse(this);
|
||||
let date = x.invert(mouse[0] - leftPad);
|
||||
|
||||
text
|
||||
.style('left', `${d3.event.x + 15}px`)
|
||||
.style('top', `${d3.event.y - 20}px`)
|
||||
;
|
||||
|
||||
let fmt = d3.timeFormat('%d/%m/%y');
|
||||
text.text(fmt(date));
|
||||
line.attr('x', mouse[0])
|
||||
})
|
||||
.on('mouseout', () => {
|
||||
text.style('opacity', 0);
|
||||
line.attr('opacity', 0);
|
||||
})
|
||||
;
|
||||
}
|
||||
updateData();
|
||||
}
|
||||
|
||||
chart.data = function (value) {
|
||||
if (!arguments.length) return data;
|
||||
data = value;
|
||||
if (typeof updateData === 'function') updateData();
|
||||
return chart;
|
||||
}
|
||||
|
||||
return chart;
|
||||
}
|
||||
|
||||
window['instanceChart'] = instanceChart;
|
||||
})();
|
119
content/assets/scripts/datavis/punchcard.js
Normal file
119
content/assets/scripts/datavis/punchcard.js
Normal file
|
@ -0,0 +1,119 @@
|
|||
(function () {
|
||||
function punchCard() {
|
||||
var margin = { top: 20, right: 20, bottom: 30, left: 150 };
|
||||
var data;
|
||||
var updateData;
|
||||
|
||||
const tooltip = d3.select('body').append('div')
|
||||
.classed('tooltip', true)
|
||||
.attr('id', 'pCardTooltip')
|
||||
.style("opacity", 0);
|
||||
;
|
||||
|
||||
function chart(svg) {
|
||||
let width = svg.attr('width');
|
||||
let height = svg.attr('height');
|
||||
|
||||
width -= margin.left + margin.right;
|
||||
height -= margin.top + margin.bottom;
|
||||
|
||||
const g = svg.append('g')
|
||||
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
|
||||
|
||||
const gAxis = g.append('g')
|
||||
.classed('axis', true);
|
||||
|
||||
|
||||
updateData = function () {
|
||||
const maxValue = _(data).values().map(e => _(e).values().value()).map(e => _(e).max()).max();
|
||||
const x = d3.scaleLinear()
|
||||
.domain([0, 23])
|
||||
.range([0, width])
|
||||
;
|
||||
|
||||
const y = d3.scaleLinear()
|
||||
.domain([0, d3.keys(data).length])
|
||||
.range([0, height])
|
||||
;
|
||||
|
||||
const r = d3.scaleSqrt()
|
||||
.domain([1, maxValue])
|
||||
.range([3, 11])
|
||||
;
|
||||
|
||||
let rows = g.selectAll('g.row').data(d3.entries(data), d => d.key);
|
||||
|
||||
let erows = rows.enter().append('g')
|
||||
.classed('row', true)
|
||||
.attr('opacity', 1)
|
||||
|
||||
erows
|
||||
.append('text')
|
||||
.attr('x', -10)
|
||||
.attr('y', 3)
|
||||
.attr('text-anchor', 'end')
|
||||
.text(d => d.key);
|
||||
|
||||
rows.exit().remove();
|
||||
|
||||
rows = erows.merge(rows);
|
||||
|
||||
rows.transition().duration(25).attr('transform', (d, i) => `translate(0, ${y(i)})`);
|
||||
|
||||
const circles = rows.selectAll('circle.punch').data(d => d3.entries(d.value), d => d.key);
|
||||
circles.enter().append('circle')
|
||||
.classed('punch', true)
|
||||
.attr('cx', d => x(+d.key))
|
||||
.attr('fill', 'orange')
|
||||
.attr('r', 0)
|
||||
.on("mouseover", function (d) {
|
||||
tooltip.transition()
|
||||
.duration(200)
|
||||
.style("opacity", .9);
|
||||
tooltip.html(d.value);
|
||||
|
||||
// We calculate the bounding rects after setting the html
|
||||
let rect = d3.select(this).node().getBoundingClientRect();
|
||||
let t_rect = tooltip.node().getBoundingClientRect();
|
||||
tooltip
|
||||
.style("left", (rect.left + rect.width/2 - t_rect.width/2) + "px")
|
||||
.style("top", (rect.top - t_rect.height - 5) + "px");
|
||||
})
|
||||
.on("mouseout", _ => {
|
||||
tooltip.transition()
|
||||
.duration(500)
|
||||
.style("opacity", 0);
|
||||
})
|
||||
.merge(circles)
|
||||
.transition()
|
||||
.duration(25)
|
||||
.attr('r', d => r(d.value))
|
||||
;
|
||||
|
||||
circles.exit().transition()
|
||||
.attr('r', 0)
|
||||
.remove();
|
||||
|
||||
rows.selectAll('circle.punch').attr('r', d => r(d.value));
|
||||
|
||||
const axis = d3.axisBottom(x).ticks(24);
|
||||
|
||||
gAxis
|
||||
.attr('transform', `translate(0, ${y.range()[1]})`)
|
||||
.call(axis);
|
||||
}
|
||||
updateData();
|
||||
}
|
||||
|
||||
chart.data = function (value) {
|
||||
if (!arguments.length) return data;
|
||||
data = value;
|
||||
if (typeof updateData === 'function') updateData();
|
||||
return chart;
|
||||
}
|
||||
|
||||
return chart;
|
||||
}
|
||||
|
||||
window['punchCard'] = punchCard;
|
||||
})();
|
116
content/assets/scripts/datavis/rankingChart.js
Normal file
116
content/assets/scripts/datavis/rankingChart.js
Normal file
|
@ -0,0 +1,116 @@
|
|||
(function() {
|
||||
function rankingChart() {
|
||||
var margin = { top: 50, right: 120, bottom: 20, left: 120 };
|
||||
var data;
|
||||
var updateData;
|
||||
|
||||
function chart(svg) {
|
||||
let width = $(svg.node()).width();
|
||||
let height = svg.attr('height');
|
||||
|
||||
width -= margin.left + margin.right;
|
||||
height -= margin.top + margin.bottom;
|
||||
|
||||
const g = svg.append('g')
|
||||
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
|
||||
|
||||
updateData = function () {
|
||||
let allDates = _(d3.entries(data).map(e => e.value)).flatten().value().map(e => e.time);
|
||||
let allIdx = _(d3.entries(data).map(e => e.value)).flatten().value().map(e => e.idx);
|
||||
|
||||
const x = d3.scaleTime()
|
||||
.domain(d3.extent(allDates))
|
||||
.range([0, width])
|
||||
.nice()
|
||||
;
|
||||
|
||||
let axis = d3.axisTop(x);
|
||||
|
||||
g.append('g')
|
||||
.attr('transform', `translate(0, -20)`)
|
||||
.call(axis);
|
||||
|
||||
const y = d3.scaleLinear()
|
||||
.domain([0, d3.max(allIdx)])
|
||||
.range([0, height])
|
||||
;
|
||||
|
||||
const c = d3.scaleOrdinal(d3.schemeCategory10);
|
||||
|
||||
const line = d3.line()
|
||||
.x(d => x(d.time))
|
||||
.y(d => y(d.idx))
|
||||
.curve(d3.curveMonotoneX)
|
||||
;
|
||||
|
||||
const minTimes = d3.entries(data).map(e => _(e.value).minBy('time'));
|
||||
const maxTimes = d3.entries(data).map(e => _(e.value).maxBy('time'));
|
||||
|
||||
function mouseover(ident) {
|
||||
return function inner(d, i, sel) {
|
||||
const path = g.selectAll('path.rankPath').filter(e => d[ident] === e.key);
|
||||
const others = g.selectAll('path.rankPath').filter(e => d[ident] !== e.key);
|
||||
path.attr('stroke-width', 6);
|
||||
others.attr('stroke', 'gray');
|
||||
}
|
||||
}
|
||||
|
||||
function mouseout(ident) {
|
||||
return function inner(d, i, sel) {
|
||||
const path = g.selectAll('path.rankPath').filter(e => d[ident] === e.key);
|
||||
const others = g.selectAll('path.rankPath');
|
||||
path.attr('stroke-width', 3);
|
||||
others.attr('stroke', (_, i) => c(i));
|
||||
}
|
||||
}
|
||||
|
||||
g.selectAll('path.rankPath').data(d3.entries(data)).enter().append('path')
|
||||
.classed('rankPath', true)
|
||||
.attr('fill-opacity', 0)
|
||||
.attr('stroke', (_, i) => c(i))
|
||||
.attr('stroke-width', 3)
|
||||
.attr('d', d => {
|
||||
const lastVal = d.value[d.value.length - 1];
|
||||
const nVal = {...lastVal, time: x.domain()[1]}
|
||||
return line(d.value.concat([nVal]));
|
||||
})
|
||||
.on('mouseover', mouseover('key'))
|
||||
.on('mouseout', mouseout('key'))
|
||||
;
|
||||
|
||||
g.selectAll('text.begin').data(minTimes).enter().append('text')
|
||||
.classed('begin', true)
|
||||
.attr('x', d => x(d.time) - 5)
|
||||
.attr('y', d => y(d.idx) + 4)
|
||||
.attr('text-anchor', 'end')
|
||||
.text(d => d.name)
|
||||
.on('mouseover', mouseover('name'))
|
||||
.on('mouseout', mouseout('name'))
|
||||
;
|
||||
|
||||
g.selectAll('text.end').data(maxTimes).enter().append('text')
|
||||
.classed('end', true)
|
||||
.attr('x', d => x.range()[1] + 5)
|
||||
.attr('y', d => y(d.idx) + 4)
|
||||
.attr('text-anchor', 'begin')
|
||||
.text(d => d.name)
|
||||
.on('mouseover', mouseover('name'))
|
||||
.on('mouseout', mouseout('name'))
|
||||
;
|
||||
}
|
||||
updateData();
|
||||
}
|
||||
|
||||
chart.data = function (value) {
|
||||
if (!arguments.length) return data;
|
||||
data = value;
|
||||
if (typeof updateData === 'function') updateData();
|
||||
return chart;
|
||||
}
|
||||
|
||||
return chart;
|
||||
}
|
||||
|
||||
window['rankingChart'] = rankingChart;
|
||||
|
||||
})();
|
334
content/assets/scripts/datavis/script2.js
Normal file
334
content/assets/scripts/datavis/script2.js
Normal file
|
@ -0,0 +1,334 @@
|
|||
(function () {
|
||||
const width = 1000;
|
||||
const height = 800;
|
||||
const middle = height / 2;
|
||||
const barPadding = 1;
|
||||
const padding = { top: 50, left: 50, right: 40, bottom: 50 };
|
||||
const formatTime = d3.timeFormat('%b %e %Y');
|
||||
|
||||
let prevUpper, prevLower;
|
||||
let xScale, yScale1, yScale2, xAxis, yAxis1, yAxis2;
|
||||
let prevUpperButton, prevLowerButton;
|
||||
var chart, chart2, slider, selection;
|
||||
var userdata, pricedata, eventdata, tapordersdata, tapusersdata;
|
||||
|
||||
d3.csv('/csvdata/haldis-price-time.csv', d => {
|
||||
return {
|
||||
date: d3.timeParse('%Y-%m-%d')(d.starttime).setHours(0, 0, 0, 0),
|
||||
value: parseInt(d.total_price) / 100
|
||||
};
|
||||
}).then(function (data) {
|
||||
pricedata = data;
|
||||
|
||||
return d3.csv('/csvdata/haldis-num-users-time.csv', d => {
|
||||
return {
|
||||
date: d3.timeParse("%Y-%m-%d")(d.starttime).setHours(0, 0, 0, 0),
|
||||
value: parseInt(d.num_users)
|
||||
};
|
||||
});
|
||||
}).then(function (data) {
|
||||
userdata = data;
|
||||
|
||||
return d3.csv('/csvdata/eventdata.csv', d => {
|
||||
return {
|
||||
date: d3.utcParse("%Y-%m-%dT%H:%M:%S%Z")(d.date).setHours(0, 0, 0, 0),
|
||||
title: d.title
|
||||
};
|
||||
});
|
||||
}).then(function (data) {
|
||||
eventdata = data;
|
||||
|
||||
return d3.csv('/csvdata/tap-orders-day.csv', d => {
|
||||
return {
|
||||
date: d3.timeParse('%Y-%m-%d')(d.created_at).setHours(0, 0, 0, 0),
|
||||
value: parseInt(d.count)
|
||||
};
|
||||
});
|
||||
}).then(function (data) {
|
||||
tapordersdata = data;
|
||||
|
||||
return d3.csv('/csvdata/tap-orders-users-day.csv', d => {
|
||||
return {
|
||||
date: d3.timeParse('%Y-%m-%d')(d.created_at).setHours(0, 0, 0, 0),
|
||||
value: parseInt(d.count)
|
||||
};
|
||||
});
|
||||
}).then(function (data) {
|
||||
tapusersdata = data;
|
||||
|
||||
xScale = d3.scaleTime().range([padding.left, width - padding.right]);
|
||||
yScale1 = d3.scaleLinear().range([middle, padding.top]);
|
||||
yScale2 = d3.scaleLinear().range([padding.bottom, middle]);
|
||||
xAxis = d3.axisBottom().scale(xScale).ticks().tickFormat('').tickSize(0);
|
||||
yAxis1 = d3.axisLeft().scale(yScale1).ticks();
|
||||
yAxis2 = d3.axisLeft().scale(yScale2).ticks();
|
||||
|
||||
|
||||
chart = timeBarChart();
|
||||
chart.upper = true;
|
||||
chart.eventdata = eventdata;
|
||||
|
||||
chart2 = timeBarChart();
|
||||
chart2.upper = false;
|
||||
chart2.eventdata = eventdata;
|
||||
|
||||
selection = d3.select('#barchart').append('g');
|
||||
|
||||
selection.append('g')
|
||||
.attr('class', 'x axis')
|
||||
.attr('transform', `translate(0, ${middle})`);
|
||||
|
||||
selection.append('g')
|
||||
.attr('class', 'y axis')
|
||||
.attr('transform', `translate(${padding.left}, 0)`);
|
||||
|
||||
selection.append('g')
|
||||
.attr('class', 'y axis2')
|
||||
.attr('transform', `translate(${padding.left}, ${middle - padding.top})`);
|
||||
|
||||
slider = timeSlider();
|
||||
|
||||
prevUpper = userdata;
|
||||
prevLower = tapordersdata;
|
||||
updateData(userdata, true);
|
||||
updateData(tapordersdata, false);
|
||||
|
||||
prevUpperButton = d3.select("#user-button");
|
||||
prevLowerButton = d3.select("#tap-order-button");
|
||||
setActiveButton('#haldis-user-button', true);
|
||||
setActiveButton('#tap-order-button', false);
|
||||
|
||||
slider.on('slide', domain => {
|
||||
chart.domain.start = domain[0];
|
||||
chart.domain.end = domain[1];
|
||||
chart2.domain.start = domain[0];
|
||||
chart2.domain.end = domain[1];
|
||||
|
||||
const d1 = filterData(prevUpper, chart.domain.start, chart.domain.end);
|
||||
const d2 = filterData(prevLower, chart2.domain.start, chart2.domain.end);
|
||||
|
||||
selection.datum(d1).call(chart);
|
||||
selection.datum(d2).call(chart2);
|
||||
});
|
||||
d3.select('#slider').call(slider);
|
||||
});
|
||||
|
||||
function setActiveButton(name, upper) {
|
||||
curButton = d3.select(name);
|
||||
if (upper) {
|
||||
prevUpperButton.classed("is-focused", false);
|
||||
prevUpperButton = curButton;
|
||||
} else {
|
||||
prevLowerButton.classed("is-focused", false);
|
||||
prevLowerButton = curButton;
|
||||
}
|
||||
curButton.classed("is-focused", true);
|
||||
}
|
||||
|
||||
function filterData(data, beginTime, endTime) {
|
||||
return _(data).filter(e => beginTime <= e.date && e.date <= endTime).value();
|
||||
}
|
||||
|
||||
function timeBarChart() {
|
||||
function my(svg) {
|
||||
let eventdata = my.eventdata;
|
||||
var dt = svg.datum();
|
||||
|
||||
const t = d3.transition()
|
||||
.ease(d3.easeLinear)
|
||||
.duration(100);
|
||||
|
||||
xScale.domain([my.domain.start, my.domain.end]);
|
||||
|
||||
svg.select('.x.axis')
|
||||
.transition(t)
|
||||
.call(xAxis);
|
||||
|
||||
if (my.upper) {
|
||||
yScale1.domain(d3.extent(dt, d => d.value));
|
||||
svg.select('.y.axis')
|
||||
.transition(t)
|
||||
.call(yAxis1);
|
||||
} else {
|
||||
yScale2.domain(d3.extent(dt, d => d.value));
|
||||
svg.select('.y.axis2')
|
||||
.transition(t)
|
||||
.call(yAxis2);
|
||||
}
|
||||
|
||||
function update() {
|
||||
let g = d3.select('svg#barchart > g');
|
||||
|
||||
var selection, sellines, eventlines;
|
||||
if (my.upper) {
|
||||
selection = g.selectAll('.datacircle');
|
||||
sellines = g.selectAll('.line');
|
||||
eventlines = g.selectAll('.eventline');
|
||||
} else {
|
||||
selection = g.selectAll('.datacircle2');
|
||||
sellines = g.selectAll('.line2');
|
||||
eventlines = g.selectAll('.eventline2');
|
||||
}
|
||||
|
||||
sellines
|
||||
.attr('x1', d => xScale(d.date))
|
||||
.attr('y1', () => my.upper ? middle : padding.top)
|
||||
.attr('x2', d => xScale(d.date))
|
||||
.attr('y2', d => my.upper ? yScale1(d.value) : yScale2(d.value));
|
||||
|
||||
eventlines
|
||||
.attr('x1', d => xScale(d.date))
|
||||
.attr('y1', () => my.upper ? middle : padding.top)
|
||||
.attr('x2', d => xScale(d.date))
|
||||
.attr('y2', (d) => {
|
||||
let yValue = 0;
|
||||
selection.data().forEach(function (el) {
|
||||
if (el.date === d.date) {
|
||||
yValue = el.value;
|
||||
}
|
||||
})
|
||||
return my.upper ? yScale1(yValue) : yScale2(yValue);
|
||||
});
|
||||
|
||||
selection
|
||||
.attr('cx', d => xScale(d.date))
|
||||
.attr('cy', d => my.upper ? yScale1(d.value) : yScale2(d.value));
|
||||
|
||||
}
|
||||
|
||||
const fed = filterData(eventdata, my.domain.start, my.domain.end);
|
||||
|
||||
var selection, sellines, eventlines;
|
||||
if (my.upper) {
|
||||
selection = svg.selectAll('.datacircle').data(dt, d => d.date);
|
||||
sellines = svg.selectAll('.line').data(dt, d => d.date);
|
||||
eventlines = svg.selectAll('.eventline').data(fed, d => d.date);
|
||||
} else {
|
||||
selection = svg.selectAll('.datacircle2').data(dt, d => d.date);
|
||||
sellines = svg.selectAll('.line2').data(dt, d => d.date);
|
||||
eventlines = svg.selectAll('.eventline2').data(fed, d => d.date);
|
||||
}
|
||||
|
||||
const fmtStr = 'DD/MM/YY';
|
||||
|
||||
sellines.exit().remove();
|
||||
|
||||
sellines.enter()
|
||||
.append('line')
|
||||
.attr('stroke', '#ddd')
|
||||
.attr('stroke-width', 2)
|
||||
.attr('class', () => my.upper ? 'line' : 'line2')
|
||||
.attr('transform', () => my.upper ? `translate(0, 0)` : `translate(0, ${middle - padding.bottom})`)
|
||||
.merge(sellines);
|
||||
|
||||
eventlines.exit().remove();
|
||||
|
||||
eventlines.enter()
|
||||
.append('line')
|
||||
.attr('stroke', '#f4a442')
|
||||
.attr('stroke-width', 2)
|
||||
.attr('class', () => my.upper ? 'eventline' : 'eventline2')
|
||||
.attr('transform', () => my.upper ? `translate(0, 0)` : `translate(0, ${middle - padding.bottom})`)
|
||||
.on("mouseover", function (d) {
|
||||
const tooltip = d3.select('.tooltip');
|
||||
|
||||
tooltip
|
||||
.style("opacity", .9)
|
||||
.html(moment(d.date).format(fmtStr) + ' - ' + d.title);
|
||||
|
||||
// We calculate the bounding rects after setting the html
|
||||
let rect = d3.select(this).node().getBoundingClientRect();
|
||||
let t_rect = tooltip.node().getBoundingClientRect();
|
||||
|
||||
tooltip
|
||||
.style("left", (rect.left + rect.width / 2 - t_rect.width / 2) + "px")
|
||||
.style("top", (rect.top - t_rect.height - 5) + "px");
|
||||
})
|
||||
.on("mouseout", _ => {
|
||||
const tooltip = d3.select('.tooltip');
|
||||
tooltip.style("opacity", 0);
|
||||
})
|
||||
.merge(eventlines);
|
||||
|
||||
selection.exit().remove();
|
||||
|
||||
selection.enter()
|
||||
.append('circle')
|
||||
.attr('fill', 'lightblue')
|
||||
.attr('class', () => my.upper ? 'datacircle' : 'datacircle2')
|
||||
.attr('transform', () => my.upper ? `translate(0, 0)` : `translate(0, ${middle - padding.bottom})`)
|
||||
.on("mouseover", function (d) {
|
||||
const tooltip = d3.select('.tooltip');
|
||||
|
||||
tooltip
|
||||
.style("opacity", .9)
|
||||
.html(moment(d.date).format(fmtStr) + ' - ' + d.value);
|
||||
|
||||
// We calculate the bounding rects after setting the html
|
||||
let rect = d3.select(this).node().getBoundingClientRect();
|
||||
let t_rect = tooltip.node().getBoundingClientRect();
|
||||
|
||||
tooltip
|
||||
.style("left", (rect.left + rect.width / 2 - t_rect.width / 2) + "px")
|
||||
.style("top", (rect.top - t_rect.height - 5) + "px");
|
||||
})
|
||||
.on("mouseout", _ => {
|
||||
const tooltip = d3.select('.tooltip');
|
||||
tooltip.style("opacity", 0);
|
||||
})
|
||||
.merge(selection)
|
||||
.attr('r', 3)
|
||||
;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
return my;
|
||||
}
|
||||
|
||||
function updateData(data, upper) {
|
||||
domain = d3.extent(data, d => d.date);
|
||||
chart.domain = {
|
||||
'start': domain[0],
|
||||
'end': domain[1]
|
||||
};
|
||||
chart2.domain = {
|
||||
'start': domain[0],
|
||||
'end': domain[1]
|
||||
};
|
||||
|
||||
const times = _(data).map(e => moment(e.date));
|
||||
|
||||
if (upper) {
|
||||
prevUpper = data;
|
||||
const fd = filterData(prevLower, chart.domain.start, chart.domain.end);
|
||||
selection.datum(data).call(chart);
|
||||
selection.datum(fd).call(chart2);
|
||||
slider.domain([times.min(), times.max()]).data(times.value(), true);
|
||||
} else {
|
||||
prevLower = data;
|
||||
const fd = filterData(prevUpper, chart.domain.start, chart.domain.end);
|
||||
selection.datum(data).call(chart2);
|
||||
selection.datum(fd).call(chart);
|
||||
slider.domain([times.min(), times.max()]).data(times.value(), true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
d3.select('#haldis-user-button').on('click', () => {
|
||||
updateData(userdata, true);
|
||||
setActiveButton('#haldis-user-button', true);
|
||||
});
|
||||
d3.select('#haldis-price-button').on('click', () => {
|
||||
updateData(pricedata, true);
|
||||
setActiveButton('#haldis-price-button', true);
|
||||
});
|
||||
d3.select('#tap-order-button').on('click', () => {
|
||||
updateData(tapordersdata, false);
|
||||
setActiveButton('#tap-order-button', false);
|
||||
});
|
||||
d3.select('#tap-user-button').on('click', () => {
|
||||
updateData(tapusersdata, false);
|
||||
setActiveButton('#tap-user-button', false);
|
||||
});
|
||||
})();
|
244
content/assets/scripts/datavis/scriptlo.js
Normal file
244
content/assets/scripts/datavis/scriptlo.js
Normal file
|
@ -0,0 +1,244 @@
|
|||
var margin = {top: 20, right: 10, bottom: 30, left: 10};
|
||||
var width = 700 - margin.left - margin.right,
|
||||
height = 500 - margin.top - margin.bottom;
|
||||
|
||||
const mat = [];
|
||||
|
||||
const interpol = d3.interpolateViridis;
|
||||
const colorScaleRel = d3.scaleSequential(interpol).domain([0, 100]);
|
||||
const colorScaleAbs = d3.scaleSequential(interpol).domain([0, 306]); //oeps harcoded
|
||||
|
||||
const svg = d3.select('#gridlo')
|
||||
.append('svg')
|
||||
.attr("width", width + margin.left + margin.right)
|
||||
.attr("height", height + margin.top + margin.bottom)
|
||||
.append("g")
|
||||
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
|
||||
|
||||
const products = [];
|
||||
const locations = [];
|
||||
d3.csv("/csvdata/elodata.csv", d => {
|
||||
d.product_id = +d.product_id;
|
||||
d.location_id = +d.location_id;
|
||||
|
||||
if (!mat[d.product_id]) {
|
||||
products[d.product_id] = d.name_x;
|
||||
mat[d.product_id] = Array(...Array(110)).map(Number.prototype.valueOf, 0);
|
||||
}
|
||||
// at this point tha array is made d.location_id
|
||||
if (!mat[d.product_id][d.location_id]) {
|
||||
locations[d.location_id] = d.name_y;
|
||||
mat[d.product_id][d.location_id] = 1;
|
||||
} else {
|
||||
mat[d.product_id][d.location_id] += 1;
|
||||
}
|
||||
return d;
|
||||
}).then((data) => {
|
||||
const mat2 = [];
|
||||
let prod2 = [];
|
||||
mat.forEach((a, i) => {
|
||||
prod2.push(products[i]);
|
||||
mat2.push(a);
|
||||
});
|
||||
let mat3 = [];
|
||||
let loc2 = [];
|
||||
for (var i = 0; i < prod2.length; i++) {
|
||||
mat3[i] = [];
|
||||
}
|
||||
var i = 0;
|
||||
let mat_scaled = [];
|
||||
locations.forEach((l, k) => {
|
||||
loc2.push(l);
|
||||
for (let j = 0; j < prod2.length; j++) {
|
||||
mat3[j][i] = mat2[j][k];
|
||||
}
|
||||
i++;
|
||||
});
|
||||
|
||||
//rectangles
|
||||
let comb = _.sortBy(_.zip(prod2, mat3), e => -_.sum(e[1]));
|
||||
prod2 = _.unzip(comb)[0];
|
||||
mat3 = _.unzip(comb)[1];
|
||||
|
||||
comb = _.sortBy(_.zip(loc2, _.unzip(mat3)), e => -_.sum(e[1]));
|
||||
loc2 = _.unzip(comb)[0];
|
||||
mat3 = _.unzip(_.unzip(comb)[1]);
|
||||
|
||||
max = 0;
|
||||
sums = []
|
||||
for (var i = 0; i < mat3[0].length; i++) {
|
||||
sums[i] = 0;
|
||||
}
|
||||
mat3.forEach(d => {
|
||||
d.forEach((e, i) => {
|
||||
sums[i] += e;
|
||||
});
|
||||
});
|
||||
mat_scaled = mat3.map((r, i) => r.map((e, j) => 100 * e / sums[j]));
|
||||
relative = false; // 0 is false -> scaled
|
||||
data = [mat_scaled, mat3];
|
||||
scales = [colorScaleRel, colorScaleAbs];
|
||||
const legends = [[0, 20, 40, 60, 80, 100], [0, 60, 120, 180, 240, 300]];
|
||||
let d = data[+relative];
|
||||
const top = svg.append("g").attr("id", "top");
|
||||
|
||||
const boxScale = d3.scaleBand()
|
||||
.domain(d3.range(Math.max(d.length, d[0].length)))
|
||||
.range([0, Math.min(height, width)])
|
||||
.round(true)
|
||||
;
|
||||
|
||||
d3.select("#switch").on("click", updateData);
|
||||
|
||||
function updateData() {
|
||||
relative = !relative;
|
||||
d = data[+relative];
|
||||
scale = scales[+relative]
|
||||
|
||||
// ENTER -- Rows
|
||||
top.selectAll('g').data(d, (_, i) => i).enter().append('g')
|
||||
.attr('opacity', 0.95)
|
||||
.attr("transform", (_, i) => `translate(0, ${(boxScale(i))})`)
|
||||
.attr('data-row-idx', (_, i) => i)
|
||||
// ENTER -- Boxes
|
||||
.selectAll('rect').data(d => d, (_, i) => i).enter().append("rect")
|
||||
.attr('opacity', 0.95)
|
||||
.attr("class", (_, i) => `id${i}`)
|
||||
.attr('width', boxScale.bandwidth() * 1.01)
|
||||
.attr('height', boxScale.bandwidth() * 1.01)
|
||||
.attr("x", (_, i) => boxScale(i) + 150)
|
||||
.on("mouseover", mouse_over_rect)
|
||||
.on("mouseout", mouse_out_rect);
|
||||
|
||||
const boxes = top.selectAll('g').data(d, (_, i) => i).selectAll('rect').data(d => d, (_, i) => i);
|
||||
|
||||
boxes
|
||||
.transition()
|
||||
.attr('fill', d => scale(d));
|
||||
|
||||
svg.selectAll(".legend text")
|
||||
.transition().duration(500)
|
||||
.text((_, i) => {
|
||||
const d = legends[+relative][i];
|
||||
return relative ? d : d + '%';
|
||||
});
|
||||
|
||||
svg.selectAll(".legend rect")
|
||||
.transition().duration(500)
|
||||
.style("fill", (d, i) => scale(legends[+relative][i]));
|
||||
|
||||
};
|
||||
updateData();
|
||||
|
||||
function mouse_over_rect(d, i, j) { // Add interactivity
|
||||
const row = d3.select(this.parentNode);
|
||||
const block = d3.select(this);
|
||||
const tooltip = d3.select('.tooltip');
|
||||
|
||||
//row
|
||||
row.attr("opacity", 1);
|
||||
d3.selectAll(`.id${i}`).attr("opacity", 1);
|
||||
|
||||
tooltip
|
||||
.style("opacity", .9)
|
||||
.html(relative ? d : `${d.toFixed(2)}%`);
|
||||
|
||||
// We calculate the bounding rects after setting the html
|
||||
let rect = block.node().getBoundingClientRect();
|
||||
let t_rect = tooltip.node().getBoundingClientRect();
|
||||
|
||||
tooltip
|
||||
.style("left", (rect.left + rect.width / 2 - t_rect.width / 2) + "px")
|
||||
.style("top", (rect.top - t_rect.height - 5) + "px");
|
||||
|
||||
//Labels
|
||||
d3.select(`#rest${i}`)
|
||||
.attr("fill", scale(d))
|
||||
.attr("font-weight", "bold")
|
||||
;
|
||||
|
||||
d3.select(`#prod${row.attr('data-row-idx')}`)
|
||||
.attr("fill", scale(d))
|
||||
.attr("font-weight", "bold")
|
||||
;
|
||||
}
|
||||
function mouse_out_rect(d, i, j) {
|
||||
const row = d3.select(this.parentNode);
|
||||
const block = d3.select(this);
|
||||
const tooltip = d3.select('.tooltip');
|
||||
|
||||
//rm border and text
|
||||
row.attr("stroke", "none");
|
||||
row.attr("opacity", 0.95);
|
||||
d3.selectAll(`.id${i}`).attr("opacity", 0.95);
|
||||
|
||||
tooltip.style('opacity', 0);
|
||||
|
||||
d3.select(`#rest${i}`)
|
||||
.attr("fill", "black")
|
||||
.attr("font-weight", "")
|
||||
;
|
||||
d3.select(`#prod${row.attr('data-row-idx')}`)
|
||||
.attr("fill", "black")
|
||||
.attr("font-weight", "")
|
||||
;
|
||||
}
|
||||
|
||||
// product labels
|
||||
let prodLabels = svg.append("g")
|
||||
.selectAll("g")
|
||||
.data(prod2)
|
||||
.enter()
|
||||
.append("text")
|
||||
.text(d => d)
|
||||
.attr("x", 30)
|
||||
.attr("y", (_, i) => boxScale(i) + 15)
|
||||
.attr("id", (_, i) => `prod${i}`)
|
||||
.attr("font-family", "sans-serif")
|
||||
.attr("font-size", "11px")
|
||||
.attr("fill", "black");
|
||||
|
||||
// location labels
|
||||
let locLabels = svg.append("g")
|
||||
.selectAll("g")
|
||||
.data(loc2)
|
||||
.enter()
|
||||
.append("text")
|
||||
.text(d => d)
|
||||
.attr("text-anchor", "middle")
|
||||
.attr("transform", (_, i) => `translate(${(boxScale(i) + 150)},${boxScale(prodLabels.size() - 1) + 70}) rotate(-65)`)
|
||||
.attr("font-family", "sans-serif")
|
||||
.attr("id", (_, i) => `rest${i}`)
|
||||
.attr("font-size", "11px")
|
||||
.attr("fill", "black");
|
||||
|
||||
//Legend
|
||||
let legend = svg.append('g')
|
||||
.classed('legendWrapper', 'true')
|
||||
.attr("transform", `translate(${boxScale(locLabels.size() - 1) + boxScale.bandwidth() + 160}, 0)`);
|
||||
;
|
||||
|
||||
let legendAbs = legend.selectAll(".legend")
|
||||
.data(legends[+relative])
|
||||
.enter().append("g")
|
||||
.attr("class", "legend")
|
||||
.attr("transform", (d, i) => `translate(0 ,${boxScale(i) + 20})`);
|
||||
|
||||
legendAbs.append("rect")
|
||||
.attr("width", 20)
|
||||
.attr("height", 20)
|
||||
.style("fill", d => colorScaleAbs(d));
|
||||
|
||||
legendAbs.append("text")
|
||||
.attr("x", 26)
|
||||
.attr("y", 10)
|
||||
.attr("dy", ".35em")
|
||||
.text(d => relative ? d : `${d.toFixed(2)}%`);
|
||||
|
||||
legend.append("text")
|
||||
.attr("class", "label")
|
||||
.attr("x", 0)
|
||||
.attr("y", 10)
|
||||
.attr("dy", ".35em")
|
||||
.text("Count");
|
||||
});
|
189
content/assets/scripts/datavis/timeSlider.js
Normal file
189
content/assets/scripts/datavis/timeSlider.js
Normal file
|
@ -0,0 +1,189 @@
|
|||
(function() {
|
||||
function timeSlider() {
|
||||
var data;
|
||||
var sliderValue;
|
||||
var updateSlider;
|
||||
var updateData;
|
||||
|
||||
let width = 50;
|
||||
let midPoint = width / 2;
|
||||
let domain = [moment().subtract(1, 'year').toDate(), moment().toDate()]
|
||||
|
||||
const dispatch = d3.dispatch('slide');
|
||||
var margin = { top: 2, right: 40, bottom: 20, left: 40 };
|
||||
|
||||
function my(svg) {
|
||||
let xScale;
|
||||
|
||||
let tWidth = $(svg.node()).width();
|
||||
let tHeight = $(svg.node()).height();
|
||||
|
||||
tWidth -= margin.left + margin.right;
|
||||
tHeight -= margin.top + margin.bottom;
|
||||
|
||||
const g = svg.append('g')
|
||||
.attr("transform", `translate(${margin.left}, ${margin.top})`);
|
||||
|
||||
const gAxis = g.append('g');
|
||||
|
||||
// Create the svg:defs element and the main gradient definition.
|
||||
var svgDefs = g.append('defs');
|
||||
var mainGradient = svgDefs.append('linearGradient')
|
||||
.attr('id', 'mainGradient');
|
||||
// Create the stops of the main gradient. Each stop will be assigned
|
||||
// a class to style the stop using CSS.
|
||||
mainGradient.append('stop')
|
||||
.attr('stop-opacity', '0')
|
||||
.attr('offset', '0%');
|
||||
mainGradient.append('stop')
|
||||
.attr('stop-color', 'blue')
|
||||
.attr('stop-opacity', '1')
|
||||
.attr('offset', '45%');
|
||||
mainGradient.append('stop')
|
||||
.attr('stop-color', 'blue')
|
||||
.attr('stop-opacity', '1')
|
||||
.attr('offset', '55%');
|
||||
mainGradient.append('stop')
|
||||
.attr('stop-opacity', '0')
|
||||
.attr('offset', '100%');
|
||||
|
||||
updateData = function (data, updateDomain) {
|
||||
if (updateDomain) {
|
||||
domain = d3.extent(data);
|
||||
}
|
||||
|
||||
xScale = d3.scaleTime()
|
||||
.domain(domain)
|
||||
.range([0, tWidth])
|
||||
.nice()
|
||||
;
|
||||
|
||||
const xAxis = d3.axisBottom(xScale)
|
||||
.tickFormat(d3.timeFormat("%b '%y"))
|
||||
;
|
||||
gAxis
|
||||
.attr('transform', 'translate(0,' + 50 + ')')
|
||||
.classed('x axis', true)
|
||||
.call(xAxis)
|
||||
.selectAll("text")
|
||||
;
|
||||
|
||||
const sliderHeatmap = g.selectAll('rect.heatTick').data(data, d => d);
|
||||
|
||||
sliderHeatmap.exit().transition().attr('height', 0).remove();
|
||||
|
||||
sliderHeatmap.enter().append('rect')
|
||||
.attr('x', e => xScale(e))
|
||||
.attr('class', 'heatTick')
|
||||
.attr('fill', 'blue')
|
||||
.attr('width', 3)
|
||||
.attr('height', 0)
|
||||
.attr('fill-opacity', 0.2)
|
||||
.transition()
|
||||
.attr('height', 50)
|
||||
;
|
||||
|
||||
}
|
||||
updateData(data);
|
||||
|
||||
const outer = g.append('rect')
|
||||
.attr('stroke', 'black')
|
||||
.attr('fill-opacity', 0)
|
||||
.attr('stroke-width', 1)
|
||||
.attr('width', tWidth)
|
||||
.attr('height', 50);
|
||||
|
||||
const t1 = g.append('text')
|
||||
.attr('font-size', '.6em')
|
||||
.attr('y', 50);
|
||||
const t2 = g.append('text')
|
||||
.attr('font-size', '.6em')
|
||||
.attr('y', 50);
|
||||
|
||||
const inner = g.append('rect')
|
||||
.attr('stroke', 'black')
|
||||
.attr('fill-opacity', 0)
|
||||
.attr('stroke-width', 2)
|
||||
.attr('width', 50)
|
||||
.attr('height', width)
|
||||
.call(d3.drag()
|
||||
.on("drag", function (d) {
|
||||
const dx = d3.event.dx;
|
||||
const dy = d3.event.dy;
|
||||
|
||||
let nx = midPoint + dx - width / 2;
|
||||
|
||||
width -= 1.5 * dy;
|
||||
width = Math.max(10, width);
|
||||
|
||||
nx += 1.5 * dy / 2;
|
||||
nx = Math.min(tWidth - width, nx);
|
||||
nx = Math.max(0, nx);
|
||||
|
||||
midPoint = nx + width / 2;
|
||||
|
||||
width = Math.min(width, tWidth);
|
||||
|
||||
const beginTime = xScale.invert(nx);
|
||||
const endTime = xScale.invert(nx + width);
|
||||
|
||||
sliderValue = [beginTime, endTime];
|
||||
|
||||
updateSlider(sliderValue);
|
||||
|
||||
dispatch.call('slide', this, sliderValue);
|
||||
}));
|
||||
|
||||
updateSlider = function (value) {
|
||||
sliderValue = value
|
||||
|
||||
nx = xScale(sliderValue[0]);
|
||||
width = xScale(sliderValue[1]) - xScale(sliderValue[0]);
|
||||
midPoint = nx + width / 2;
|
||||
|
||||
inner.attr('x', nx)
|
||||
.attr('width', width);
|
||||
|
||||
const fmtStr = 'DD/MM/YY'
|
||||
|
||||
t1.text(moment(sliderValue[0]).format(fmtStr))
|
||||
.attr('x', nx)
|
||||
.attr('transform', `rotate(45 ${nx},50) translate(20,20)`);
|
||||
t2.text(moment(sliderValue[1]).format(fmtStr))
|
||||
.attr('x', nx + width)
|
||||
.attr('transform', `rotate(45 ${nx + width},50) translate(20,20)`);
|
||||
}
|
||||
updateSlider(xScale.domain());
|
||||
}
|
||||
|
||||
my.on = function () {
|
||||
let value = dispatch.on.apply(dispatch, arguments);
|
||||
return value === dispatch ? my : value;
|
||||
}
|
||||
|
||||
my.domain = function (value) {
|
||||
if (!arguments.length) return domain;
|
||||
domain = value;
|
||||
if (typeof updateData === 'function') updateData(data);
|
||||
return my;
|
||||
}
|
||||
|
||||
my.slider = function (value) {
|
||||
if (!arguments.length) return sliderValue;
|
||||
if (typeof updateSlider === 'function') updateSlider(value);
|
||||
return my;
|
||||
}
|
||||
|
||||
my.data = function (dt) {
|
||||
if (!arguments.length) return intensity;
|
||||
data = dt
|
||||
if (typeof updateData === 'function') updateData(data);
|
||||
return my;
|
||||
}
|
||||
|
||||
return my;
|
||||
}
|
||||
|
||||
window['timeSlider'] = timeSlider;
|
||||
|
||||
})();
|
44
content/assets/stylesheets/datavis/blog.css
Normal file
44
content/assets/stylesheets/datavis/blog.css
Normal file
|
@ -0,0 +1,44 @@
|
|||
div.tooltip {
|
||||
position: fixed;
|
||||
text-align: center;
|
||||
min-width: 30px;
|
||||
padding: 4px;
|
||||
font: 12px sans-serif;
|
||||
background: black;
|
||||
color: white;
|
||||
border: 0px;
|
||||
border-radius: 8px;
|
||||
pointer-events: none;
|
||||
z-index: 10;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
div.tooltip::after {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
/* At the bottom of the tooltip */
|
||||
left: 50%;
|
||||
margin-left: -5px;
|
||||
border-width: 5px;
|
||||
border-style: solid;
|
||||
border-color: black transparent transparent transparent;
|
||||
}
|
||||
|
||||
#instance path.domain {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.full-width {
|
||||
margin-left: -50vw;
|
||||
margin-right: -50vw;
|
||||
width: 100vw;
|
||||
max-width: 100vw;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
right: 50%;
|
||||
}
|
||||
text.begin,
|
||||
text.end {
|
||||
font-size: 12pt;
|
||||
}
|
16
content/assets/stylesheets/datavis/style.css
Normal file
16
content/assets/stylesheets/datavis/style.css
Normal file
|
@ -0,0 +1,16 @@
|
|||
.viscontainer {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.button-container {
|
||||
padding-top: 50px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.button-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
152
content/blog/17-18/eet-en-drankgewoonten-in-zeus.md
Normal file
152
content/blog/17-18/eet-en-drankgewoonten-in-zeus.md
Normal file
|
@ -0,0 +1,152 @@
|
|||
---
|
||||
author: Eloïse, Isaura en Lorin
|
||||
title: "De eet- en drankgewoonten in Zeus gevisualiseerd"
|
||||
created_at: 17-05-2018
|
||||
description: Een datavisualisatie project
|
||||
toc:
|
||||
depth: 2
|
||||
---
|
||||
|
||||
<div class='tooltip'></div>
|
||||
|
||||
# Introductie
|
||||
|
||||
Deze blogpost en de bijhorende visualisaties zijn gemaakt in functie van het vak Datavisualisatie, gegeven door Bart Mesuere.
|
||||
In dit vak kregen we de opdracht om een dataset te kiezen en die te visualizeren. Het was natuurlijk een
|
||||
no-brainer om de data die we al een aantal jaar aan het vergaren zijn van [Haldis](https://zeus.ugent.be/haldis) en [Tap](https://zeus.ugent.be/tap) te gebruiken.
|
||||
|
||||
Als je geïnteresseerd genoeg bent in het lezen van deze blogpost, ben je hoogstwaarschijnlijk geïnformeerd genoeg om te weten
|
||||
wat Haldis, Tap en Tab zijn, maar voor de ongeïnitieerden volgt een korte uitleg.
|
||||
|
||||
## Haldis
|
||||
|
||||
Sinds 2 april 2015 maakt Zeus gebruik van Haldis, een applicatie om het bestellen van eten in groep te vergemakkelijken.
|
||||
Dit laat onder andere toe dat mensen die nog op weg zijn naar te kelder toch eten kunnen bestellen. Bekijk
|
||||
het project op <https://zeus.ugent.be/haldis>. We hebben over die aantal jaar een vierhonderdtal bestellingen geplaatst. Handmatig alle bestellingen opnemen heeft geen plaats meer in Zeus!
|
||||
|
||||
## Tap
|
||||
|
||||
Tap is onze digitale vervanging van het oude papier-en-streepjes systeem dat we al jaar en dag gebruikten om drankjes te verkopen in de kelder. Elke drankje of
|
||||
versnapering was een aantal streepjes waard, wat ons weinig fine-grained controle gaf over de productprijzen. Met Tap losten we dit probleem op met een hypermodern alternatief --- een tablet (genaamd koelkast) op de koelkast.
|
||||
|
||||
# Visualisaties
|
||||
|
||||
## Haldis
|
||||
|
||||
### Afstanden
|
||||
|
||||
Op onze eerste visualisatie kunnen we via een timeline zien waar we het vaakst naartoe gaan met Zeus, en welke afstanden
|
||||
we bereid zijn om hiervoor te overbruggen. Om de timeslider te gebruiken kan je de timeslider naar beneden of naar boven
|
||||
slepen om in of uit te zoomen.
|
||||
|
||||
We zien natuurlijk dat we vaak rond de Zeus kelder onze restaurants kiezen. Als je echter de timeslider rond het academiejaar '16-'17 zet, zie je dat we nogal avontuurlijk waren! We gingen buiten onze comfortzone, en zochten restaurants verder en verder op! We denken dat dit voornamelijk komt doordat er meer Zeusleden waren die met de auto wat verder eten konden halen (vooral Benji ❤️).
|
||||
|
||||
<div id="leafletmap" style="height:500px; width:100%"></div>
|
||||
<svg id="slider1" style="width: 100%"></svg>
|
||||
<div id="dayButtons" class="has-content-centered">
|
||||
<a class="button is-small is-info is-outlined" data-day-idx='1'>Maandag</a>
|
||||
<a class="button is-small is-info is-outlined" data-day-idx='2'>Dinsdag</a>
|
||||
<a class="button is-small is-info is-outlined" data-day-idx='3'>Woensdag</a>
|
||||
<a class="button is-small is-info is-outlined" data-day-idx='4'>Donderdag</a>
|
||||
<a class="button is-small is-info is-outlined" data-day-idx='5'>Vrijdag</a>
|
||||
<a class="button is-small is-info is-outlined" data-day-idx='6'>Zaterdag</a>
|
||||
<a class="button is-small is-info is-outlined" data-day-idx='0'>Zondag</a>
|
||||
<a class="button is-small is-info is-outlined" data-day-idx='-1'>Reset Filters</a>
|
||||
</div>
|
||||
<button id="playButton" class="button is-primary">Play</button>
|
||||
|
||||
### Punchcard
|
||||
|
||||
Op onze tweede visualisatie krijgen we te zien wat de populairste uren zijn voor alle restaurants, zo zien we dat we onder andere eens 's avonds laat een frietje durven stekken bij 't Blauw Kotje! Bij de Fritoloog doen we dit minder vaak. Dit zal voornamelijk te wijten zijn aan het feit dat we nu minder laat in de kelder zitten. Door de timeslider op een vorig academiejaar te zetten kunnen we dit zien.
|
||||
|
||||
<div class="full-width has-content-centered">
|
||||
<svg id="punchcard" width="1300" height="600"></svg>
|
||||
</div>
|
||||
<svg id="slider2" style="width: 100%"></svg>
|
||||
<button id="playButton2" class="button is-primary">Play</button>
|
||||
|
||||
### Instance
|
||||
|
||||
In de instance chart van Haldis zien we elke bestelling die
|
||||
geplaatst werd, gesorteerd op eerste tijdstip van bestelling. Merk op hoe de Fritoloog plots onze favoriete frituur is geworden! Ook zien we dat pizza iets minder populair is geworden, en dat Ocean Garden onze favoriet blijft. Onze liefde voor Chinees is dus niet voor maar "tien minuutjes!", maar voor eeuwig.
|
||||
|
||||
<div class="full-width has-content-centered">
|
||||
<svg id="instance" width="1200" height="600"></svg>
|
||||
</div>
|
||||
|
||||
### Rankings
|
||||
|
||||
We zien het verloop van de rangschikking van de verschillende restaurants. Interessant om te zien is onder andere de ongeloofelijke stijging van de Fritoloog als onze favoriete frituur.
|
||||
|
||||
<div class="full-width has-content-centered" style="overflow-x: auto">
|
||||
<svg id="rankings" width="90%" height="700"></svg>
|
||||
</div>
|
||||
|
||||
## Haldis & Tap
|
||||
|
||||
### Co-occurence van Tap en Haldis
|
||||
|
||||
Op de volgende chart zien we welke producten er besteld worden op Tap bij bepaalde restaurants op Haldis. Zo zien we onder andere dat er 5% vaker Club Maté besteld wordt bij het Blauw Kotje (frieten) dan bij onze favoriet Ocean Garden (chinees)!
|
||||
|
||||
<div id="gridlo" class="full-width has-content-centered"></div>
|
||||
<button name="updateButton" id="switch" value="Update" class="button is-primary">Switch</button>
|
||||
|
||||
### Co-occurence van Haldis, Tap en Zeus events
|
||||
|
||||
Hier kunnen we verschillende statistieken van Haldis en Tap met elkaar vergelijken, en tegelijkertijd een eventueel verband met de Zeus-events bekijken.
|
||||
|
||||
<div class="full-width has-content-centered">
|
||||
<div class="viscontainer">
|
||||
<div class="button-container">
|
||||
<div style="height:400px;">
|
||||
<p align="center">
|
||||
<strong> Haldis </strong>
|
||||
</p>
|
||||
<a class="button is-info is-outlined button-item is-fullwidth" id="haldis-user-button">
|
||||
number of users
|
||||
</a>
|
||||
<a class="button is-info is-outlined button-item is-fullwidth" id="haldis-price-button">
|
||||
total expenses
|
||||
</a>
|
||||
</div>
|
||||
<div style="height:400px;">
|
||||
<p align="center">
|
||||
<strong> Tap </strong>
|
||||
</p>
|
||||
<a class="button is-info is-outlined button-item is-fullwidth" id="tap-user-button">
|
||||
number of orders
|
||||
</a>
|
||||
<a class="button is-info is-outlined button-item is-fullwidth" id="tap-price-button">
|
||||
number of users
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="visualisation" style="width: 1000px">
|
||||
<div class='tooltip'></div>
|
||||
<svg id="barchart" style="height:800px; width: 100%"></svg>
|
||||
<svg id="slider" style="height: 200px; width: 100%"></svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% content_for :scripts do %>
|
||||
<!-- CDNS -->
|
||||
<script src="https://d3js.org/d3.v5.min.js"></script>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.css" integrity="sha256-iYUgmrapfDGvBrePJPrMWQZDcObdAcStKBpjP3Az+3s=" crossorigin="anonymous" />
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.3.1/leaflet.js" integrity="sha256-CNm+7c26DTTCGRQkM9vp7aP85kHFMqs9MhPEuytF+fQ=" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/leaflet.js" integrity="sha256-aReBHzIjoMzKrp0H4XnxXIm0mwuNG/F+00pKDiFuLxI=" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js" integrity="sha256-VKITM616rVzV+MI3kZMNUDoY5uTsuSl1ZvEeZhNoJVk=" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js" integrity="sha256-L3S3EDEk31HcLA5C6T2ovHvOcD80+fgqaCDt2BAi92o=" crossorigin="anonymous"></script>
|
||||
|
||||
<%= asset :js, 'datavis/bubbleMap' %>
|
||||
<%= asset :js, 'datavis/timeSlider' %>
|
||||
<%= asset :js, 'datavis/punchcard' %>
|
||||
<%= asset :js, 'datavis/rankingChart' %>
|
||||
<%= asset :js, 'datavis/instanceChart' %>
|
||||
<%= asset :js, 'datavis/blog' %>
|
||||
<%= asset :js, 'datavis/script2' %>
|
||||
<%= asset :js, 'datavis/scriptlo' %>
|
||||
<% end %>
|
||||
|
||||
<%= asset :css, 'datavis/style' %>
|
||||
<%= asset :css, 'datavis/blog' %>
|
2648
content/csvdata/elodata.csv
Normal file
2648
content/csvdata/elodata.csv
Normal file
File diff suppressed because it is too large
Load diff
126
content/csvdata/eventdata.csv
Normal file
126
content/csvdata/eventdata.csv
Normal file
|
@ -0,0 +1,126 @@
|
|||
title,date
|
||||
Zeus eet ribbetjes!,2007-03-22T19:00:00+00:00
|
||||
Ledenvergadering,2007-05-09T19:00:00+00:00
|
||||
Ledenvergadering 31 Oktober 2007,2007-10-31T19:00:00+00:00
|
||||
Kroegentocht!,2007-11-07T21:00:00+00:00
|
||||
Webapplication Security Les,2007-11-14T18:00:00+00:00
|
||||
Zeus Refresh!,2008-02-02T00:00:00+00:00
|
||||
Introductie tot LaTeX,2008-02-11T17:30:00+00:00
|
||||
Lezing over Grid Computing,2008-02-20T19:00:00+00:00
|
||||
Zeus goes FOSDEM,2008-02-23T00:00:00+00:00
|
||||
Zeus Goes FOSDEM 2008,2008-02-23T08:45:00+00:00
|
||||
Software Security Les,2008-03-19T20:00:00+00:00
|
||||
Lezing: Trends in Breedbandcommunicatie en Gedistribueerde Software,2008-04-16T18:00:00+00:00
|
||||
Ubuntu Introductieles,2008-11-17T20:00:00+00:00
|
||||
Latex Introductieles,2008-11-20T19:30:00+00:00
|
||||
Star Trek,2009-06-25T00:00:00+00:00
|
||||
"Zeus-leden, verenigt u!",2009-09-30T18:00:00+00:00
|
||||
LaTeX-les,2009-10-27T19:00:00+00:00
|
||||
TechEd 2009,2009-11-18T20:00:00+00:00
|
||||
Technology Startups: Pitfalls for technical entrepreneurs.,2010-02-10T20:00:00+00:00
|
||||
TronBot coding marathon,2010-02-24T14:00:00+00:00
|
||||
Infosessie Vlaamse Programmeerwedstrijd,2010-03-10T20:00:00+00:00
|
||||
Plugg 2010,2010-03-11T10:00:00+00:00
|
||||
Vlaamse Programmeerwedstrijd,2010-03-17T14:00:00+00:00
|
||||
Zeus ledenvergadering,2010-10-06T19:30:00+00:00
|
||||
Open-source gaming night,2010-10-13T19:30:00+00:00
|
||||
LaTeX les,2010-10-19T19:00:00+00:00
|
||||
Django-les,2010-10-21T19:00:00+00:00
|
||||
Android-development introductie,2010-10-27T19:30:00+00:00
|
||||
Haskell Introductie,2010-11-05T15:00:00+00:00
|
||||
Ubuntu les,2010-11-09T19:00:00+00:00
|
||||
Durf Ondernemen kickoff,2010-11-22T19:00:00+00:00
|
||||
Beheer je source code met Git!,2010-12-02T19:00:00+00:00
|
||||
Fosdem 2011,2011-02-05T10:00:00+00:00
|
||||
Smalltalk/StratifiedJS,2011-04-27T19:00:00+00:00
|
||||
Ledenvergadering & ribbetjes,2011-05-17T17:30:00+00:00
|
||||
Bezoek datacenter S10 & Ledenvergadering,2011-10-03T17:45:00+00:00
|
||||
"No more lies, just benchmarks",2011-10-20T19:00:00+00:00
|
||||
Windows Phone 7.5: Build an application in 4 hours,2011-11-04T09:00:00+00:00
|
||||
Ubuntu-les,2011-11-22T19:00:00+00:00
|
||||
Fosdem 2012,2012-02-04T10:00:00+00:00
|
||||
Agile Software Development in de praktijk,2012-03-15T19:00:00+00:00
|
||||
Durf Ondernemen Speeddating,2012-03-28T19:00:00+00:00
|
||||
Vlaamse Programmeerwedstrijd 2012,2012-04-18T11:00:00+00:00
|
||||
Afsluitende ledenvergadering & ribbetjes,2012-05-15T17:30:00+00:00
|
||||
Let's get physical!,2012-10-09T17:30:00+00:00
|
||||
LaTeX-les 2012,2012-11-05T19:00:00+00:00
|
||||
"Gamers, assemble!",2012-11-09T16:00:00+00:00
|
||||
Rondleiding: Datacenter S10 & Supercomputer,2012-11-22T18:00:00+00:00
|
||||
FOSDEM 2013,2013-02-02T10:00:00+00:00
|
||||
Collaborate with Git,2013-02-21T19:00:00+00:00
|
||||
Google Summer of Code,2013-04-15T19:00:00+00:00
|
||||
Vlaamse Programmeerwedstrijd & oefenwedstrijd,2013-04-17T12:30:00+00:00
|
||||
Ledenvergadering & Ribbetjesavond,2013-05-14T17:30:00+00:00
|
||||
Kom en ontdek Zeus!,2013-10-01T17:30:00+00:00
|
||||
Introduction to Python,2013-10-17T19:00:00+00:00
|
||||
"Geeks, attack!",2013-11-08T16:00:00+00:00
|
||||
LaTeX-les 2013,2013-11-19T19:00:00+00:00
|
||||
FOSDEM 2014,2014-02-01T10:00:00+00:00
|
||||
Kickoff Robotcompetitie,2014-02-18T19:00:00+00:00
|
||||
Collaborate with Git(Hub),2014-02-25T19:00:00+00:00
|
||||
Google Summer of Code 2014,2014-03-05T19:00:00+00:00
|
||||
Film-avond: 'Her',2014-03-19T21:30:00+00:00
|
||||
Rondleiding datacenter en supercomputer,2014-10-02T17:30:00+00:00
|
||||
Spelletjesavond,2014-10-09T17:30:00+00:00
|
||||
LaTeX-les 2014,2014-10-15T19:00:00+00:00
|
||||
JavaScript op het moderne web en data visualisaties met D3.js,2014-10-28T19:30:00+00:00
|
||||
"Geeks, Attack! 2014",2014-11-07T16:00:00+00:00
|
||||
Introductie tot Haskell,2014-11-13T19:00:00+00:00
|
||||
Introductie tot Ruby,2014-11-25T19:00:00+00:00
|
||||
Identiteit en Toegangscontrole in de Cloud,2014-12-04T19:00:00+00:00
|
||||
Zeus goes FOSDEM 2015 - carpool mee,2015-01-31T09:00:00+00:00
|
||||
Lessenreeks Haskell - een functionele programmeertaal,2015-02-18T18:30:00+00:00
|
||||
Vlaamse Programmeerwedstrijd,2015-02-25T11:00:00+00:00
|
||||
"Git, de ""stomme"" content tracker",2015-02-26T19:00:00+00:00
|
||||
ULYSSIS Open Source Jobbeurs,2015-03-25T10:00:00+00:00
|
||||
Python voor Gevorderden,2015-03-26T18:30:00+00:00
|
||||
Zeus Lightning Talks,2015-04-21T18:30:00+00:00
|
||||
Tiles & Terminals,2015-05-05T17:30:00+00:00
|
||||
"Ledenvergadering, verkiezingen en ribbetjesavond",2015-05-05T17:30:00+00:00
|
||||
Zeus Codesprint!,2015-09-07T08:00:00+00:00
|
||||
Linux Install Party,2015-09-30T17:30:00+00:00
|
||||
"Geeks, Attack! IV",2015-10-30T16:00:00+00:00
|
||||
Scripting in Sed,2015-11-03T19:00:00+00:00
|
||||
LaTeX Les 2015,2015-11-09T19:00:00+00:00
|
||||
GitHub talk: Cooperation in GitHub,2015-11-10T13:00:00+00:00
|
||||
Richard Stallman: Copyright vs. Community,2015-11-17T19:30:00+00:00
|
||||
FOSDEM 2016,2016-01-30T10:00:00+00:00
|
||||
Hub voor Google Hashcode 2016,2016-02-11T18:30:00+00:00
|
||||
3D-animatie met Z-flux,2016-02-23T13:00:00+00:00
|
||||
AWK-les,2016-02-23T18:00:00+00:00
|
||||
Vlaamse Programmeerwedstrijd 2016,2016-03-02T00:00:00+00:00
|
||||
Xtext Workshop,2016-04-26T18:00:00+00:00
|
||||
Verkiezingen & Ribbetjesavond,2016-05-03T18:00:00+00:00
|
||||
Linux Install Party,2016-10-05T17:00:00+00:00
|
||||
Bezoek datacenter,2016-10-10T17:45:00+00:00
|
||||
Spelletjesavond I,2016-10-19T18:00:00+00:00
|
||||
Latex les,2016-10-25T19:00:00+00:00
|
||||
RUST les,2016-10-26T19:00:00+00:00
|
||||
Gala-avond,2016-10-31T20:00:00+00:00
|
||||
25h codenight,2016-11-01T00:00:00+00:00
|
||||
"Geeks, Attack! V",2016-11-04T16:00:00+00:00
|
||||
Exotische en frustrerende talen avond,2016-12-07T18:00:00+00:00
|
||||
FOSDEM,2017-02-04T00:00:00+00:00
|
||||
Hashcode,2017-02-23T18:30:00+00:00
|
||||
HTTPizza,2017-02-27T18:00:00+00:00
|
||||
Vlaamse Programmeerwedstrijd,2017-03-15T10:45:00+00:00
|
||||
Workshop - Je eigen programmeertaal,2017-03-22T19:00:00+00:00
|
||||
App development - iOS,2017-03-29T19:00:00+00:00
|
||||
Spelen met FPGAs,2017-04-27T19:00:00+00:00
|
||||
Lightning Talks: Heracles Editie,2017-05-02T19:00:00+00:00
|
||||
Zeus Kiest,2017-05-16T18:00:00+00:00
|
||||
Zeus op Student Kick-Off,2017-09-27T12:00:00+00:00
|
||||
De grote Zeus introductie quiz,2017-10-05T17:45:00+00:00
|
||||
Hydra Introsessie & Codenight,2017-10-16T18:00:00+02:00
|
||||
Spelletjesavond I,2017-10-19T18:00:00+00:00
|
||||
"Geeks, Attack! VI",2017-10-27T16:00:00+00:00
|
||||
Spelletjesavond II,2017-10-30T17:30:00+00:00
|
||||
Nanopixel,2017-11-07T20:00:00+00:00
|
||||
The Web We Take for Granted,2017-11-23T19:30:00+00:00
|
||||
Hashcode,2018-03-01T18:30:00+00:00
|
||||
Vlaamse Programmeerwedstrijd,2018-03-14T10:00:00+00:00
|
||||
Lasershoot,2018-03-21T18:00:00+00:00
|
||||
BottleBats v2.018,2018-03-26T18:00:00+00:00
|
||||
Lightning Talks: Titan Edition,2018-05-03T18:30:00+00:00
|
||||
Zeus Kiest,2018-05-08T18:00:00+00:00
|
|
313
content/csvdata/haldis-num-users-time.csv
Normal file
313
content/csvdata/haldis-num-users-time.csv
Normal file
|
@ -0,0 +1,313 @@
|
|||
"starttime","num_users"
|
||||
"2015-04-02","4"
|
||||
"2015-04-03","1"
|
||||
"2015-04-21","4"
|
||||
"2015-04-27","0"
|
||||
"2015-04-28","2"
|
||||
"2015-05-05","1"
|
||||
"2015-05-07","3"
|
||||
"2015-05-12","5"
|
||||
"2015-05-13","0"
|
||||
"2015-05-17","0"
|
||||
"2015-06-01","0"
|
||||
"2015-06-04","2"
|
||||
"2015-06-09","0"
|
||||
"2015-06-11","2"
|
||||
"2015-06-15","1"
|
||||
"2015-06-17","1"
|
||||
"2015-06-18","1"
|
||||
"2015-06-19","0"
|
||||
"2015-06-22","0"
|
||||
"2015-06-23","1"
|
||||
"2015-06-24","5"
|
||||
"2015-06-26","0"
|
||||
"2015-07-07","3"
|
||||
"2015-07-14","2"
|
||||
"2015-07-28","2"
|
||||
"2015-08-04","8"
|
||||
"2015-08-07","0"
|
||||
"2015-08-11","4"
|
||||
"2015-08-18","0"
|
||||
"2015-08-24","0"
|
||||
"2015-08-25","4"
|
||||
"2015-08-26","2"
|
||||
"2015-08-27","2"
|
||||
"2015-08-28","0"
|
||||
"2015-09-01","4"
|
||||
"2015-09-02","1"
|
||||
"2015-09-07","9"
|
||||
"2015-09-08","0"
|
||||
"2015-09-09","1"
|
||||
"2015-09-11","0"
|
||||
"2015-09-15","5"
|
||||
"2015-09-18","1"
|
||||
"2015-09-24","2"
|
||||
"2015-09-25","2"
|
||||
"2015-09-28","2"
|
||||
"2015-09-29","3"
|
||||
"2015-09-30","6"
|
||||
"2015-10-01","3"
|
||||
"2015-10-02","1"
|
||||
"2015-10-06","6"
|
||||
"2015-10-08","1"
|
||||
"2015-10-12","2"
|
||||
"2015-10-13","3"
|
||||
"2015-10-15","5"
|
||||
"2015-10-16","0"
|
||||
"2015-10-19","0"
|
||||
"2015-10-20","8"
|
||||
"2015-10-22","6"
|
||||
"2015-10-27","6"
|
||||
"2015-10-29","3"
|
||||
"2015-10-30","8"
|
||||
"2015-11-03","1"
|
||||
"2015-11-04","4"
|
||||
"2015-11-05","0"
|
||||
"2015-11-09","5"
|
||||
"2015-11-10","3"
|
||||
"2015-11-12","5"
|
||||
"2015-11-16","3"
|
||||
"2015-11-17","4"
|
||||
"2015-11-19","5"
|
||||
"2015-11-20","0"
|
||||
"2015-11-23","2"
|
||||
"2015-11-24","7"
|
||||
"2015-11-26","2"
|
||||
"2015-12-02","1"
|
||||
"2015-12-03","1"
|
||||
"2015-12-04","2"
|
||||
"2015-12-07","0"
|
||||
"2015-12-08","6"
|
||||
"2015-12-09","2"
|
||||
"2015-12-10","0"
|
||||
"2015-12-15","3"
|
||||
"2015-12-17","0"
|
||||
"2015-12-29","0"
|
||||
"2016-01-04","0"
|
||||
"2016-01-12","1"
|
||||
"2016-01-14","1"
|
||||
"2016-01-17","2"
|
||||
"2016-01-21","2"
|
||||
"2016-01-27","3"
|
||||
"2016-02-04","2"
|
||||
"2016-02-08","5"
|
||||
"2016-02-09","3"
|
||||
"2016-02-11","4"
|
||||
"2016-02-12","1"
|
||||
"2016-02-16","6"
|
||||
"2016-02-18","3"
|
||||
"2016-02-22","5"
|
||||
"2016-02-23","4"
|
||||
"2016-02-25","7"
|
||||
"2016-02-26","0"
|
||||
"2016-02-29","4"
|
||||
"2016-03-01","9"
|
||||
"2016-03-03","9"
|
||||
"2016-03-07","9"
|
||||
"2016-03-09","3"
|
||||
"2016-03-10","7"
|
||||
"2016-03-14","4"
|
||||
"2016-03-15","7"
|
||||
"2016-03-16","0"
|
||||
"2016-03-17","3"
|
||||
"2016-03-22","5"
|
||||
"2016-03-23","6"
|
||||
"2016-03-24","4"
|
||||
"2016-03-29","4"
|
||||
"2016-03-30","6"
|
||||
"2016-03-31","4"
|
||||
"2016-04-03","0"
|
||||
"2016-04-04","6"
|
||||
"2016-04-06","8"
|
||||
"2016-04-12","3"
|
||||
"2016-04-13","3"
|
||||
"2016-04-14","3"
|
||||
"2016-04-15","5"
|
||||
"2016-04-18","5"
|
||||
"2016-04-19","3"
|
||||
"2016-04-21","3"
|
||||
"2016-04-25","5"
|
||||
"2016-04-26","9"
|
||||
"2016-04-29","0"
|
||||
"2016-05-10","2"
|
||||
"2016-05-12","7"
|
||||
"2016-05-22","2"
|
||||
"2016-05-25","4"
|
||||
"2016-05-26","2"
|
||||
"2016-05-27","4"
|
||||
"2016-05-29","2"
|
||||
"2016-05-30","6"
|
||||
"2016-05-31","3"
|
||||
"2016-06-04","3"
|
||||
"2016-06-09","4"
|
||||
"2016-06-11","2"
|
||||
"2016-06-14","2"
|
||||
"2016-06-16","4"
|
||||
"2016-06-17","3"
|
||||
"2016-06-19","1"
|
||||
"2016-06-21","6"
|
||||
"2016-06-24","0"
|
||||
"2016-06-29","3"
|
||||
"2016-07-05","6"
|
||||
"2016-07-12","4"
|
||||
"2016-07-25","6"
|
||||
"2016-07-26","7"
|
||||
"2016-08-01","0"
|
||||
"2016-08-08","1"
|
||||
"2016-08-10","3"
|
||||
"2016-08-12","3"
|
||||
"2016-08-15","2"
|
||||
"2016-08-16","1"
|
||||
"2016-08-18","3"
|
||||
"2016-08-23","4"
|
||||
"2016-08-25","0"
|
||||
"2016-08-29","2"
|
||||
"2016-08-30","6"
|
||||
"2016-09-05","4"
|
||||
"2016-09-06","6"
|
||||
"2016-09-08","2"
|
||||
"2016-09-09","2"
|
||||
"2016-09-12","2"
|
||||
"2016-09-13","4"
|
||||
"2016-09-20","7"
|
||||
"2016-09-22","2"
|
||||
"2016-09-27","5"
|
||||
"2016-09-29","3"
|
||||
"2016-10-05","9"
|
||||
"2016-10-10","5"
|
||||
"2016-10-17","7"
|
||||
"2016-10-18","6"
|
||||
"2016-10-19","4"
|
||||
"2016-10-20","6"
|
||||
"2016-10-24","7"
|
||||
"2016-10-25","5"
|
||||
"2016-10-26","6"
|
||||
"2016-11-01","8"
|
||||
"2016-11-03","2"
|
||||
"2016-11-04","8"
|
||||
"2016-11-07","4"
|
||||
"2016-11-08","4"
|
||||
"2016-11-09","0"
|
||||
"2016-11-14","3"
|
||||
"2016-11-16","3"
|
||||
"2016-11-17","6"
|
||||
"2016-11-18","1"
|
||||
"2016-11-21","0"
|
||||
"2016-11-22","3"
|
||||
"2016-11-23","5"
|
||||
"2016-11-24","2"
|
||||
"2016-11-29","5"
|
||||
"2016-11-30","2"
|
||||
"2016-12-01","5"
|
||||
"2016-12-06","7"
|
||||
"2016-12-07","9"
|
||||
"2016-12-08","2"
|
||||
"2016-12-09","1"
|
||||
"2016-12-13","0"
|
||||
"2016-12-14","1"
|
||||
"2016-12-20","4"
|
||||
"2017-02-20","5"
|
||||
"2017-02-21","4"
|
||||
"2017-02-24","3"
|
||||
"2017-02-28","3"
|
||||
"2017-03-06","5"
|
||||
"2017-03-07","7"
|
||||
"2017-03-08","2"
|
||||
"2017-03-13","5"
|
||||
"2017-03-14","4"
|
||||
"2017-03-15","2"
|
||||
"2017-03-16","3"
|
||||
"2017-03-21","4"
|
||||
"2017-03-22","5"
|
||||
"2017-03-23","6"
|
||||
"2017-03-27","3"
|
||||
"2017-03-28","2"
|
||||
"2017-03-29","0"
|
||||
"2017-03-30","0"
|
||||
"2017-04-06","1"
|
||||
"2017-04-11","1"
|
||||
"2017-04-18","4"
|
||||
"2017-04-25","4"
|
||||
"2017-04-26","2"
|
||||
"2017-04-27","0"
|
||||
"2017-05-02","8"
|
||||
"2017-05-03","7"
|
||||
"2017-05-04","2"
|
||||
"2017-05-09","11"
|
||||
"2017-05-11","2"
|
||||
"2017-05-12","2"
|
||||
"2017-05-22","3"
|
||||
"2017-05-23","4"
|
||||
"2017-05-30","1"
|
||||
"2017-06-05","2"
|
||||
"2017-06-15","2"
|
||||
"2017-06-16","2"
|
||||
"2017-06-21","1"
|
||||
"2017-06-28","3"
|
||||
"2017-07-05","1"
|
||||
"2017-07-31","4"
|
||||
"2017-08-31","2"
|
||||
"2017-09-07","2"
|
||||
"2017-09-11","3"
|
||||
"2017-09-19","2"
|
||||
"2017-09-28","1"
|
||||
"2017-10-02","7"
|
||||
"2017-10-03","3"
|
||||
"2017-10-04","0"
|
||||
"2017-10-05","4"
|
||||
"2017-10-10","2"
|
||||
"2017-10-12","6"
|
||||
"2017-10-16","5"
|
||||
"2017-10-18","3"
|
||||
"2017-10-19","3"
|
||||
"2017-10-26","6"
|
||||
"2017-10-30","1"
|
||||
"2017-11-09","1"
|
||||
"2017-11-13","3"
|
||||
"2017-11-14","2"
|
||||
"2017-11-15","7"
|
||||
"2017-11-16","4"
|
||||
"2017-11-21","3"
|
||||
"2017-11-22","3"
|
||||
"2017-11-27","2"
|
||||
"2017-11-29","4"
|
||||
"2017-11-30","11"
|
||||
"2017-12-04","8"
|
||||
"2017-12-05","3"
|
||||
"2017-12-06","7"
|
||||
"2017-12-07","5"
|
||||
"2017-12-08","3"
|
||||
"2017-12-13","4"
|
||||
"2017-12-14","4"
|
||||
"2017-12-19","5"
|
||||
"2017-12-20","1"
|
||||
"2017-12-21","3"
|
||||
"2018-01-03","2"
|
||||
"2018-01-08","2"
|
||||
"2018-01-14","2"
|
||||
"2018-02-12","5"
|
||||
"2018-02-13","3"
|
||||
"2018-02-19","5"
|
||||
"2018-02-21","7"
|
||||
"2018-02-22","5"
|
||||
"2018-02-27","3"
|
||||
"2018-02-28","8"
|
||||
"2018-03-01","6"
|
||||
"2018-03-06","2"
|
||||
"2018-03-07","9"
|
||||
"2018-03-08","3"
|
||||
"2018-03-09","2"
|
||||
"2018-03-12","5"
|
||||
"2018-03-13","2"
|
||||
"2018-03-16","3"
|
||||
"2018-03-19","0"
|
||||
"2018-03-20","6"
|
||||
"2018-03-22","3"
|
||||
"2018-03-26","7"
|
||||
"2018-03-27","2"
|
||||
"2018-03-28","4"
|
||||
"2018-04-04","3"
|
||||
"2018-04-10","1"
|
||||
"2018-04-11","4"
|
||||
"2018-04-16","4"
|
||||
"2018-04-17","4"
|
|
308
content/csvdata/haldis-price-time.csv
Normal file
308
content/csvdata/haldis-price-time.csv
Normal file
|
@ -0,0 +1,308 @@
|
|||
"starttime","total_price"
|
||||
"2015-04-02","3600.0"
|
||||
"2015-04-21","5390.0"
|
||||
"2015-04-27","0.0"
|
||||
"2015-04-28","4800.0"
|
||||
"2015-05-05","1200.0"
|
||||
"2015-05-07","4785.0"
|
||||
"2015-05-12","4200.0"
|
||||
"2015-05-13","0.0"
|
||||
"2015-05-17","0.0"
|
||||
"2015-06-01","0.0"
|
||||
"2015-06-04","3000.0"
|
||||
"2015-06-09","0.0"
|
||||
"2015-06-11","2400.0"
|
||||
"2015-06-15","600.0"
|
||||
"2015-06-17","1800.0"
|
||||
"2015-06-18","1200.0"
|
||||
"2015-06-19","0.0"
|
||||
"2015-06-22","0.0"
|
||||
"2015-06-23","0.0"
|
||||
"2015-06-24","5400.0"
|
||||
"2015-06-26","0.0"
|
||||
"2015-07-07","3600.0"
|
||||
"2015-07-28","0.0"
|
||||
"2015-08-04","1800.0"
|
||||
"2015-08-07","0.0"
|
||||
"2015-08-11","5975.0"
|
||||
"2015-08-18","0.0"
|
||||
"2015-08-24","0.0"
|
||||
"2015-08-25","3000.0"
|
||||
"2015-08-26","0.0"
|
||||
"2015-08-27","1800.0"
|
||||
"2015-08-28","0.0"
|
||||
"2015-09-01","3000.0"
|
||||
"2015-09-02","0.0"
|
||||
"2015-09-07","8365.0"
|
||||
"2015-09-08","0.0"
|
||||
"2015-09-09","1800.0"
|
||||
"2015-09-11","0.0"
|
||||
"2015-09-15","3600.0"
|
||||
"2015-09-18","2400.0"
|
||||
"2015-09-24","4780.0"
|
||||
"2015-09-25","2400.0"
|
||||
"2015-09-28","4780.0"
|
||||
"2015-09-29","3600.0"
|
||||
"2015-09-30","22130.0"
|
||||
"2015-10-01","0.0"
|
||||
"2015-10-02","600.0"
|
||||
"2015-10-06","2400.0"
|
||||
"2015-10-08","10800.0"
|
||||
"2015-10-12","1800.0"
|
||||
"2015-10-13","2400.0"
|
||||
"2015-10-15","6000.0"
|
||||
"2015-10-16","0.0"
|
||||
"2015-10-19","0.0"
|
||||
"2015-10-20","10755.0"
|
||||
"2015-10-22","2400.0"
|
||||
"2015-10-27","6000.0"
|
||||
"2015-10-29","4200.0"
|
||||
"2015-10-30","0.0"
|
||||
"2015-11-03","0.0"
|
||||
"2015-11-04","4200.0"
|
||||
"2015-11-05","0.0"
|
||||
"2015-11-09","0.0"
|
||||
"2015-11-10","0.0"
|
||||
"2015-11-12","7050.0"
|
||||
"2015-11-16","0.0"
|
||||
"2015-11-17","3600.0"
|
||||
"2015-11-19","11950.0"
|
||||
"2015-11-20","0.0"
|
||||
"2015-11-23","2390.0"
|
||||
"2015-11-24","6450.0"
|
||||
"2015-11-26","3600.0"
|
||||
"2015-12-02","2400.0"
|
||||
"2015-12-03","1200.0"
|
||||
"2015-12-04","1800.0"
|
||||
"2015-12-07","0.0"
|
||||
"2015-12-08","10320.0"
|
||||
"2015-12-09","4780.0"
|
||||
"2015-12-10","0.0"
|
||||
"2015-12-15","3000.0"
|
||||
"2015-12-17","0.0"
|
||||
"2015-12-29","0.0"
|
||||
"2016-01-04","0.0"
|
||||
"2016-01-12","540.0"
|
||||
"2016-01-14","2400.0"
|
||||
"2016-01-17","4635.0"
|
||||
"2016-01-21","1160.0"
|
||||
"2016-01-27","2280.0"
|
||||
"2016-02-04","1200.0"
|
||||
"2016-02-08","9560.0"
|
||||
"2016-02-09","3000.0"
|
||||
"2016-02-11","4230.0"
|
||||
"2016-02-12","1800.0"
|
||||
"2016-02-16","4800.0"
|
||||
"2016-02-18","4050.0"
|
||||
"2016-02-22","2785.0"
|
||||
"2016-02-23","5400.0"
|
||||
"2016-02-25","3765.0"
|
||||
"2016-02-26","0.0"
|
||||
"2016-02-29","7170.0"
|
||||
"2016-03-01","7785.0"
|
||||
"2016-03-03","6320.0"
|
||||
"2016-03-07","6860.0"
|
||||
"2016-03-09","1800.0"
|
||||
"2016-03-10","7540.0"
|
||||
"2016-03-14","3500.0"
|
||||
"2016-03-15","6020.0"
|
||||
"2016-03-16","0.0"
|
||||
"2016-03-17","3000.0"
|
||||
"2016-03-22","4220.0"
|
||||
"2016-03-23","4200.0"
|
||||
"2016-03-24","8800.0"
|
||||
"2016-03-29","2610.0"
|
||||
"2016-03-30","5400.0"
|
||||
"2016-03-31","2470.0"
|
||||
"2016-04-03","0.0"
|
||||
"2016-04-04","3000.0"
|
||||
"2016-04-06","4800.0"
|
||||
"2016-04-12","1800.0"
|
||||
"2016-04-13","2400.0"
|
||||
"2016-04-14","2000.0"
|
||||
"2016-04-15","2025.0"
|
||||
"2016-04-18","3640.0"
|
||||
"2016-04-19","1750.0"
|
||||
"2016-04-21","1670.0"
|
||||
"2016-04-25","8020.0"
|
||||
"2016-04-26","7105.0"
|
||||
"2016-04-29","0.0"
|
||||
"2016-05-10","3600.0"
|
||||
"2016-05-12","4500.0"
|
||||
"2016-05-22","4775.0"
|
||||
"2016-05-25","2900.0"
|
||||
"2016-05-26","1200.0"
|
||||
"2016-05-27","2790.0"
|
||||
"2016-05-29","1200.0"
|
||||
"2016-05-30","3500.0"
|
||||
"2016-05-31","3350.0"
|
||||
"2016-06-04","2400.0"
|
||||
"2016-06-09","2900.0"
|
||||
"2016-06-11","1710.0"
|
||||
"2016-06-14","1200.0"
|
||||
"2016-06-16","3000.0"
|
||||
"2016-06-17","1450.0"
|
||||
"2016-06-19","680.0"
|
||||
"2016-06-21","4510.0"
|
||||
"2016-06-24","0.0"
|
||||
"2016-06-29","4780.0"
|
||||
"2016-07-05","4830.0"
|
||||
"2016-07-12","3665.0"
|
||||
"2016-07-25","4500.0"
|
||||
"2016-07-26","10380.0"
|
||||
"2016-08-01","0.0"
|
||||
"2016-08-08","1700.0"
|
||||
"2016-08-10","2770.0"
|
||||
"2016-08-12","7900.0"
|
||||
"2016-08-15","4050.0"
|
||||
"2016-08-18","2400.0"
|
||||
"2016-08-25","7210.0"
|
||||
"2016-08-29","1700.0"
|
||||
"2016-08-30","6000.0"
|
||||
"2016-09-05","41886.0"
|
||||
"2016-09-06","6210.0"
|
||||
"2016-09-08","2410.0"
|
||||
"2016-09-09","2400.0"
|
||||
"2016-09-12","460.0"
|
||||
"2016-09-13","4500.0"
|
||||
"2016-09-20","4500.0"
|
||||
"2016-09-22","1800.0"
|
||||
"2016-09-27","2250.0"
|
||||
"2016-09-29","3100.0"
|
||||
"2016-10-05","12600.0"
|
||||
"2016-10-10","5655.0"
|
||||
"2016-10-17","5590.0"
|
||||
"2016-10-18","4800.0"
|
||||
"2016-10-19","11820.0"
|
||||
"2016-10-20","3700.0"
|
||||
"2016-10-24","3650.0"
|
||||
"2016-10-25","4050.0"
|
||||
"2016-10-26","8400.0"
|
||||
"2016-11-01","4820.0"
|
||||
"2016-11-03","1990.0"
|
||||
"2016-11-04","34600.0"
|
||||
"2016-11-07","9200.0"
|
||||
"2016-11-08","2750.0"
|
||||
"2016-11-09","0.0"
|
||||
"2016-11-14","1740.0"
|
||||
"2016-11-16","3000.0"
|
||||
"2016-11-17","7490.0"
|
||||
"2016-11-18","1200.0"
|
||||
"2016-11-21","0.0"
|
||||
"2016-11-22","2400.0"
|
||||
"2016-11-23","3000.0"
|
||||
"2016-11-24","3000.0"
|
||||
"2016-11-29","4390.0"
|
||||
"2016-11-30","2710.0"
|
||||
"2016-12-01","4550.0"
|
||||
"2016-12-06","6000.0"
|
||||
"2016-12-07","22705.0"
|
||||
"2016-12-08","2500.0"
|
||||
"2016-12-09","1030.0"
|
||||
"2016-12-13","0.0"
|
||||
"2016-12-14","600.0"
|
||||
"2016-12-20","2400.0"
|
||||
"2017-02-20","5975.0"
|
||||
"2017-02-21","2130.0"
|
||||
"2017-02-24","1480.0"
|
||||
"2017-02-28","3000.0"
|
||||
"2017-03-06","3250.0"
|
||||
"2017-03-07","5400.0"
|
||||
"2017-03-08","5975.0"
|
||||
"2017-03-13","3960.0"
|
||||
"2017-03-14","3000.0"
|
||||
"2017-03-15","2390.0"
|
||||
"2017-03-16","2250.0"
|
||||
"2017-03-21","4800.0"
|
||||
"2017-03-22","3320.0"
|
||||
"2017-03-23","7170.0"
|
||||
"2017-03-27","2290.0"
|
||||
"2017-03-28","850.0"
|
||||
"2017-03-29","0.0"
|
||||
"2017-03-30","0.0"
|
||||
"2017-04-06","1200.0"
|
||||
"2017-04-11","1800.0"
|
||||
"2017-04-18","2040.0"
|
||||
"2017-04-25","2400.0"
|
||||
"2017-04-26","2390.0"
|
||||
"2017-04-27","8365.0"
|
||||
"2017-05-02","4200.0"
|
||||
"2017-05-03","5065.0"
|
||||
"2017-05-04","2400.0"
|
||||
"2017-05-09","8520.0"
|
||||
"2017-05-11","1520.0"
|
||||
"2017-05-12","2400.0"
|
||||
"2017-05-22","2705.0"
|
||||
"2017-05-23","3000.0"
|
||||
"2017-05-30","1790.0"
|
||||
"2017-06-05","3250.0"
|
||||
"2017-06-15","1200.0"
|
||||
"2017-06-16","1750.0"
|
||||
"2017-06-21","4780.0"
|
||||
"2017-06-28","1880.0"
|
||||
"2017-07-05","4850.0"
|
||||
"2017-07-31","2980.0"
|
||||
"2017-08-31","4200.0"
|
||||
"2017-09-07","2400.0"
|
||||
"2017-09-11","3420.0"
|
||||
"2017-09-19","2400.0"
|
||||
"2017-09-28","3600.0"
|
||||
"2017-10-02","6220.0"
|
||||
"2017-10-03","4350.0"
|
||||
"2017-10-04","900.0"
|
||||
"2017-10-05","25095.0"
|
||||
"2017-10-10","3585.0"
|
||||
"2017-10-12","7180.0"
|
||||
"2017-10-16","18725.0"
|
||||
"2017-10-18","3600.0"
|
||||
"2017-10-19","7490.0"
|
||||
"2017-10-26","4200.0"
|
||||
"2017-10-30","15535.0"
|
||||
"2017-11-09","2400.0"
|
||||
"2017-11-13","1710.0"
|
||||
"2017-11-14","2400.0"
|
||||
"2017-11-15","6100.0"
|
||||
"2017-11-16","2400.0"
|
||||
"2017-11-21","4200.0"
|
||||
"2017-11-22","2080.0"
|
||||
"2017-11-27","1060.0"
|
||||
"2017-11-29","2400.0"
|
||||
"2017-11-30","10335.0"
|
||||
"2017-12-04","6210.0"
|
||||
"2017-12-05","1800.0"
|
||||
"2017-12-06","4200.0"
|
||||
"2017-12-07","3960.0"
|
||||
"2017-12-08","1700.0"
|
||||
"2017-12-13","3080.0"
|
||||
"2017-12-14","4200.0"
|
||||
"2017-12-19","4800.0"
|
||||
"2017-12-20","3000.0"
|
||||
"2017-12-21","2830.0"
|
||||
"2018-01-03","2390.0"
|
||||
"2018-01-08","1695.0"
|
||||
"2018-01-14","1800.0"
|
||||
"2018-02-12","5960.0"
|
||||
"2018-02-13","2400.0"
|
||||
"2018-02-19","4590.0"
|
||||
"2018-02-21","6000.0"
|
||||
"2018-02-22","3975.0"
|
||||
"2018-02-27","6000.0"
|
||||
"2018-02-28","5020.0"
|
||||
"2018-03-01","5400.0"
|
||||
"2018-03-06","1800.0"
|
||||
"2018-03-07","6550.0"
|
||||
"2018-03-08","3180.0"
|
||||
"2018-03-09","1580.0"
|
||||
"2018-03-12","3670.0"
|
||||
"2018-03-13","1800.0"
|
||||
"2018-03-16","3585.0"
|
||||
"2018-03-19","0.0"
|
||||
"2018-03-20","5400.0"
|
||||
"2018-03-22","1390.0"
|
||||
"2018-03-26","23900.0"
|
||||
"2018-03-27","1200.0"
|
||||
"2018-03-28","3600.0"
|
||||
"2018-04-04","1650.0"
|
||||
"2018-04-10","580.0"
|
||||
"2018-04-11","2400.0"
|
||||
"2018-04-16","4780.0"
|
|
394
content/csvdata/punchcard.csv
Normal file
394
content/csvdata/punchcard.csv
Normal file
|
@ -0,0 +1,394 @@
|
|||
location_id,starttime,name,type,lat,lon
|
||||
3.0,2015-04-02 00:00:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-04-21 11:21:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-04-28 11:55:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-05-05 11:54:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-05-07 12:08:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-05-12 11:09:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-06-04 18:01:14,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-06-11 11:17:51,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-06-15 11:58:29,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-06-15 11:59:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-06-17 13:00:20,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-06-18 12:52:37,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-06-24 18:58:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-07-07 18:00:53,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-08-04 18:58:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-08-25 18:26:22,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-08-27 18:33:55,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-09-01 17:45:40,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-09-09 18:03:16,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-09-15 18:49:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-09-18 12:50:42,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-09-25 11:47:08,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-09-29 18:31:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-09-30 18:40:54,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-02 18:37:58,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-06 18:29:54,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-08 19:00:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-12 17:46:56,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-13 18:48:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-15 18:03:31,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-22 15:52:08,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-27 12:18:36,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-27 17:21:07,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-10-29 18:34:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-11-04 17:56:18,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-11-17 17:17:52,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-11-24 18:35:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-11-26 11:30:33,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-12-02 19:07:58,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-12-03 12:51:55,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-12-04 18:02:43,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-12-08 19:03:33,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2015-12-15 20:10:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-01-14 18:05:47,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-02-04 19:08:28,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-02-09 18:37:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-02-12 19:52:21,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-02-16 18:01:25,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-02-23 18:59:03,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-02-26 11:32:10,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-03-01 18:44:10,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-03-09 11:06:32,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-03-09 18:16:12,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-03-10 20:30:19,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-03-17 17:25:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-03-23 17:04:47,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-03-24 17:49:06,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-03-30 19:05:17,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-04-12 19:20:47,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-04-13 19:51:38,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-04-26 18:21:56,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-04-26 18:48:31,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-05-10 17:56:22,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-05-22 11:06:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-05-26 17:46:07,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-05-29 18:29:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-05-31 17:18:01,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-06-04 12:29:11,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-06-04 18:23:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-06-14 19:46:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-06-16 18:25:37,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-07-12 18:50:18,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-07-26 18:58:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-08-18 17:13:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-08-18 17:13:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-08-18 17:13:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-08-18 17:13:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-08-18 17:13:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-08-18 17:13:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-08-18 17:13:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-08-30 17:28:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-09-09 18:26:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-09-22 18:16:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-10-05 18:08:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-10-18 17:27:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-10-26 17:01:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-11-16 16:28:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-11-18 11:44:30,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-11-22 17:34:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-11-24 18:47:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-12-06 18:53:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-12-06 18:53:33,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-12-14 17:30:31,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2016-12-20 16:57:20,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-02-28 17:36:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-03-07 17:50:23,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-03-14 17:18:31,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-03-21 18:40:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-04-06 17:40:32,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-04-11 11:30:48,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-04-25 18:43:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-05-02 17:23:21,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-05-03 12:47:47,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-05-03 12:49:13,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-05-04 17:12:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-05-09 16:50:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-05-12 17:45:37,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-05-23 17:46:44,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-06-15 17:35:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-07-05 19:37:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-08-31 18:09:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-09-07 19:12:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-09-19 12:45:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-09-28 18:27:16,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-10-03 18:10:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-10-12 11:16:39,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-10-12 18:10:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-10-18 18:01:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-10-26 17:48:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-11-09 17:36:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-11-14 17:38:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-11-16 11:04:35,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-11-21 17:23:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-11-29 17:59:29,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-12-05 17:06:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-12-06 18:42:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-12-14 09:45:26,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-12-14 18:04:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-12-19 18:05:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2017-12-20 17:04:21,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-01-14 18:06:51,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-02-13 17:42:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-02-21 18:41:06,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-02-27 19:33:33,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-03-01 16:04:34,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-03-06 19:37:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-03-07 18:25:40,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-03-13 19:23:23,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-03-20 15:35:09,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-03-27 19:19:37,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-03-28 11:27:56,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-03-28 18:33:11,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-04-11 18:48:00,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-04-11 18:49:12,Ocean Garden,chinese,51.028328,3.722345
|
||||
3.0,2018-04-17 11:22:50,Ocean Garden,chinese,51.028328,3.722345
|
||||
2.0,2015-04-03 11:40:44,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-04-27 13:24:55,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-04-27 23:12:35,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-05-13 10:47:28,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-05-17 19:51:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-01 17:49:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-04 21:55:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-04 22:51:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-09 11:55:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-09 16:53:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-19 19:22:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-22 17:36:28,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-22 17:39:45,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-06-26 15:41:33,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-08-04 18:11:56,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-08-18 19:06:18,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-08-24 18:05:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-08-27 18:33:34,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-08-28 18:30:15,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-09-01 17:48:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-09-02 17:48:25,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-09-08 17:41:14,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-09-08 19:09:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-09-11 18:36:20,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-09-25 19:15:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-10-01 13:29:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-10-06 13:27:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-10-16 18:24:54,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-10-19 17:26:50,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-10-22 18:33:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-11-05 16:58:06,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-11-20 21:42:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-11-20 21:42:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-12-02 18:57:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-12-07 20:27:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-12-10 18:08:23,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-12-17 19:07:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2015-12-29 17:32:11,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-01-04 18:46:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-01-14 20:10:14,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-01-21 18:57:44,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-01-27 16:44:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-02-09 19:37:51,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-02-22 19:25:07,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-03-03 18:57:46,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-03-10 19:41:49,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-03-15 17:39:02,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-03-22 16:51:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-03-22 16:51:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-03-29 15:57:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-04-18 17:48:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-04-21 19:12:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-04-26 18:37:27,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-05-22 17:52:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-05-27 18:54:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-06-19 16:41:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-06-24 18:05:02,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-07-12 18:44:04,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-07-12 19:07:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-08-01 22:52:36,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-08-10 18:07:31,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-09-08 18:49:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-09-12 12:10:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-09-27 18:48:08,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-10-10 18:15:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-10-17 16:44:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2016-10-19 18:10:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2017-05-03 22:18:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2017-05-22 19:12:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2017-05-30 20:23:15,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2017-12-13 17:50:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2017-12-21 18:27:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2018-01-08 17:14:04,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2018-02-12 20:12:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2018-02-19 19:08:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2018-04-04 20:36:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
2.0,2018-04-17 18:25:00,'t Blauw Kotje,fries,51.031221,3.713443
|
||||
4.0,2015-04-03 11:40:50,Delhaize Sterre,sandwich,51.026719,3.710903
|
||||
4.0,2015-06-23 11:05:00,Delhaize Sterre,sandwich,51.026719,3.710903
|
||||
4.0,2016-03-15 17:47:11,Delhaize Sterre,sandwich,51.026719,3.710903
|
||||
4.0,2018-04-17 12:17:49,Delhaize Sterre,sandwich,51.026719,3.710903
|
||||
5.0,2015-04-21 17:28:39,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-05-07 17:50:17,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-06-04 23:10:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-06-22 17:27:35,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-07-14 18:31:57,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-08-07 11:09:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-08-11 19:38:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-09-07 18:05:49,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-09-24 18:49:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-09-24 18:50:09,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-09-28 18:20:41,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-09-30 18:28:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-10-20 18:40:33,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-11-19 18:16:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-11-23 18:22:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2015-12-09 19:49:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-01-17 17:16:31,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-02-08 17:52:49,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-02-08 17:52:55,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-02-29 18:08:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-03-01 17:32:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-03-07 19:00:43,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-04-25 18:05:38,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-06-29 19:22:02,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-11-17 18:29:21,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-11-30 19:09:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2016-12-07 17:46:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-02-20 18:31:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-03-08 18:58:26,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-03-15 19:40:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-03-23 18:34:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-04-26 18:57:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-04-27 18:17:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-05-03 17:09:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-06-21 18:24:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-10-05 17:43:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-10-10 17:59:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-10-10 17:59:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-10-12 18:14:53,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-10-16 17:48:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2017-10-30 17:50:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2018-01-03 17:12:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2018-03-16 20:22:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2018-03-26 18:29:00,Sim-pizza,pizza,51.026697,3.720483
|
||||
5.0,2018-04-16 18:23:15,Sim-pizza,pizza,51.026697,3.720483
|
||||
6.0,2015-06-23 11:07:00,Shell,sandwich,51.025967,3.711276
|
||||
6.0,2015-09-02 13:03:09,Shell,sandwich,51.025967,3.711276
|
||||
8.0,2015-10-29 18:27:00,LAN Pizza,pizza,51.044517,3.728017
|
||||
8.0,2015-10-30 17:21:27,LAN Pizza,pizza,51.044517,3.728017
|
||||
8.0,2015-11-03 10:24:00,LAN Pizza,pizza,51.044517,3.728017
|
||||
8.0,2016-02-09 19:39:09,LAN Pizza,pizza,51.044517,3.728017
|
||||
9.0,2015-11-12 11:08:00,Oriental,chinese,51.030694,3.713199
|
||||
9.0,2015-12-08 19:04:33,Oriental,chinese,51.030694,3.713199
|
||||
9.0,2016-01-12 11:11:40,Oriental,chinese,51.030694,3.713199
|
||||
10.0,2015-11-12 17:32:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2015-11-24 11:56:06,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-02-18 17:37:42,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-03-07 19:07:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-04-19 19:39:53,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-04-29 10:52:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-05-12 17:15:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-06-09 17:50:36,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-06-21 17:24:17,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-07-05 17:37:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-07-26 19:28:48,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-08-01 22:04:04,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-08-08 18:13:19,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-08-16 17:31:29,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-08-25 17:19:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-09-06 17:52:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-09-20 17:38:02,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-10-20 17:14:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2016-11-01 18:30:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2017-05-11 17:30:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2017-11-15 17:06:00,Gouden Saté,fries,51.041519,3.725555
|
||||
10.0,2018-03-19 18:20:00,Gouden Saté,fries,51.041519,3.725555
|
||||
7.0,2016-01-17 16:58:28,Pitta Pinte,pitta,50.992606,3.652277
|
||||
7.0,2016-04-03 18:53:00,Pitta Pinte,pitta,50.992606,3.652277
|
||||
7.0,2016-05-31 17:17:47,Pitta Pinte,pitta,50.992606,3.652277
|
||||
7.0,2016-06-17 17:29:16,Pitta Pinte,pitta,50.992606,3.652277
|
||||
7.0,2016-08-29 17:13:00,Pitta Pinte,pitta,50.992606,3.652277
|
||||
7.0,2017-03-06 17:47:00,Pitta Pinte,pitta,50.992606,3.652277
|
||||
11.0,2016-02-11 16:09:00,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-02-25 17:29:00,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-02-25 17:28:57,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-03-10 15:54:36,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-03-16 20:01:39,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-03-31 18:13:22,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-04-06 18:35:41,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-04-15 19:26:15,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-05-25 18:24:00,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-06-11 17:59:54,Quick,burgers,51.017457,3.669909
|
||||
11.0,2016-09-05 17:21:00,Quick,burgers,51.017457,3.669909
|
||||
12.0,2016-03-14 18:17:00,Dominos,pizza,51.038946,3.726206
|
||||
12.0,2016-03-15 17:42:00,Dominos,pizza,51.038946,3.726206
|
||||
12.0,2016-03-24 18:38:00,Dominos,pizza,51.038946,3.726206
|
||||
12.0,2016-04-04 17:00:00,Dominos,pizza,51.038946,3.726206
|
||||
12.0,2016-04-14 18:32:00,Dominos,pizza,51.038946,3.726206
|
||||
12.0,2016-05-30 16:32:00,Dominos,pizza,51.038946,3.726206
|
||||
12.0,2016-07-25 11:00:00,Dominos,pizza,51.038946,3.726206
|
||||
12.0,2016-09-13 18:02:00,Dominos,pizza,51.038946,3.726206
|
||||
12.0,2016-10-19 18:06:00,Dominos,pizza,51.038946,3.726206
|
||||
13.0,2016-08-12 11:15:00,Stella Di Mare,pizza,51.035958,3.743648
|
||||
13.0,2016-08-15 17:01:00,Stella Di Mare,pizza,51.035958,3.743648
|
||||
13.0,2016-09-29 18:06:00,Stella Di Mare,pizza,51.035958,3.743648
|
||||
13.0,2016-11-07 18:34:00,Stella Di Mare,pizza,51.035958,3.743648
|
||||
14.0,2016-08-23 18:00:00,Olifantje,fries,51.038665,3.731186
|
||||
14.0,2016-08-25 17:18:00,Olifantje,fries,51.038665,3.731186
|
||||
14.0,2016-12-13 18:04:00,Olifantje,fries,51.038665,3.731186
|
||||
16.0,2016-10-24 17:48:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2016-10-25 18:12:47,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2016-11-03 11:18:54,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2016-11-07 19:41:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2016-11-14 18:21:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2016-11-23 17:53:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2016-11-29 18:31:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2016-12-09 16:22:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-02-21 19:03:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-02-24 18:16:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-03-13 17:34:49,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-03-16 20:00:58,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-03-22 17:54:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-03-27 17:46:56,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-03-29 18:12:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-04-18 19:15:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-05-09 17:00:42,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-06-28 17:42:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-07-31 18:36:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-09-11 18:19:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-10-02 17:44:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-10-19 18:11:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-11-13 17:38:50,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-11-22 18:51:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-11-27 18:10:57,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-12-04 17:34:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-12-07 18:23:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2017-12-21 18:43:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2018-02-12 18:37:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2018-02-28 18:10:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2018-03-07 18:27:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2018-03-09 16:00:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2018-03-12 18:03:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2018-03-22 19:12:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2018-04-10 17:33:00,De Fritoloog,fries,51.026738,3.709987
|
||||
16.0,2018-04-17 18:49:00,De Fritoloog,fries,51.026738,3.709987
|
||||
15.0,2016-11-03 16:37:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
15.0,2016-11-09 16:48:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
15.0,2016-11-21 17:43:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
15.0,2017-03-30 18:02:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
15.0,2017-05-02 17:22:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
15.0,2017-06-05 17:38:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
15.0,2017-06-16 17:55:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
15.0,2017-07-31 18:12:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
15.0,2017-10-04 19:09:00,Paul's Boutique,burgers,51.036352,3.713044
|
||||
17.0,2016-11-04 17:40:00,Andromeda,pizza,51.0403,3.725489
|
||||
17.0,2017-10-16 18:57:00,Andromeda,pizza,51.0403,3.725489
|
||||
18.0,2016-11-04 23:00:00,Bicky,burgers,51.044515,3.727955
|
||||
19.0,2016-11-08 16:30:00,pita cece,pitta,51.060491,3.702095
|
||||
20.0,2016-12-01 18:30:00,Pita Uniq,pitta,51.026903,3.721855
|
||||
20.0,2016-12-08 18:48:00,Pita Uniq,pitta,51.026903,3.721855
|
||||
20.0,2017-03-28 19:52:00,Pita Uniq,pitta,51.026903,3.721855
|
||||
20.0,2017-07-05 20:12:00,Pita Uniq,pitta,51.026903,3.721855
|
||||
20.0,2017-10-03 18:04:00,Pita Uniq,pitta,51.026903,3.721855
|
||||
20.0,2017-12-08 17:27:00,Pita Uniq,pitta,51.026903,3.721855
|
||||
22.0,2017-11-30 17:54:00,Pizza Hut,pizza,51.027507,3.713416
|
||||
22.0,2018-02-22 18:47:00,Pizza Hut,pizza,51.027507,3.713416
|
||||
22.0,2018-03-08 19:37:00,Pizza Hut,pizza,51.027507,3.713416
|
|
507
content/csvdata/tap-orders-day.csv
Normal file
507
content/csvdata/tap-orders-day.csv
Normal file
|
@ -0,0 +1,507 @@
|
|||
"created_at","count"
|
||||
"2016-02-10","14"
|
||||
"2016-02-11","64"
|
||||
"2016-02-12","24"
|
||||
"2016-02-13","2"
|
||||
"2016-02-15","20"
|
||||
"2016-02-16","38"
|
||||
"2016-02-17","30"
|
||||
"2016-02-18","27"
|
||||
"2016-02-19","15"
|
||||
"2016-02-22","29"
|
||||
"2016-02-23","43"
|
||||
"2016-02-24","43"
|
||||
"2016-02-25","40"
|
||||
"2016-02-26","26"
|
||||
"2016-02-29","27"
|
||||
"2016-03-01","47"
|
||||
"2016-03-02","27"
|
||||
"2016-03-03","40"
|
||||
"2016-03-04","20"
|
||||
"2016-03-07","26"
|
||||
"2016-03-08","27"
|
||||
"2016-03-09","20"
|
||||
"2016-03-10","33"
|
||||
"2016-03-11","9"
|
||||
"2016-03-14","29"
|
||||
"2016-03-15","64"
|
||||
"2016-03-16","20"
|
||||
"2016-03-17","31"
|
||||
"2016-03-21","32"
|
||||
"2016-03-22","41"
|
||||
"2016-03-23","35"
|
||||
"2016-03-24","36"
|
||||
"2016-03-25","15"
|
||||
"2016-03-29","14"
|
||||
"2016-03-30","27"
|
||||
"2016-03-31","23"
|
||||
"2016-04-01","28"
|
||||
"2016-04-04","17"
|
||||
"2016-04-05","11"
|
||||
"2016-04-06","35"
|
||||
"2016-04-07","59"
|
||||
"2016-04-08","10"
|
||||
"2016-04-11","27"
|
||||
"2016-04-12","42"
|
||||
"2016-04-13","25"
|
||||
"2016-04-14","23"
|
||||
"2016-04-15","27"
|
||||
"2016-04-18","29"
|
||||
"2016-04-19","17"
|
||||
"2016-04-20","11"
|
||||
"2016-04-21","13"
|
||||
"2016-04-25","43"
|
||||
"2016-04-26","46"
|
||||
"2016-04-27","38"
|
||||
"2016-04-28","44"
|
||||
"2016-04-29","17"
|
||||
"2016-05-02","36"
|
||||
"2016-05-03","34"
|
||||
"2016-05-04","19"
|
||||
"2016-05-09","42"
|
||||
"2016-05-10","29"
|
||||
"2016-05-11","40"
|
||||
"2016-05-12","45"
|
||||
"2016-05-13","11"
|
||||
"2016-05-17","25"
|
||||
"2016-05-18","10"
|
||||
"2016-05-19","15"
|
||||
"2016-05-20","1"
|
||||
"2016-05-23","14"
|
||||
"2016-05-24","6"
|
||||
"2016-05-25","10"
|
||||
"2016-05-26","8"
|
||||
"2016-05-27","13"
|
||||
"2016-05-30","14"
|
||||
"2016-05-31","9"
|
||||
"2016-06-01","5"
|
||||
"2016-06-02","12"
|
||||
"2016-06-03","4"
|
||||
"2016-06-06","5"
|
||||
"2016-06-07","8"
|
||||
"2016-06-08","8"
|
||||
"2016-06-09","14"
|
||||
"2016-06-10","5"
|
||||
"2016-06-13","13"
|
||||
"2016-06-14","7"
|
||||
"2016-06-15","9"
|
||||
"2016-06-16","27"
|
||||
"2016-06-17","3"
|
||||
"2016-06-20","11"
|
||||
"2016-06-21","28"
|
||||
"2016-06-22","15"
|
||||
"2016-06-23","8"
|
||||
"2016-06-24","15"
|
||||
"2016-06-27","17"
|
||||
"2016-06-28","7"
|
||||
"2016-06-29","12"
|
||||
"2016-06-30","2"
|
||||
"2016-07-01","2"
|
||||
"2016-07-04","1"
|
||||
"2016-07-05","22"
|
||||
"2016-07-06","9"
|
||||
"2016-07-07","8"
|
||||
"2016-07-08","2"
|
||||
"2016-07-12","23"
|
||||
"2016-07-13","3"
|
||||
"2016-07-14","4"
|
||||
"2016-07-15","4"
|
||||
"2016-07-25","8"
|
||||
"2016-07-26","25"
|
||||
"2016-07-27","19"
|
||||
"2016-07-28","4"
|
||||
"2016-07-29","8"
|
||||
"2016-08-01","14"
|
||||
"2016-08-02","21"
|
||||
"2016-08-03","16"
|
||||
"2016-08-04","20"
|
||||
"2016-08-05","9"
|
||||
"2016-08-08","28"
|
||||
"2016-08-09","27"
|
||||
"2016-08-10","15"
|
||||
"2016-08-11","8"
|
||||
"2016-08-12","26"
|
||||
"2016-08-16","28"
|
||||
"2016-08-17","10"
|
||||
"2016-08-18","4"
|
||||
"2016-08-19","12"
|
||||
"2016-08-22","10"
|
||||
"2016-08-23","30"
|
||||
"2016-08-24","5"
|
||||
"2016-08-25","14"
|
||||
"2016-08-26","29"
|
||||
"2016-08-29","25"
|
||||
"2016-08-30","17"
|
||||
"2016-08-31","10"
|
||||
"2016-09-01","12"
|
||||
"2016-09-02","16"
|
||||
"2016-09-05","16"
|
||||
"2016-09-06","27"
|
||||
"2016-09-07","8"
|
||||
"2016-09-08","16"
|
||||
"2016-09-09","21"
|
||||
"2016-09-12","20"
|
||||
"2016-09-13","36"
|
||||
"2016-09-14","14"
|
||||
"2016-09-15","19"
|
||||
"2016-09-16","8"
|
||||
"2016-09-19","1"
|
||||
"2016-09-20","21"
|
||||
"2016-09-21","2"
|
||||
"2016-09-22","8"
|
||||
"2016-09-23","15"
|
||||
"2016-09-26","10"
|
||||
"2016-09-27","21"
|
||||
"2016-09-28","3"
|
||||
"2016-09-29","10"
|
||||
"2016-09-30","12"
|
||||
"2016-10-03","36"
|
||||
"2016-10-04","22"
|
||||
"2016-10-05","33"
|
||||
"2016-10-06","30"
|
||||
"2016-10-07","11"
|
||||
"2016-10-10","30"
|
||||
"2016-10-11","27"
|
||||
"2016-10-12","30"
|
||||
"2016-10-13","31"
|
||||
"2016-10-14","23"
|
||||
"2016-10-17","46"
|
||||
"2016-10-18","28"
|
||||
"2016-10-19","32"
|
||||
"2016-10-20","33"
|
||||
"2016-10-21","16"
|
||||
"2016-10-24","29"
|
||||
"2016-10-25","31"
|
||||
"2016-10-26","40"
|
||||
"2016-10-27","9"
|
||||
"2016-10-28","16"
|
||||
"2016-11-01","6"
|
||||
"2016-11-02","1"
|
||||
"2016-11-03","23"
|
||||
"2016-11-04","12"
|
||||
"2016-11-05","3"
|
||||
"2016-11-07","29"
|
||||
"2016-11-08","57"
|
||||
"2016-11-09","28"
|
||||
"2016-11-10","32"
|
||||
"2016-11-14","25"
|
||||
"2016-11-16","20"
|
||||
"2016-11-17","25"
|
||||
"2016-11-18","24"
|
||||
"2016-11-21","24"
|
||||
"2016-11-22","31"
|
||||
"2016-11-23","20"
|
||||
"2016-11-24","34"
|
||||
"2016-11-25","19"
|
||||
"2016-11-28","26"
|
||||
"2016-11-29","31"
|
||||
"2016-11-30","30"
|
||||
"2016-12-01","26"
|
||||
"2016-12-02","5"
|
||||
"2016-12-05","11"
|
||||
"2016-12-06","26"
|
||||
"2016-12-07","21"
|
||||
"2016-12-08","29"
|
||||
"2016-12-09","20"
|
||||
"2016-12-12","27"
|
||||
"2016-12-13","33"
|
||||
"2016-12-14","20"
|
||||
"2016-12-15","28"
|
||||
"2016-12-16","30"
|
||||
"2016-12-19","21"
|
||||
"2016-12-20","15"
|
||||
"2016-12-21","10"
|
||||
"2016-12-22","18"
|
||||
"2016-12-23","15"
|
||||
"2016-12-26","1"
|
||||
"2017-01-03","2"
|
||||
"2017-01-04","10"
|
||||
"2017-01-05","9"
|
||||
"2017-01-06","2"
|
||||
"2017-01-09","6"
|
||||
"2017-01-10","7"
|
||||
"2017-01-11","1"
|
||||
"2017-01-12","11"
|
||||
"2017-01-13","2"
|
||||
"2017-01-16","7"
|
||||
"2017-01-17","4"
|
||||
"2017-01-18","6"
|
||||
"2017-01-19","6"
|
||||
"2017-01-20","1"
|
||||
"2017-01-23","11"
|
||||
"2017-01-24","12"
|
||||
"2017-01-25","11"
|
||||
"2017-01-26","1"
|
||||
"2017-01-27","5"
|
||||
"2017-01-30","4"
|
||||
"2017-01-31","9"
|
||||
"2017-02-01","22"
|
||||
"2017-02-02","3"
|
||||
"2017-02-03","2"
|
||||
"2017-02-06","21"
|
||||
"2017-02-07","9"
|
||||
"2017-02-08","5"
|
||||
"2017-02-09","8"
|
||||
"2017-02-10","5"
|
||||
"2017-02-13","25"
|
||||
"2017-02-14","19"
|
||||
"2017-02-15","13"
|
||||
"2017-02-16","12"
|
||||
"2017-02-17","8"
|
||||
"2017-02-20","24"
|
||||
"2017-02-21","28"
|
||||
"2017-02-22","16"
|
||||
"2017-02-23","33"
|
||||
"2017-02-24","12"
|
||||
"2017-02-27","11"
|
||||
"2017-02-28","27"
|
||||
"2017-03-01","27"
|
||||
"2017-03-02","24"
|
||||
"2017-03-03","8"
|
||||
"2017-03-06","19"
|
||||
"2017-03-07","32"
|
||||
"2017-03-08","35"
|
||||
"2017-03-09","12"
|
||||
"2017-03-10","10"
|
||||
"2017-03-13","20"
|
||||
"2017-03-14","6"
|
||||
"2017-03-15","9"
|
||||
"2017-03-16","19"
|
||||
"2017-03-17","8"
|
||||
"2017-03-20","18"
|
||||
"2017-03-21","33"
|
||||
"2017-03-22","41"
|
||||
"2017-03-23","27"
|
||||
"2017-03-27","28"
|
||||
"2017-03-28","17"
|
||||
"2017-03-29","34"
|
||||
"2017-03-30","21"
|
||||
"2017-03-31","18"
|
||||
"2017-04-04","22"
|
||||
"2017-04-05","11"
|
||||
"2017-04-06","16"
|
||||
"2017-04-07","1"
|
||||
"2017-04-10","12"
|
||||
"2017-04-11","15"
|
||||
"2017-04-12","11"
|
||||
"2017-04-13","4"
|
||||
"2017-04-14","9"
|
||||
"2017-04-18","29"
|
||||
"2017-04-19","17"
|
||||
"2017-04-20","25"
|
||||
"2017-04-21","16"
|
||||
"2017-04-24","8"
|
||||
"2017-04-25","23"
|
||||
"2017-04-26","11"
|
||||
"2017-04-27","13"
|
||||
"2017-04-28","13"
|
||||
"2017-05-02","30"
|
||||
"2017-05-03","25"
|
||||
"2017-05-04","20"
|
||||
"2017-05-05","38"
|
||||
"2017-05-08","22"
|
||||
"2017-05-09","17"
|
||||
"2017-05-10","10"
|
||||
"2017-05-11","19"
|
||||
"2017-05-12","19"
|
||||
"2017-05-15","28"
|
||||
"2017-05-16","32"
|
||||
"2017-05-17","29"
|
||||
"2017-05-18","68"
|
||||
"2017-05-19","13"
|
||||
"2017-05-22","28"
|
||||
"2017-05-23","14"
|
||||
"2017-05-24","21"
|
||||
"2017-05-29","8"
|
||||
"2017-05-30","6"
|
||||
"2017-05-31","6"
|
||||
"2017-06-01","4"
|
||||
"2017-06-02","14"
|
||||
"2017-06-06","9"
|
||||
"2017-06-07","8"
|
||||
"2017-06-08","3"
|
||||
"2017-06-09","4"
|
||||
"2017-06-12","5"
|
||||
"2017-06-13","3"
|
||||
"2017-06-14","1"
|
||||
"2017-06-15","1"
|
||||
"2017-06-19","6"
|
||||
"2017-06-20","3"
|
||||
"2017-06-21","3"
|
||||
"2017-06-22","2"
|
||||
"2017-06-23","5"
|
||||
"2017-06-26","14"
|
||||
"2017-06-27","3"
|
||||
"2017-06-28","4"
|
||||
"2017-06-29","3"
|
||||
"2017-06-30","3"
|
||||
"2017-07-03","2"
|
||||
"2017-07-04","4"
|
||||
"2017-07-05","11"
|
||||
"2017-07-06","2"
|
||||
"2017-07-07","2"
|
||||
"2017-07-12","2"
|
||||
"2017-07-13","1"
|
||||
"2017-07-24","2"
|
||||
"2017-07-25","2"
|
||||
"2017-07-26","1"
|
||||
"2017-07-27","8"
|
||||
"2017-07-31","20"
|
||||
"2017-08-01","19"
|
||||
"2017-08-02","5"
|
||||
"2017-08-03","4"
|
||||
"2017-08-04","4"
|
||||
"2017-08-07","6"
|
||||
"2017-08-08","7"
|
||||
"2017-08-09","12"
|
||||
"2017-08-10","27"
|
||||
"2017-08-11","2"
|
||||
"2017-08-15","2"
|
||||
"2017-08-16","1"
|
||||
"2017-08-18","1"
|
||||
"2017-08-29","2"
|
||||
"2017-08-31","1"
|
||||
"2017-09-04","2"
|
||||
"2017-09-05","7"
|
||||
"2017-09-06","1"
|
||||
"2017-09-07","16"
|
||||
"2017-09-08","1"
|
||||
"2017-09-11","13"
|
||||
"2017-09-12","6"
|
||||
"2017-09-13","5"
|
||||
"2017-09-14","4"
|
||||
"2017-09-18","9"
|
||||
"2017-09-19","5"
|
||||
"2017-09-20","7"
|
||||
"2017-09-21","2"
|
||||
"2017-09-22","20"
|
||||
"2017-09-25","9"
|
||||
"2017-09-26","7"
|
||||
"2017-09-27","4"
|
||||
"2017-09-28","11"
|
||||
"2017-09-29","3"
|
||||
"2017-10-02","80"
|
||||
"2017-10-03","18"
|
||||
"2017-10-04","32"
|
||||
"2017-10-05","36"
|
||||
"2017-10-06","8"
|
||||
"2017-10-09","14"
|
||||
"2017-10-10","32"
|
||||
"2017-10-11","13"
|
||||
"2017-10-12","27"
|
||||
"2017-10-13","13"
|
||||
"2017-10-16","24"
|
||||
"2017-10-17","11"
|
||||
"2017-10-18","14"
|
||||
"2017-10-19","57"
|
||||
"2017-10-20","13"
|
||||
"2017-10-23","28"
|
||||
"2017-10-24","26"
|
||||
"2017-10-25","31"
|
||||
"2017-10-26","25"
|
||||
"2017-10-27","27"
|
||||
"2017-10-28","4"
|
||||
"2017-10-30","30"
|
||||
"2017-10-31","20"
|
||||
"2017-11-06","23"
|
||||
"2017-11-07","23"
|
||||
"2017-11-08","14"
|
||||
"2017-11-09","25"
|
||||
"2017-11-10","9"
|
||||
"2017-11-13","35"
|
||||
"2017-11-14","23"
|
||||
"2017-11-16","19"
|
||||
"2017-11-17","8"
|
||||
"2017-11-20","31"
|
||||
"2017-11-21","25"
|
||||
"2017-11-22","11"
|
||||
"2017-11-23","13"
|
||||
"2017-11-24","10"
|
||||
"2017-11-27","11"
|
||||
"2017-11-28","11"
|
||||
"2017-11-29","17"
|
||||
"2017-11-30","28"
|
||||
"2017-12-01","2"
|
||||
"2017-12-04","11"
|
||||
"2017-12-05","7"
|
||||
"2017-12-06","17"
|
||||
"2017-12-07","11"
|
||||
"2017-12-08","13"
|
||||
"2017-12-11","19"
|
||||
"2017-12-12","13"
|
||||
"2017-12-13","14"
|
||||
"2017-12-14","9"
|
||||
"2017-12-15","8"
|
||||
"2017-12-18","24"
|
||||
"2017-12-19","26"
|
||||
"2017-12-20","15"
|
||||
"2017-12-21","18"
|
||||
"2017-12-22","11"
|
||||
"2018-01-02","1"
|
||||
"2018-01-03","8"
|
||||
"2018-01-04","2"
|
||||
"2018-01-05","7"
|
||||
"2018-01-08","13"
|
||||
"2018-01-09","1"
|
||||
"2018-01-10","8"
|
||||
"2018-01-11","4"
|
||||
"2018-01-12","11"
|
||||
"2018-01-15","5"
|
||||
"2018-01-16","2"
|
||||
"2018-01-17","4"
|
||||
"2018-01-18","4"
|
||||
"2018-01-19","4"
|
||||
"2018-01-22","2"
|
||||
"2018-01-23","5"
|
||||
"2018-01-24","1"
|
||||
"2018-01-26","1"
|
||||
"2018-01-29","5"
|
||||
"2018-01-31","3"
|
||||
"2018-02-01","4"
|
||||
"2018-02-08","3"
|
||||
"2018-02-09","3"
|
||||
"2018-02-12","17"
|
||||
"2018-02-13","13"
|
||||
"2018-02-14","12"
|
||||
"2018-02-15","25"
|
||||
"2018-02-16","5"
|
||||
"2018-02-19","25"
|
||||
"2018-02-20","22"
|
||||
"2018-02-21","23"
|
||||
"2018-02-22","20"
|
||||
"2018-02-23","7"
|
||||
"2018-02-26","29"
|
||||
"2018-02-27","41"
|
||||
"2018-02-28","44"
|
||||
"2018-03-01","58"
|
||||
"2018-03-02","16"
|
||||
"2018-03-05","23"
|
||||
"2018-03-06","27"
|
||||
"2018-03-07","35"
|
||||
"2018-03-08","27"
|
||||
"2018-03-09","21"
|
||||
"2018-03-12","24"
|
||||
"2018-03-13","25"
|
||||
"2018-03-14","6"
|
||||
"2018-03-15","16"
|
||||
"2018-03-16","27"
|
||||
"2018-03-19","16"
|
||||
"2018-03-20","18"
|
||||
"2018-03-21","24"
|
||||
"2018-03-22","53"
|
||||
"2018-03-26","26"
|
||||
"2018-03-27","27"
|
||||
"2018-03-28","27"
|
||||
"2018-03-29","45"
|
||||
"2018-03-30","3"
|
||||
"2018-04-03","3"
|
||||
"2018-04-04","1"
|
||||
"2018-04-09","8"
|
||||
"2018-04-10","2"
|
||||
"2018-04-11","33"
|
||||
"2018-04-12","2"
|
||||
"2018-04-13","1"
|
||||
"2018-04-15","72"
|
||||
"2018-04-16","36"
|
||||
"2018-04-17","36"
|
||||
"2018-04-18","22"
|
|
507
content/csvdata/tap-orders-users-day.csv
Normal file
507
content/csvdata/tap-orders-users-day.csv
Normal file
|
@ -0,0 +1,507 @@
|
|||
"created_at","count"
|
||||
"2016-02-10","9"
|
||||
"2016-02-11","20"
|
||||
"2016-02-12","13"
|
||||
"2016-02-13","1"
|
||||
"2016-02-15","9"
|
||||
"2016-02-16","18"
|
||||
"2016-02-17","15"
|
||||
"2016-02-18","14"
|
||||
"2016-02-19","9"
|
||||
"2016-02-22","17"
|
||||
"2016-02-23","19"
|
||||
"2016-02-24","20"
|
||||
"2016-02-25","17"
|
||||
"2016-02-26","11"
|
||||
"2016-02-29","11"
|
||||
"2016-03-01","18"
|
||||
"2016-03-02","15"
|
||||
"2016-03-03","18"
|
||||
"2016-03-04","11"
|
||||
"2016-03-07","15"
|
||||
"2016-03-08","12"
|
||||
"2016-03-09","13"
|
||||
"2016-03-10","12"
|
||||
"2016-03-11","8"
|
||||
"2016-03-14","16"
|
||||
"2016-03-15","25"
|
||||
"2016-03-16","11"
|
||||
"2016-03-17","14"
|
||||
"2016-03-21","14"
|
||||
"2016-03-22","15"
|
||||
"2016-03-23","16"
|
||||
"2016-03-24","18"
|
||||
"2016-03-25","7"
|
||||
"2016-03-29","8"
|
||||
"2016-03-30","12"
|
||||
"2016-03-31","7"
|
||||
"2016-04-01","13"
|
||||
"2016-04-04","7"
|
||||
"2016-04-05","5"
|
||||
"2016-04-06","13"
|
||||
"2016-04-07","22"
|
||||
"2016-04-08","6"
|
||||
"2016-04-11","14"
|
||||
"2016-04-12","16"
|
||||
"2016-04-13","13"
|
||||
"2016-04-14","14"
|
||||
"2016-04-15","11"
|
||||
"2016-04-18","14"
|
||||
"2016-04-19","12"
|
||||
"2016-04-20","7"
|
||||
"2016-04-21","6"
|
||||
"2016-04-25","15"
|
||||
"2016-04-26","17"
|
||||
"2016-04-27","14"
|
||||
"2016-04-28","15"
|
||||
"2016-04-29","8"
|
||||
"2016-05-02","16"
|
||||
"2016-05-03","17"
|
||||
"2016-05-04","9"
|
||||
"2016-05-09","13"
|
||||
"2016-05-10","11"
|
||||
"2016-05-11","16"
|
||||
"2016-05-12","15"
|
||||
"2016-05-13","6"
|
||||
"2016-05-17","8"
|
||||
"2016-05-18","2"
|
||||
"2016-05-19","4"
|
||||
"2016-05-20","1"
|
||||
"2016-05-23","4"
|
||||
"2016-05-24","2"
|
||||
"2016-05-25","5"
|
||||
"2016-05-26","3"
|
||||
"2016-05-27","6"
|
||||
"2016-05-30","4"
|
||||
"2016-05-31","5"
|
||||
"2016-06-01","2"
|
||||
"2016-06-02","5"
|
||||
"2016-06-03","1"
|
||||
"2016-06-06","3"
|
||||
"2016-06-07","5"
|
||||
"2016-06-08","4"
|
||||
"2016-06-09","6"
|
||||
"2016-06-10","3"
|
||||
"2016-06-13","5"
|
||||
"2016-06-14","4"
|
||||
"2016-06-15","3"
|
||||
"2016-06-16","7"
|
||||
"2016-06-17","3"
|
||||
"2016-06-20","5"
|
||||
"2016-06-21","10"
|
||||
"2016-06-22","8"
|
||||
"2016-06-23","4"
|
||||
"2016-06-24","8"
|
||||
"2016-06-27","10"
|
||||
"2016-06-28","4"
|
||||
"2016-06-29","6"
|
||||
"2016-06-30","2"
|
||||
"2016-07-01","2"
|
||||
"2016-07-04","1"
|
||||
"2016-07-05","9"
|
||||
"2016-07-06","5"
|
||||
"2016-07-07","6"
|
||||
"2016-07-08","2"
|
||||
"2016-07-12","10"
|
||||
"2016-07-13","2"
|
||||
"2016-07-14","2"
|
||||
"2016-07-15","2"
|
||||
"2016-07-25","5"
|
||||
"2016-07-26","11"
|
||||
"2016-07-27","7"
|
||||
"2016-07-28","4"
|
||||
"2016-07-29","4"
|
||||
"2016-08-01","6"
|
||||
"2016-08-02","12"
|
||||
"2016-08-03","6"
|
||||
"2016-08-04","9"
|
||||
"2016-08-05","4"
|
||||
"2016-08-08","10"
|
||||
"2016-08-09","11"
|
||||
"2016-08-10","6"
|
||||
"2016-08-11","5"
|
||||
"2016-08-12","8"
|
||||
"2016-08-16","13"
|
||||
"2016-08-17","3"
|
||||
"2016-08-18","2"
|
||||
"2016-08-19","4"
|
||||
"2016-08-22","3"
|
||||
"2016-08-23","11"
|
||||
"2016-08-24","2"
|
||||
"2016-08-25","8"
|
||||
"2016-08-26","9"
|
||||
"2016-08-29","7"
|
||||
"2016-08-30","9"
|
||||
"2016-08-31","6"
|
||||
"2016-09-01","5"
|
||||
"2016-09-02","5"
|
||||
"2016-09-05","4"
|
||||
"2016-09-06","10"
|
||||
"2016-09-07","5"
|
||||
"2016-09-08","6"
|
||||
"2016-09-09","9"
|
||||
"2016-09-12","9"
|
||||
"2016-09-13","15"
|
||||
"2016-09-14","6"
|
||||
"2016-09-15","9"
|
||||
"2016-09-16","5"
|
||||
"2016-09-19","1"
|
||||
"2016-09-20","10"
|
||||
"2016-09-21","2"
|
||||
"2016-09-22","5"
|
||||
"2016-09-23","9"
|
||||
"2016-09-26","4"
|
||||
"2016-09-27","12"
|
||||
"2016-09-28","2"
|
||||
"2016-09-29","8"
|
||||
"2016-09-30","6"
|
||||
"2016-10-03","19"
|
||||
"2016-10-04","9"
|
||||
"2016-10-05","14"
|
||||
"2016-10-06","15"
|
||||
"2016-10-07","5"
|
||||
"2016-10-10","12"
|
||||
"2016-10-11","11"
|
||||
"2016-10-12","14"
|
||||
"2016-10-13","14"
|
||||
"2016-10-14","11"
|
||||
"2016-10-17","13"
|
||||
"2016-10-18","14"
|
||||
"2016-10-19","15"
|
||||
"2016-10-20","18"
|
||||
"2016-10-21","11"
|
||||
"2016-10-24","13"
|
||||
"2016-10-25","9"
|
||||
"2016-10-26","16"
|
||||
"2016-10-27","5"
|
||||
"2016-10-28","6"
|
||||
"2016-11-01","4"
|
||||
"2016-11-02","1"
|
||||
"2016-11-03","13"
|
||||
"2016-11-04","7"
|
||||
"2016-11-05","2"
|
||||
"2016-11-07","16"
|
||||
"2016-11-08","15"
|
||||
"2016-11-09","13"
|
||||
"2016-11-10","14"
|
||||
"2016-11-14","13"
|
||||
"2016-11-16","10"
|
||||
"2016-11-17","10"
|
||||
"2016-11-18","8"
|
||||
"2016-11-21","11"
|
||||
"2016-11-22","8"
|
||||
"2016-11-23","10"
|
||||
"2016-11-24","15"
|
||||
"2016-11-25","8"
|
||||
"2016-11-28","10"
|
||||
"2016-11-29","11"
|
||||
"2016-11-30","15"
|
||||
"2016-12-01","12"
|
||||
"2016-12-02","5"
|
||||
"2016-12-05","9"
|
||||
"2016-12-06","17"
|
||||
"2016-12-07","15"
|
||||
"2016-12-08","14"
|
||||
"2016-12-09","10"
|
||||
"2016-12-12","16"
|
||||
"2016-12-13","15"
|
||||
"2016-12-14","13"
|
||||
"2016-12-15","14"
|
||||
"2016-12-16","13"
|
||||
"2016-12-19","8"
|
||||
"2016-12-20","8"
|
||||
"2016-12-21","6"
|
||||
"2016-12-22","8"
|
||||
"2016-12-23","7"
|
||||
"2016-12-26","1"
|
||||
"2017-01-03","2"
|
||||
"2017-01-04","4"
|
||||
"2017-01-05","4"
|
||||
"2017-01-06","1"
|
||||
"2017-01-09","2"
|
||||
"2017-01-10","4"
|
||||
"2017-01-11","1"
|
||||
"2017-01-12","6"
|
||||
"2017-01-13","1"
|
||||
"2017-01-16","4"
|
||||
"2017-01-17","2"
|
||||
"2017-01-18","3"
|
||||
"2017-01-19","3"
|
||||
"2017-01-20","1"
|
||||
"2017-01-23","7"
|
||||
"2017-01-24","6"
|
||||
"2017-01-25","4"
|
||||
"2017-01-26","1"
|
||||
"2017-01-27","4"
|
||||
"2017-01-30","3"
|
||||
"2017-01-31","5"
|
||||
"2017-02-01","5"
|
||||
"2017-02-02","2"
|
||||
"2017-02-03","1"
|
||||
"2017-02-06","11"
|
||||
"2017-02-07","3"
|
||||
"2017-02-08","2"
|
||||
"2017-02-09","5"
|
||||
"2017-02-10","4"
|
||||
"2017-02-13","11"
|
||||
"2017-02-14","11"
|
||||
"2017-02-15","7"
|
||||
"2017-02-16","9"
|
||||
"2017-02-17","6"
|
||||
"2017-02-20","12"
|
||||
"2017-02-21","15"
|
||||
"2017-02-22","10"
|
||||
"2017-02-23","15"
|
||||
"2017-02-24","7"
|
||||
"2017-02-27","7"
|
||||
"2017-02-28","14"
|
||||
"2017-03-01","15"
|
||||
"2017-03-02","13"
|
||||
"2017-03-03","5"
|
||||
"2017-03-06","11"
|
||||
"2017-03-07","16"
|
||||
"2017-03-08","16"
|
||||
"2017-03-09","9"
|
||||
"2017-03-10","4"
|
||||
"2017-03-13","13"
|
||||
"2017-03-14","4"
|
||||
"2017-03-15","5"
|
||||
"2017-03-16","11"
|
||||
"2017-03-17","4"
|
||||
"2017-03-20","11"
|
||||
"2017-03-21","14"
|
||||
"2017-03-22","10"
|
||||
"2017-03-23","9"
|
||||
"2017-03-27","15"
|
||||
"2017-03-28","9"
|
||||
"2017-03-29","15"
|
||||
"2017-03-30","15"
|
||||
"2017-03-31","8"
|
||||
"2017-04-04","11"
|
||||
"2017-04-05","5"
|
||||
"2017-04-06","7"
|
||||
"2017-04-07","1"
|
||||
"2017-04-10","5"
|
||||
"2017-04-11","8"
|
||||
"2017-04-12","7"
|
||||
"2017-04-13","3"
|
||||
"2017-04-14","5"
|
||||
"2017-04-18","9"
|
||||
"2017-04-19","12"
|
||||
"2017-04-20","12"
|
||||
"2017-04-21","10"
|
||||
"2017-04-24","5"
|
||||
"2017-04-25","11"
|
||||
"2017-04-26","8"
|
||||
"2017-04-27","9"
|
||||
"2017-04-28","7"
|
||||
"2017-05-02","15"
|
||||
"2017-05-03","11"
|
||||
"2017-05-04","10"
|
||||
"2017-05-05","9"
|
||||
"2017-05-08","12"
|
||||
"2017-05-09","11"
|
||||
"2017-05-10","5"
|
||||
"2017-05-11","10"
|
||||
"2017-05-12","8"
|
||||
"2017-05-15","12"
|
||||
"2017-05-16","18"
|
||||
"2017-05-17","12"
|
||||
"2017-05-18","17"
|
||||
"2017-05-19","6"
|
||||
"2017-05-22","11"
|
||||
"2017-05-23","8"
|
||||
"2017-05-24","8"
|
||||
"2017-05-29","6"
|
||||
"2017-05-30","3"
|
||||
"2017-05-31","4"
|
||||
"2017-06-01","4"
|
||||
"2017-06-02","8"
|
||||
"2017-06-06","5"
|
||||
"2017-06-07","6"
|
||||
"2017-06-08","3"
|
||||
"2017-06-09","3"
|
||||
"2017-06-12","2"
|
||||
"2017-06-13","2"
|
||||
"2017-06-14","1"
|
||||
"2017-06-15","1"
|
||||
"2017-06-19","2"
|
||||
"2017-06-20","1"
|
||||
"2017-06-21","1"
|
||||
"2017-06-22","2"
|
||||
"2017-06-23","2"
|
||||
"2017-06-26","4"
|
||||
"2017-06-27","2"
|
||||
"2017-06-28","4"
|
||||
"2017-06-29","3"
|
||||
"2017-06-30","3"
|
||||
"2017-07-03","2"
|
||||
"2017-07-04","3"
|
||||
"2017-07-05","6"
|
||||
"2017-07-06","2"
|
||||
"2017-07-07","2"
|
||||
"2017-07-12","2"
|
||||
"2017-07-13","1"
|
||||
"2017-07-24","2"
|
||||
"2017-07-25","1"
|
||||
"2017-07-26","1"
|
||||
"2017-07-27","5"
|
||||
"2017-07-31","11"
|
||||
"2017-08-01","4"
|
||||
"2017-08-02","3"
|
||||
"2017-08-03","3"
|
||||
"2017-08-04","2"
|
||||
"2017-08-07","4"
|
||||
"2017-08-08","5"
|
||||
"2017-08-09","3"
|
||||
"2017-08-10","5"
|
||||
"2017-08-11","2"
|
||||
"2017-08-15","1"
|
||||
"2017-08-16","1"
|
||||
"2017-08-18","1"
|
||||
"2017-08-29","1"
|
||||
"2017-08-31","1"
|
||||
"2017-09-04","1"
|
||||
"2017-09-05","3"
|
||||
"2017-09-06","1"
|
||||
"2017-09-07","6"
|
||||
"2017-09-08","1"
|
||||
"2017-09-11","6"
|
||||
"2017-09-12","3"
|
||||
"2017-09-13","2"
|
||||
"2017-09-14","2"
|
||||
"2017-09-18","6"
|
||||
"2017-09-19","3"
|
||||
"2017-09-20","3"
|
||||
"2017-09-21","2"
|
||||
"2017-09-22","10"
|
||||
"2017-09-25","8"
|
||||
"2017-09-26","4"
|
||||
"2017-09-27","3"
|
||||
"2017-09-28","9"
|
||||
"2017-09-29","3"
|
||||
"2017-10-02","15"
|
||||
"2017-10-03","14"
|
||||
"2017-10-04","12"
|
||||
"2017-10-05","18"
|
||||
"2017-10-06","7"
|
||||
"2017-10-09","10"
|
||||
"2017-10-10","14"
|
||||
"2017-10-11","10"
|
||||
"2017-10-12","19"
|
||||
"2017-10-13","8"
|
||||
"2017-10-16","13"
|
||||
"2017-10-17","11"
|
||||
"2017-10-18","10"
|
||||
"2017-10-19","22"
|
||||
"2017-10-20","7"
|
||||
"2017-10-23","17"
|
||||
"2017-10-24","14"
|
||||
"2017-10-25","13"
|
||||
"2017-10-26","13"
|
||||
"2017-10-27","12"
|
||||
"2017-10-28","2"
|
||||
"2017-10-30","17"
|
||||
"2017-10-31","9"
|
||||
"2017-11-06","14"
|
||||
"2017-11-07","13"
|
||||
"2017-11-08","11"
|
||||
"2017-11-09","13"
|
||||
"2017-11-10","8"
|
||||
"2017-11-13","19"
|
||||
"2017-11-14","11"
|
||||
"2017-11-16","10"
|
||||
"2017-11-17","6"
|
||||
"2017-11-20","20"
|
||||
"2017-11-21","16"
|
||||
"2017-11-22","7"
|
||||
"2017-11-23","10"
|
||||
"2017-11-24","10"
|
||||
"2017-11-27","9"
|
||||
"2017-11-28","7"
|
||||
"2017-11-29","8"
|
||||
"2017-11-30","16"
|
||||
"2017-12-01","2"
|
||||
"2017-12-04","7"
|
||||
"2017-12-05","6"
|
||||
"2017-12-06","10"
|
||||
"2017-12-07","8"
|
||||
"2017-12-08","7"
|
||||
"2017-12-11","11"
|
||||
"2017-12-12","6"
|
||||
"2017-12-13","7"
|
||||
"2017-12-14","7"
|
||||
"2017-12-15","6"
|
||||
"2017-12-18","10"
|
||||
"2017-12-19","14"
|
||||
"2017-12-20","9"
|
||||
"2017-12-21","11"
|
||||
"2017-12-22","5"
|
||||
"2018-01-02","1"
|
||||
"2018-01-03","6"
|
||||
"2018-01-04","2"
|
||||
"2018-01-05","4"
|
||||
"2018-01-08","6"
|
||||
"2018-01-09","1"
|
||||
"2018-01-10","3"
|
||||
"2018-01-11","2"
|
||||
"2018-01-12","4"
|
||||
"2018-01-15","3"
|
||||
"2018-01-16","2"
|
||||
"2018-01-17","4"
|
||||
"2018-01-18","4"
|
||||
"2018-01-19","4"
|
||||
"2018-01-22","2"
|
||||
"2018-01-23","3"
|
||||
"2018-01-24","1"
|
||||
"2018-01-26","1"
|
||||
"2018-01-29","4"
|
||||
"2018-01-31","2"
|
||||
"2018-02-01","2"
|
||||
"2018-02-08","3"
|
||||
"2018-02-09","3"
|
||||
"2018-02-12","9"
|
||||
"2018-02-13","8"
|
||||
"2018-02-14","8"
|
||||
"2018-02-15","17"
|
||||
"2018-02-16","4"
|
||||
"2018-02-19","15"
|
||||
"2018-02-20","13"
|
||||
"2018-02-21","13"
|
||||
"2018-02-22","11"
|
||||
"2018-02-23","5"
|
||||
"2018-02-26","18"
|
||||
"2018-02-27","19"
|
||||
"2018-02-28","18"
|
||||
"2018-03-01","26"
|
||||
"2018-03-02","12"
|
||||
"2018-03-05","12"
|
||||
"2018-03-06","16"
|
||||
"2018-03-07","15"
|
||||
"2018-03-08","13"
|
||||
"2018-03-09","9"
|
||||
"2018-03-12","10"
|
||||
"2018-03-13","13"
|
||||
"2018-03-14","4"
|
||||
"2018-03-15","9"
|
||||
"2018-03-16","11"
|
||||
"2018-03-19","10"
|
||||
"2018-03-20","11"
|
||||
"2018-03-21","12"
|
||||
"2018-03-22","20"
|
||||
"2018-03-26","13"
|
||||
"2018-03-27","14"
|
||||
"2018-03-28","13"
|
||||
"2018-03-29","23"
|
||||
"2018-03-30","3"
|
||||
"2018-04-03","3"
|
||||
"2018-04-04","1"
|
||||
"2018-04-09","4"
|
||||
"2018-04-10","2"
|
||||
"2018-04-11","11"
|
||||
"2018-04-12","2"
|
||||
"2018-04-13","1"
|
||||
"2018-04-15","24"
|
||||
"2018-04-16","18"
|
||||
"2018-04-17","19"
|
||||
"2018-04-18","14"
|
|
|
@ -1,5 +1,5 @@
|
|||
require 'html_press'
|
||||
require 'htmlcompressor'
|
||||
|
||||
Nanoc::Filter.define(:html_press) do |content, _params|
|
||||
HtmlPress.press content
|
||||
HtmlCompressor::Compressor.new.compress content
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue