Eet en drankgewoonten in Zeus @Miaoulo, @iliclaey
This commit is contained in:
parent
13dae61931
commit
8e85150e86
22 changed files with 6689 additions and 29 deletions
5
Gemfile
5
Gemfile
|
@ -3,6 +3,8 @@ source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'nanoc'
|
gem 'nanoc'
|
||||||
|
|
||||||
|
gem 'uglifier', '>= 4.0.0'
|
||||||
|
|
||||||
# General filtering
|
# General filtering
|
||||||
gem 'coffee-script'
|
gem 'coffee-script'
|
||||||
gem 'icalendar' # ical files
|
gem 'icalendar' # ical files
|
||||||
|
@ -33,7 +35,8 @@ end
|
||||||
group :production do
|
group :production do
|
||||||
# Autoprefixing for class
|
# Autoprefixing for class
|
||||||
gem 'autoprefixer-rails'
|
gem 'autoprefixer-rails'
|
||||||
gem 'html_press'
|
gem 'htmlcompressor'
|
||||||
|
gem 'babel-transpiler'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :nanoc do
|
group :nanoc do
|
||||||
|
|
43
Gemfile.lock
43
Gemfile.lock
|
@ -3,10 +3,14 @@ GEM
|
||||||
specs:
|
specs:
|
||||||
addressable (2.5.2)
|
addressable (2.5.2)
|
||||||
public_suffix (>= 2.0.2, < 4.0)
|
public_suffix (>= 2.0.2, < 4.0)
|
||||||
adsf (1.4.0)
|
adsf (1.4.1)
|
||||||
rack (>= 1.0.0, < 3.0.0)
|
rack (>= 1.0.0, < 3.0.0)
|
||||||
autoprefixer-rails (7.2.5)
|
autoprefixer-rails (8.5.0)
|
||||||
execjs
|
execjs
|
||||||
|
babel-source (5.8.35)
|
||||||
|
babel-transpiler (0.7.0)
|
||||||
|
babel-source (>= 4.0, < 6)
|
||||||
|
execjs (~> 2.0)
|
||||||
builder (3.2.3)
|
builder (3.2.3)
|
||||||
coderay (1.1.2)
|
coderay (1.1.2)
|
||||||
coffee-script (2.4.1)
|
coffee-script (2.4.1)
|
||||||
|
@ -17,17 +21,13 @@ GEM
|
||||||
concurrent-ruby (1.0.5)
|
concurrent-ruby (1.0.5)
|
||||||
cri (2.10.1)
|
cri (2.10.1)
|
||||||
colored (~> 1.2)
|
colored (~> 1.2)
|
||||||
css_press (0.3.2)
|
|
||||||
csspool-st (= 3.1.2)
|
|
||||||
json
|
|
||||||
csspool-st (3.1.2)
|
|
||||||
ddmemoize (1.0.0)
|
ddmemoize (1.0.0)
|
||||||
ddmetrics (~> 1.0)
|
ddmetrics (~> 1.0)
|
||||||
ref (~> 2.0)
|
ref (~> 2.0)
|
||||||
ddmetrics (1.0.0)
|
ddmetrics (1.0.0)
|
||||||
ddplugin (1.0.2)
|
ddplugin (1.0.2)
|
||||||
execjs (2.7.0)
|
execjs (2.7.0)
|
||||||
ffi (1.9.18)
|
ffi (1.9.23)
|
||||||
formatador (0.2.5)
|
formatador (0.2.5)
|
||||||
guard (2.14.2)
|
guard (2.14.2)
|
||||||
formatador (>= 0.2.4)
|
formatador (>= 0.2.4)
|
||||||
|
@ -46,11 +46,7 @@ GEM
|
||||||
hamster (3.0.0)
|
hamster (3.0.0)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
highline (1.7.10)
|
highline (1.7.10)
|
||||||
html_press (0.8.2)
|
htmlcompressor (0.4.0)
|
||||||
htmlentities
|
|
||||||
multi_css (>= 0.1.0)
|
|
||||||
multi_js (>= 0.1.0)
|
|
||||||
htmlentities (4.3.4)
|
|
||||||
icalendar (2.4.1)
|
icalendar (2.4.1)
|
||||||
json (2.1.0)
|
json (2.1.0)
|
||||||
kramdown (1.16.2)
|
kramdown (1.16.2)
|
||||||
|
@ -59,13 +55,9 @@ GEM
|
||||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
rb-inotify (~> 0.9, >= 0.9.7)
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
ruby_dep (~> 1.2)
|
ruby_dep (~> 1.2)
|
||||||
lumberjack (1.0.12)
|
lumberjack (1.0.13)
|
||||||
method_source (0.9.0)
|
method_source (0.9.0)
|
||||||
mini_portile2 (2.3.0)
|
mini_portile2 (2.3.0)
|
||||||
multi_css (0.1.0)
|
|
||||||
css_press
|
|
||||||
multi_js (0.1.0)
|
|
||||||
uglifier (~> 2)
|
|
||||||
nanoc (4.9.2)
|
nanoc (4.9.2)
|
||||||
addressable (~> 2.5)
|
addressable (~> 2.5)
|
||||||
cri (~> 2.8)
|
cri (~> 2.8)
|
||||||
|
@ -78,7 +70,7 @@ GEM
|
||||||
slow_enumerator_tools (~> 1.0)
|
slow_enumerator_tools (~> 1.0)
|
||||||
tomlrb (~> 1.2)
|
tomlrb (~> 1.2)
|
||||||
nenv (0.3.0)
|
nenv (0.3.0)
|
||||||
nokogiri (1.8.1)
|
nokogiri (1.8.2)
|
||||||
mini_portile2 (~> 2.3.0)
|
mini_portile2 (~> 2.3.0)
|
||||||
notiffany (0.1.1)
|
notiffany (0.1.1)
|
||||||
nenv (~> 0.1)
|
nenv (~> 0.1)
|
||||||
|
@ -89,14 +81,14 @@ GEM
|
||||||
coderay (~> 1.1.0)
|
coderay (~> 1.1.0)
|
||||||
method_source (~> 0.9.0)
|
method_source (~> 0.9.0)
|
||||||
public_suffix (3.0.2)
|
public_suffix (3.0.2)
|
||||||
rack (2.0.3)
|
rack (2.0.5)
|
||||||
rb-fsevent (0.10.2)
|
rb-fsevent (0.10.3)
|
||||||
rb-inotify (0.9.10)
|
rb-inotify (0.9.10)
|
||||||
ffi (>= 0.5.0, < 2)
|
ffi (>= 0.5.0, < 2)
|
||||||
ref (2.0.0)
|
ref (2.0.0)
|
||||||
ruby_dep (1.5.0)
|
ruby_dep (1.5.0)
|
||||||
rubypants (0.7.0)
|
rubypants (0.7.0)
|
||||||
sass (3.5.5)
|
sass (3.5.6)
|
||||||
sass-listen (~> 4.0.0)
|
sass-listen (~> 4.0.0)
|
||||||
sass-listen (4.0.0)
|
sass-listen (4.0.0)
|
||||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
|
@ -112,9 +104,8 @@ GEM
|
||||||
tomlrb (1.2.6)
|
tomlrb (1.2.6)
|
||||||
typogruby (1.0.18)
|
typogruby (1.0.18)
|
||||||
rubypants
|
rubypants
|
||||||
uglifier (2.7.2)
|
uglifier (4.1.10)
|
||||||
execjs (>= 0.3.0)
|
execjs (>= 0.3.0, < 3)
|
||||||
json (>= 1.8.0)
|
|
||||||
w3c_validators (1.3.3)
|
w3c_validators (1.3.3)
|
||||||
json (>= 1.8)
|
json (>= 1.8)
|
||||||
nokogiri (~> 1.6)
|
nokogiri (~> 1.6)
|
||||||
|
@ -126,11 +117,12 @@ PLATFORMS
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
adsf
|
adsf
|
||||||
autoprefixer-rails
|
autoprefixer-rails
|
||||||
|
babel-transpiler
|
||||||
builder
|
builder
|
||||||
coffee-script
|
coffee-script
|
||||||
guard-nanoc
|
guard-nanoc
|
||||||
highline
|
highline
|
||||||
html_press
|
htmlcompressor
|
||||||
icalendar
|
icalendar
|
||||||
kramdown
|
kramdown
|
||||||
nanoc
|
nanoc
|
||||||
|
@ -140,6 +132,7 @@ DEPENDENCIES
|
||||||
terminal-notifier-guard
|
terminal-notifier-guard
|
||||||
therubyracer
|
therubyracer
|
||||||
typogruby
|
typogruby
|
||||||
|
uglifier (>= 4.0.0)
|
||||||
w3c_validators
|
w3c_validators
|
||||||
words_counted
|
words_counted
|
||||||
|
|
||||||
|
|
2
Rules
2
Rules
|
@ -170,7 +170,7 @@ compile '/assets/scripts/**/*.coffee' do
|
||||||
end
|
end
|
||||||
|
|
||||||
compile '/assets/scripts/**/*.js' do
|
compile '/assets/scripts/**/*.js' do
|
||||||
filter :uglify_js
|
filter :uglify_js, harmony: true
|
||||||
end
|
end
|
||||||
|
|
||||||
ignore '/assets/stylesheets/includes/**/*'
|
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: d3.isoParse(e.starttime) } }).then(data => {
|
||||||
|
function prepareData(data) {
|
||||||
|
let grouped = _(data).groupBy(e => e.name).mapValues(e => _(e).groupBy(e => e.starttime.getHours()).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: d3.isoParse(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: d3.isoParse(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;
|
||||||
|
})();
|
171
content/assets/scripts/datavis/instanceChart.js
Normal file
171
content/assets/scripts/datavis/instanceChart.js
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
(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])
|
||||||
|
// .nice()
|
||||||
|
;
|
||||||
|
|
||||||
|
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('left', `${mouse[0] + 120}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;
|
||||||
|
|
||||||
|
})();
|
457
content/assets/scripts/datavis/script2.js
Normal file
457
content/assets/scripts/datavis/script2.js
Normal file
|
@ -0,0 +1,457 @@
|
||||||
|
(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();
|
||||||
|
chart2 = timeBarChart2();
|
||||||
|
chart.eventdata = eventdata;
|
||||||
|
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]);
|
||||||
|
yScale1.domain(d3.extent(dt, d => d.value));
|
||||||
|
|
||||||
|
svg.select('.x.axis')
|
||||||
|
.transition(t)
|
||||||
|
.call(xAxis);
|
||||||
|
|
||||||
|
svg.select('.y.axis')
|
||||||
|
.transition(t)
|
||||||
|
.call(yAxis1);
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
let g = d3.select('svg#barchart > g');
|
||||||
|
|
||||||
|
const selection = g.selectAll('.datacircle');
|
||||||
|
const sellines = g.selectAll('.line');
|
||||||
|
const eventlines = g.selectAll('.eventline');
|
||||||
|
|
||||||
|
sellines
|
||||||
|
.attr('x1', d => xScale(d.date))
|
||||||
|
.attr('y1', middle)
|
||||||
|
.attr('x2', d => xScale(d.date))
|
||||||
|
.transition()
|
||||||
|
.attr('y2', d => yScale1(d.value));
|
||||||
|
|
||||||
|
eventlines
|
||||||
|
.attr('x1', d => xScale(d.date))
|
||||||
|
.attr('y1', middle)
|
||||||
|
.attr('x2', d => xScale(d.date))
|
||||||
|
.transition()
|
||||||
|
.attr('y2', (d) => {
|
||||||
|
let yValue = 0;
|
||||||
|
selection.data().forEach(function (el) {
|
||||||
|
if (el.date === d.date) {
|
||||||
|
yValue = el.value;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return yScale1(yValue);
|
||||||
|
});
|
||||||
|
|
||||||
|
selection
|
||||||
|
.transition()
|
||||||
|
.attr('cx', d => xScale(d.date))
|
||||||
|
.attr('cy', d => yScale1(d.value));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const fed = filterData(eventdata, my.domain.start, my.domain.end);
|
||||||
|
|
||||||
|
const selection = svg.selectAll('.datacircle').data(dt, d => d.date);
|
||||||
|
const sellines = svg.selectAll('.line').data(dt, d => d.date);
|
||||||
|
const eventlines = svg.selectAll('.eventline').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', 'line')
|
||||||
|
.merge(sellines)
|
||||||
|
.transition(t);
|
||||||
|
|
||||||
|
eventlines.exit().remove();
|
||||||
|
|
||||||
|
eventlines.enter()
|
||||||
|
.append('line')
|
||||||
|
.attr('stroke', '#f4a442')
|
||||||
|
.attr('stroke-width', 2)
|
||||||
|
.attr('class', 'eventline')
|
||||||
|
.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", _ => {
|
||||||
|
div.style("opacity", 0);
|
||||||
|
})
|
||||||
|
.merge(eventlines)
|
||||||
|
.transition(t);
|
||||||
|
|
||||||
|
selection.exit().remove();
|
||||||
|
|
||||||
|
selection.enter()
|
||||||
|
.append('circle')
|
||||||
|
.attr('fill', 'lightblue')
|
||||||
|
.attr('class', 'datacircle')
|
||||||
|
.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", _ => {
|
||||||
|
div.style("opacity", 0);
|
||||||
|
})
|
||||||
|
.merge(selection)
|
||||||
|
.attr('r', 3)
|
||||||
|
.transition(t)
|
||||||
|
;
|
||||||
|
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
return my;
|
||||||
|
}
|
||||||
|
|
||||||
|
function timeBarChart2() {
|
||||||
|
function my(svg) {
|
||||||
|
let eventdata = my.eventdata;
|
||||||
|
var dt = svg.datum();
|
||||||
|
|
||||||
|
var div = d3.select(".tooltip").style('opacity', 0);
|
||||||
|
|
||||||
|
const t = d3.transition()
|
||||||
|
.ease(d3.easeLinear)
|
||||||
|
.duration(100);
|
||||||
|
|
||||||
|
xScale.domain([my.domain.start, my.domain.end]);
|
||||||
|
yScale2.domain(d3.extent(dt, d => d.value));
|
||||||
|
|
||||||
|
svg.select('.x.axis')
|
||||||
|
.transition(t)
|
||||||
|
.call(xAxis);
|
||||||
|
|
||||||
|
svg.select('.y.axis2')
|
||||||
|
.transition(t)
|
||||||
|
.call(yAxis2);
|
||||||
|
|
||||||
|
svg.append("text")
|
||||||
|
.style("text-anchor", "middle")
|
||||||
|
.text("Date");
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
let g = d3.select('svg#barchart > g');
|
||||||
|
|
||||||
|
const selection = g.selectAll('.datacircle2');
|
||||||
|
const sellines = g.selectAll('.line2');
|
||||||
|
const eventlines = g.selectAll('.eventline2');
|
||||||
|
|
||||||
|
sellines
|
||||||
|
.transition()
|
||||||
|
.attr('x1', d => xScale(d.date))
|
||||||
|
.attr('y1', padding.top)
|
||||||
|
.attr('x2', d => xScale(d.date))
|
||||||
|
.attr('y2', d => yScale2(d.value));
|
||||||
|
|
||||||
|
eventlines
|
||||||
|
.attr('x1', d => xScale(d.date))
|
||||||
|
.attr('y1', padding.top)
|
||||||
|
.attr('x2', d => xScale(d.date))
|
||||||
|
.transition()
|
||||||
|
.attr('y2', (d) => {
|
||||||
|
let yValue = 0;
|
||||||
|
selection.data().forEach(function (el) {
|
||||||
|
if (el.date === d.date) {
|
||||||
|
yValue = el.value;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return yScale2(yValue);
|
||||||
|
});
|
||||||
|
|
||||||
|
selection
|
||||||
|
.transition()
|
||||||
|
.attr('cx', d => xScale(d.date))
|
||||||
|
.attr('cy', d => yScale2(d.value));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const fed = filterData(eventdata, my.domain.start, my.domain.end);
|
||||||
|
|
||||||
|
const selection = svg.selectAll('.datacircle2').data(dt, d => d.date);
|
||||||
|
const sellines = svg.selectAll('.line2').data(dt, d => d.date);
|
||||||
|
const 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', 'line2')
|
||||||
|
.attr('transform', `translate(0, ${middle - padding.bottom})`)
|
||||||
|
.merge(sellines)
|
||||||
|
.transition(t);
|
||||||
|
|
||||||
|
eventlines.exit().remove();
|
||||||
|
|
||||||
|
eventlines.enter()
|
||||||
|
.append('line')
|
||||||
|
.attr('stroke', '#f4a442')
|
||||||
|
.attr('stroke-width', 2)
|
||||||
|
.attr('class', 'eventline2')
|
||||||
|
.attr('transform', `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", _ => {
|
||||||
|
div.style("opacity", 0);
|
||||||
|
})
|
||||||
|
.merge(eventlines)
|
||||||
|
.transition(t);
|
||||||
|
|
||||||
|
|
||||||
|
selection.exit().remove();
|
||||||
|
|
||||||
|
selection.enter()
|
||||||
|
.append('circle')
|
||||||
|
.attr('fill', 'lightblue')
|
||||||
|
.attr('class', 'datacircle2')
|
||||||
|
.attr('transform', `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", _ => {
|
||||||
|
div.style("opacity", 0);
|
||||||
|
})
|
||||||
|
.merge(selection)
|
||||||
|
.attr('r', 3)
|
||||||
|
.transition(t);
|
||||||
|
|
||||||
|
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");
|
||||||
|
});
|
187
content/assets/scripts/datavis/timeSlider.js
Normal file
187
content/assets/scripts/datavis/timeSlider.js
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
(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) {
|
||||||
|
nx = xScale(value[0]);
|
||||||
|
width = xScale(value[1]) - xScale(value[0]);
|
||||||
|
midPoint = nx + width / 2;
|
||||||
|
|
||||||
|
inner.attr('x', nx)
|
||||||
|
.attr('width', width);
|
||||||
|
|
||||||
|
const fmtStr = 'DD/MM/YY'
|
||||||
|
|
||||||
|
t1.text(moment(value[0]).format(fmtStr))
|
||||||
|
.attr('x', nx)
|
||||||
|
.attr('transform', `rotate(45 ${nx},50) translate(20,20)`);
|
||||||
|
t2.text(moment(value[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;
|
||||||
|
}
|
154
content/blog/17-18/eet-en-drankgewoonten-in-zeus.md
Normal file
154
content/blog/17-18/eet-en-drankgewoonten-in-zeus.md
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
---
|
||||||
|
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, Tap en Tab 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>.
|
||||||
|
|
||||||
|
## Tap
|
||||||
|
|
||||||
|
Tap is onze digitale vervanging van het oude papier-en-streepjes systeem dat we al jaar en dag gebruikten. Elke drankje of
|
||||||
|
versnapering was een aantal streepjes waard, wat ons weinig fine-grained controle gaf over de productprijzen.
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
<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!
|
||||||
|
|
||||||
|
<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.
|
||||||
|
|
||||||
|
<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="http://cdn.leafletjs.com/leaflet-0.7/leaflet.js"></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|
|
Nanoc::Filter.define(:html_press) do |content, _params|
|
||||||
HtmlPress.press content
|
HtmlCompressor::Compressor.new.compress content
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue