|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
|
|
|
|
|
<html>
|
|
|
|
|
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
<meta charset="utf-8" />
|
|
|
|
|
<meta name="generator" content="pandoc" />
|
|
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
|
|
|
|
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
|
|
|
|
|
|
<meta name="author" content="Norwin Roosen" />
|
|
|
|
|
|
|
|
|
|
<meta name="date" content="2023-02-23" />
|
|
|
|
|
|
|
|
|
|
<title>Visualising the History of openSenseMap.org</title>
|
|
|
|
|
|
|
|
|
|
<script>// Pandoc 2.9 adds attributes on both header and div. We remove the former (to
|
|
|
|
|
// be compatible with the behavior of Pandoc < 2.8).
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function(e) {
|
|
|
|
|
var hs = document.querySelectorAll("div.section[class*='level'] > :first-child");
|
|
|
|
|
var i, h, a;
|
|
|
|
|
for (i = 0; i < hs.length; i++) {
|
|
|
|
|
h = hs[i];
|
|
|
|
|
if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6
|
|
|
|
|
a = h.attributes;
|
|
|
|
|
while (a.length > 0) h.removeAttribute(a[0].name);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style type="text/css">
|
|
|
|
|
code{white-space: pre-wrap;}
|
|
|
|
|
span.smallcaps{font-variant: small-caps;}
|
|
|
|
|
span.underline{text-decoration: underline;}
|
|
|
|
|
div.column{display: inline-block; vertical-align: top; width: 50%;}
|
|
|
|
|
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
|
|
|
|
ul.task-list{list-style: none;}
|
|
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<style type="text/css">
|
|
|
|
|
code {
|
|
|
|
|
white-space: pre;
|
|
|
|
|
}
|
|
|
|
|
.sourceCode {
|
|
|
|
|
overflow: visible;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
<style type="text/css" data-origin="pandoc">
|
|
|
|
|
pre > code.sourceCode { white-space: pre; position: relative; }
|
|
|
|
|
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
|
|
|
|
|
pre > code.sourceCode > span:empty { height: 1.2em; }
|
|
|
|
|
.sourceCode { overflow: visible; }
|
|
|
|
|
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
|
|
|
|
div.sourceCode { margin: 1em 0; }
|
|
|
|
|
pre.sourceCode { margin: 0; }
|
|
|
|
|
@media screen {
|
|
|
|
|
div.sourceCode { overflow: auto; }
|
|
|
|
|
}
|
|
|
|
|
@media print {
|
|
|
|
|
pre > code.sourceCode { white-space: pre-wrap; }
|
|
|
|
|
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
|
|
|
|
|
}
|
|
|
|
|
pre.numberSource code
|
|
|
|
|
{ counter-reset: source-line 0; }
|
|
|
|
|
pre.numberSource code > span
|
|
|
|
|
{ position: relative; left: -4em; counter-increment: source-line; }
|
|
|
|
|
pre.numberSource code > span > a:first-child::before
|
|
|
|
|
{ content: counter(source-line);
|
|
|
|
|
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
|
|
|
|
border: none; display: inline-block;
|
|
|
|
|
-webkit-touch-callout: none; -webkit-user-select: none;
|
|
|
|
|
-khtml-user-select: none; -moz-user-select: none;
|
|
|
|
|
-ms-user-select: none; user-select: none;
|
|
|
|
|
padding: 0 4px; width: 4em;
|
|
|
|
|
color: #aaaaaa;
|
|
|
|
|
}
|
|
|
|
|
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
|
|
|
|
|
div.sourceCode
|
|
|
|
|
{ }
|
|
|
|
|
@media screen {
|
|
|
|
|
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
|
|
|
|
}
|
|
|
|
|
code span.al { color: #ff0000; font-weight: bold; }
|
|
|
|
|
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; }
|
|
|
|
|
code span.at { color: #7d9029; }
|
|
|
|
|
code span.bn { color: #40a070; }
|
|
|
|
|
code span.bu { color: #008000; }
|
|
|
|
|
code span.cf { color: #007020; font-weight: bold; }
|
|
|
|
|
code span.ch { color: #4070a0; }
|
|
|
|
|
code span.cn { color: #880000; }
|
|
|
|
|
code span.co { color: #60a0b0; font-style: italic; }
|
|
|
|
|
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; }
|
|
|
|
|
code span.do { color: #ba2121; font-style: italic; }
|
|
|
|
|
code span.dt { color: #902000; }
|
|
|
|
|
code span.dv { color: #40a070; }
|
|
|
|
|
code span.er { color: #ff0000; font-weight: bold; }
|
|
|
|
|
code span.ex { }
|
|
|
|
|
code span.fl { color: #40a070; }
|
|
|
|
|
code span.fu { color: #06287e; }
|
|
|
|
|
code span.im { color: #008000; font-weight: bold; }
|
|
|
|
|
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; }
|
|
|
|
|
code span.kw { color: #007020; font-weight: bold; }
|
|
|
|
|
code span.op { color: #666666; }
|
|
|
|
|
code span.ot { color: #007020; }
|
|
|
|
|
code span.pp { color: #bc7a00; }
|
|
|
|
|
code span.sc { color: #4070a0; }
|
|
|
|
|
code span.ss { color: #bb6688; }
|
|
|
|
|
code span.st { color: #4070a0; }
|
|
|
|
|
code span.va { color: #19177c; }
|
|
|
|
|
code span.vs { color: #4070a0; }
|
|
|
|
|
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; }
|
|
|
|
|
</style>
|
|
|
|
|
<script>
|
|
|
|
|
// apply pandoc div.sourceCode style to pre.sourceCode instead
|
|
|
|
|
(function() {
|
|
|
|
|
var sheets = document.styleSheets;
|
|
|
|
|
for (var i = 0; i < sheets.length; i++) {
|
|
|
|
|
if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue;
|
|
|
|
|
try { var rules = sheets[i].cssRules; } catch (e) { continue; }
|
|
|
|
|
var j = 0;
|
|
|
|
|
while (j < rules.length) {
|
|
|
|
|
var rule = rules[j];
|
|
|
|
|
// check if there is a div.sourceCode rule
|
|
|
|
|
if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") {
|
|
|
|
|
j++;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
var style = rule.style.cssText;
|
|
|
|
|
// check if color or background-color is set
|
|
|
|
|
if (rule.style.color === '' && rule.style.backgroundColor === '') {
|
|
|
|
|
j++;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// replace div.sourceCode by a pre.sourceCode rule
|
|
|
|
|
sheets[i].deleteRule(j);
|
|
|
|
|
sheets[i].insertRule('pre.sourceCode{' + style + '}', j);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<style type="text/css">body {
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
margin: 1em auto;
|
|
|
|
|
max-width: 700px;
|
|
|
|
|
overflow: visible;
|
|
|
|
|
padding-left: 2em;
|
|
|
|
|
padding-right: 2em;
|
|
|
|
|
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
line-height: 1.35;
|
|
|
|
|
}
|
|
|
|
|
#TOC {
|
|
|
|
|
clear: both;
|
|
|
|
|
margin: 0 0 10px 10px;
|
|
|
|
|
padding: 4px;
|
|
|
|
|
width: 400px;
|
|
|
|
|
border: 1px solid #CCCCCC;
|
|
|
|
|
border-radius: 5px;
|
|
|
|
|
background-color: #f6f6f6;
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
line-height: 1.3;
|
|
|
|
|
}
|
|
|
|
|
#TOC .toctitle {
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
font-size: 15px;
|
|
|
|
|
margin-left: 5px;
|
|
|
|
|
}
|
|
|
|
|
#TOC ul {
|
|
|
|
|
padding-left: 40px;
|
|
|
|
|
margin-left: -1.5em;
|
|
|
|
|
margin-top: 5px;
|
|
|
|
|
margin-bottom: 5px;
|
|
|
|
|
}
|
|
|
|
|
#TOC ul ul {
|
|
|
|
|
margin-left: -2em;
|
|
|
|
|
}
|
|
|
|
|
#TOC li {
|
|
|
|
|
line-height: 16px;
|
|
|
|
|
}
|
|
|
|
|
table {
|
|
|
|
|
margin: 1em auto;
|
|
|
|
|
border-width: 1px;
|
|
|
|
|
border-color: #DDDDDD;
|
|
|
|
|
border-style: outset;
|
|
|
|
|
border-collapse: collapse;
|
|
|
|
|
}
|
|
|
|
|
table th {
|
|
|
|
|
border-width: 2px;
|
|
|
|
|
padding: 5px;
|
|
|
|
|
border-style: inset;
|
|
|
|
|
}
|
|
|
|
|
table td {
|
|
|
|
|
border-width: 1px;
|
|
|
|
|
border-style: inset;
|
|
|
|
|
line-height: 18px;
|
|
|
|
|
padding: 5px 5px;
|
|
|
|
|
}
|
|
|
|
|
table, table th, table td {
|
|
|
|
|
border-left-style: none;
|
|
|
|
|
border-right-style: none;
|
|
|
|
|
}
|
|
|
|
|
table thead, table tr.even {
|
|
|
|
|
background-color: #f7f7f7;
|
|
|
|
|
}
|
|
|
|
|
p {
|
|
|
|
|
margin: 0.5em 0;
|
|
|
|
|
}
|
|
|
|
|
blockquote {
|
|
|
|
|
background-color: #f6f6f6;
|
|
|
|
|
padding: 0.25em 0.75em;
|
|
|
|
|
}
|
|
|
|
|
hr {
|
|
|
|
|
border-style: solid;
|
|
|
|
|
border: none;
|
|
|
|
|
border-top: 1px solid #777;
|
|
|
|
|
margin: 28px 0;
|
|
|
|
|
}
|
|
|
|
|
dl {
|
|
|
|
|
margin-left: 0;
|
|
|
|
|
}
|
|
|
|
|
dl dd {
|
|
|
|
|
margin-bottom: 13px;
|
|
|
|
|
margin-left: 13px;
|
|
|
|
|
}
|
|
|
|
|
dl dt {
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
}
|
|
|
|
|
ul {
|
|
|
|
|
margin-top: 0;
|
|
|
|
|
}
|
|
|
|
|
ul li {
|
|
|
|
|
list-style: circle outside;
|
|
|
|
|
}
|
|
|
|
|
ul ul {
|
|
|
|
|
margin-bottom: 0;
|
|
|
|
|
}
|
|
|
|
|
pre, code {
|
|
|
|
|
background-color: #f7f7f7;
|
|
|
|
|
border-radius: 3px;
|
|
|
|
|
color: #333;
|
|
|
|
|
white-space: pre-wrap;
|
|
|
|
|
}
|
|
|
|
|
pre {
|
|
|
|
|
border-radius: 3px;
|
|
|
|
|
margin: 5px 0px 10px 0px;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
}
|
|
|
|
|
pre:not([class]) {
|
|
|
|
|
background-color: #f7f7f7;
|
|
|
|
|
}
|
|
|
|
|
code {
|
|
|
|
|
font-family: Consolas, Monaco, 'Courier New', monospace;
|
|
|
|
|
font-size: 85%;
|
|
|
|
|
}
|
|
|
|
|
p > code, li > code {
|
|
|
|
|
padding: 2px 0px;
|
|
|
|
|
}
|
|
|
|
|
div.figure {
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
img {
|
|
|
|
|
background-color: #FFFFFF;
|
|
|
|
|
padding: 2px;
|
|
|
|
|
border: 1px solid #DDDDDD;
|
|
|
|
|
border-radius: 3px;
|
|
|
|
|
border: 1px solid #CCCCCC;
|
|
|
|
|
margin: 0 5px;
|
|
|
|
|
}
|
|
|
|
|
h1 {
|
|
|
|
|
margin-top: 0;
|
|
|
|
|
font-size: 35px;
|
|
|
|
|
line-height: 40px;
|
|
|
|
|
}
|
|
|
|
|
h2 {
|
|
|
|
|
border-bottom: 4px solid #f7f7f7;
|
|
|
|
|
padding-top: 10px;
|
|
|
|
|
padding-bottom: 2px;
|
|
|
|
|
font-size: 145%;
|
|
|
|
|
}
|
|
|
|
|
h3 {
|
|
|
|
|
border-bottom: 2px solid #f7f7f7;
|
|
|
|
|
padding-top: 10px;
|
|
|
|
|
font-size: 120%;
|
|
|
|
|
}
|
|
|
|
|
h4 {
|
|
|
|
|
border-bottom: 1px solid #f7f7f7;
|
|
|
|
|
margin-left: 8px;
|
|
|
|
|
font-size: 105%;
|
|
|
|
|
}
|
|
|
|
|
h5, h6 {
|
|
|
|
|
border-bottom: 1px solid #ccc;
|
|
|
|
|
font-size: 105%;
|
|
|
|
|
}
|
|
|
|
|
a {
|
|
|
|
|
color: #0033dd;
|
|
|
|
|
text-decoration: none;
|
|
|
|
|
}
|
|
|
|
|
a:hover {
|
|
|
|
|
color: #6666ff; }
|
|
|
|
|
a:visited {
|
|
|
|
|
color: #800080; }
|
|
|
|
|
a:visited:hover {
|
|
|
|
|
color: #BB00BB; }
|
|
|
|
|
a[href^="http:"] {
|
|
|
|
|
text-decoration: underline; }
|
|
|
|
|
a[href^="https:"] {
|
|
|
|
|
text-decoration: underline; }
|
|
|
|
|
|
|
|
|
|
code > span.kw { color: #555; font-weight: bold; }
|
|
|
|
|
code > span.dt { color: #902000; }
|
|
|
|
|
code > span.dv { color: #40a070; }
|
|
|
|
|
code > span.bn { color: #d14; }
|
|
|
|
|
code > span.fl { color: #d14; }
|
|
|
|
|
code > span.ch { color: #d14; }
|
|
|
|
|
code > span.st { color: #d14; }
|
|
|
|
|
code > span.co { color: #888888; font-style: italic; }
|
|
|
|
|
code > span.ot { color: #007020; }
|
|
|
|
|
code > span.al { color: #ff0000; font-weight: bold; }
|
|
|
|
|
code > span.fu { color: #900; font-weight: bold; }
|
|
|
|
|
code > span.er { color: #a61717; background-color: #e3d2d2; }
|
|
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h1 class="title toc-ignore">Visualising the History of
|
|
|
|
|
openSenseMap.org</h1>
|
|
|
|
|
<h4 class="author">Norwin Roosen</h4>
|
|
|
|
|
<h4 class="date">2023-02-23</h4>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div id="TOC">
|
|
|
|
|
<ul>
|
|
|
|
|
<li><a href="#plot-count-of-boxes-by-time" id="toc-plot-count-of-boxes-by-time">Plot count of boxes by time</a>
|
|
|
|
|
<ul>
|
|
|
|
|
<li><a href="#and-exposure" id="toc-and-exposure">…and exposure</a></li>
|
|
|
|
|
<li><a href="#and-grouptag" id="toc-and-grouptag">…and grouptag</a></li>
|
|
|
|
|
</ul></li>
|
|
|
|
|
<li><a href="#plot-rate-of-growth-and-inactivity-per-week" id="toc-plot-rate-of-growth-and-inactivity-per-week">Plot rate of growth
|
|
|
|
|
and inactivity per week</a></li>
|
|
|
|
|
<li><a href="#plot-duration-of-boxes-being-active" id="toc-plot-duration-of-boxes-being-active">Plot duration of boxes
|
|
|
|
|
being active</a>
|
|
|
|
|
<ul>
|
|
|
|
|
<li><a href="#by-exposure" id="toc-by-exposure">…by exposure</a></li>
|
|
|
|
|
<li><a href="#by-grouptag" id="toc-by-grouptag">…by grouptag</a></li>
|
|
|
|
|
<li><a href="#by-year-of-registration" id="toc-by-year-of-registration">…by year of registration</a></li>
|
|
|
|
|
</ul></li>
|
|
|
|
|
<li><a href="#more-visualisations" id="toc-more-visualisations">More
|
|
|
|
|
Visualisations</a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<blockquote>
|
|
|
|
|
<p>This vignette serves as an example on data wrangling &
|
|
|
|
|
visualization with <code>opensensmapr</code>, <code>dplyr</code> and
|
|
|
|
|
<code>ggplot2</code>.</p>
|
|
|
|
|
</blockquote>
|
|
|
|
|
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="co"># required packages:</span></span>
|
|
|
|
|
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(opensensmapr) <span class="co"># data download</span></span>
|
|
|
|
|
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(dplyr) <span class="co"># data wrangling</span></span>
|
|
|
|
|
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(ggplot2) <span class="co"># plotting</span></span>
|
|
|
|
|
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(lubridate) <span class="co"># date arithmetic</span></span>
|
|
|
|
|
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(zoo) <span class="co"># rollmean()</span></span></code></pre></div>
|
|
|
|
|
<p>openSenseMap.org has grown quite a bit in the last years; it would be
|
|
|
|
|
interesting to see how we got to the current 11367 sensor stations,
|
|
|
|
|
split up by various attributes of the boxes.</p>
|
|
|
|
|
<p>While <code>opensensmapr</code> provides extensive methods of
|
|
|
|
|
filtering boxes by attributes on the server, we do the filtering within
|
|
|
|
|
R to save time and gain flexibility. So the first step is to retrieve
|
|
|
|
|
<em>all the boxes</em>:</p>
|
|
|
|
|
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="co"># if you want to see results for a specific subset of boxes,</span></span>
|
|
|
|
|
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="co"># just specify a filter such as grouptag='ifgi' here</span></span>
|
|
|
|
|
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>boxes <span class="ot">=</span> <span class="fu">osem_boxes</span>()</span></code></pre></div>
|
|
|
|
|
<div id="plot-count-of-boxes-by-time" class="section level1 tabset">
|
|
|
|
|
<h1 class="tabset">Plot count of boxes by time</h1>
|
|
|
|
|
<p>By looking at the <code>createdAt</code> attribute of each box we
|
|
|
|
|
know the exact time a box was registered. With this approach we have no
|
|
|
|
|
information about boxes that were deleted in the meantime, but that’s
|
|
|
|
|
okay for now.</p>
|
|
|
|
|
<div id="and-exposure" class="section level2">
|
|
|
|
|
<h2>…and exposure</h2>
|
|
|
|
|
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>exposure_counts <span class="ot">=</span> boxes <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">group_by</span>(exposure) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">count =</span> <span class="fu">row_number</span>(createdAt))</span>
|
|
|
|
|
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a></span>
|
|
|
|
|
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a>exposure_colors <span class="ot">=</span> <span class="fu">c</span>(<span class="at">indoor =</span> <span class="st">'red'</span>, <span class="at">outdoor =</span> <span class="st">'lightgreen'</span>, <span class="at">mobile =</span> <span class="st">'blue'</span>, <span class="at">unknown =</span> <span class="st">'darkgrey'</span>)</span>
|
|
|
|
|
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplot</span>(exposure_counts, <span class="fu">aes</span>(<span class="at">x =</span> createdAt, <span class="at">y =</span> count, <span class="at">colour =</span> exposure)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">geom_line</span>() <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">scale_colour_manual</span>(<span class="at">values =</span> exposure_colors) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">xlab</span>(<span class="st">'Registration Date'</span>) <span class="sc">+</span> <span class="fu">ylab</span>(<span class="st">'senseBox count'</span>)</span></code></pre></div>
|
|
|
|
|
<p><img src="data:image/png;base64,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
|
|
|
|
|
<p>Outdoor boxes are growing <em>fast</em>! We can also see the
|
|
|
|
|
introduction of <code>mobile</code> sensor “stations” in 2017. While
|
|
|
|
|
mobile boxes are still few, we can expect a quick rise in 2018 once the
|
|
|
|
|
new senseBox MCU with GPS support is released.</p>
|
|
|
|
|
<p>Let’s have a quick summary:</p>
|
|
|
|
|
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>exposure_counts <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">summarise</span>(</span>
|
|
|
|
|
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a> <span class="at">oldest =</span> <span class="fu">min</span>(createdAt),</span>
|
|
|
|
|
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a> <span class="at">newest =</span> <span class="fu">max</span>(createdAt),</span>
|
|
|
|
|
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a> <span class="at">count =</span> <span class="fu">max</span>(count)</span>
|
|
|
|
|
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a> ) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">arrange</span>(<span class="fu">desc</span>(count))</span></code></pre></div>
|
|
|
|
|
<div class="kable-table">
|
|
|
|
|
<table>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr class="header">
|
|
|
|
|
<th align="left">exposure</th>
|
|
|
|
|
<th align="left">oldest</th>
|
|
|
|
|
<th align="left">newest</th>
|
|
|
|
|
<th align="right">count</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">outdoor</td>
|
|
|
|
|
<td align="left">2016-08-09 19:34:42</td>
|
|
|
|
|
<td align="left">2023-02-23 07:56:59</td>
|
|
|
|
|
<td align="right">8413</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">indoor</td>
|
|
|
|
|
<td align="left">2018-05-10 20:14:44</td>
|
|
|
|
|
<td align="left">2023-02-21 14:23:52</td>
|
|
|
|
|
<td align="right">2344</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">mobile</td>
|
|
|
|
|
<td align="left">2020-10-24 14:39:30</td>
|
|
|
|
|
<td align="left">2023-02-20 16:32:48</td>
|
|
|
|
|
<td align="right">591</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">unknown</td>
|
|
|
|
|
<td align="left">2022-03-01 07:04:31</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">19</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="and-grouptag" class="section level2">
|
|
|
|
|
<h2>…and grouptag</h2>
|
|
|
|
|
<p>We can try to find out where the increases in growth came from, by
|
|
|
|
|
analysing the box count by grouptag.</p>
|
|
|
|
|
<p>Caveats: Only a small subset of boxes has a grouptag, and we should
|
|
|
|
|
assume that these groups are actually bigger. Also, we can see that
|
|
|
|
|
grouptag naming is inconsistent (<code>Luftdaten</code>,
|
|
|
|
|
<code>luftdaten.info</code>, …)</p>
|
|
|
|
|
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>grouptag_counts <span class="ot">=</span> boxes <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">group_by</span>(grouptag) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a> <span class="co"># only include grouptags with 8 or more members</span></span>
|
|
|
|
|
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">filter</span>(<span class="fu">length</span>(grouptag) <span class="sc">>=</span> <span class="dv">8</span> <span class="sc">&</span> <span class="sc">!</span><span class="fu">is.na</span>(grouptag)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">count =</span> <span class="fu">row_number</span>(createdAt))</span>
|
|
|
|
|
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a></span>
|
|
|
|
|
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a><span class="co"># helper for sorting the grouptags by boxcount</span></span>
|
|
|
|
|
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a>sortLvls <span class="ot">=</span> <span class="cf">function</span>(oldFactor, <span class="at">ascending =</span> <span class="cn">TRUE</span>) {</span>
|
|
|
|
|
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a> lvls <span class="ot">=</span> <span class="fu">table</span>(oldFactor) <span class="sc">%>%</span> <span class="fu">sort</span>(., <span class="at">decreasing =</span> <span class="sc">!</span>ascending) <span class="sc">%>%</span> <span class="fu">names</span>()</span>
|
|
|
|
|
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">factor</span>(oldFactor, <span class="at">levels =</span> lvls)</span>
|
|
|
|
|
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a>}</span>
|
|
|
|
|
<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a>grouptag_counts<span class="sc">$</span>grouptag <span class="ot">=</span> <span class="fu">sortLvls</span>(grouptag_counts<span class="sc">$</span>grouptag, <span class="at">ascending =</span> <span class="cn">FALSE</span>)</span>
|
|
|
|
|
<span id="cb5-13"><a href="#cb5-13" aria-hidden="true" tabindex="-1"></a></span>
|
|
|
|
|
<span id="cb5-14"><a href="#cb5-14" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplot</span>(grouptag_counts, <span class="fu">aes</span>(<span class="at">x =</span> createdAt, <span class="at">y =</span> count, <span class="at">colour =</span> grouptag)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb5-15"><a href="#cb5-15" aria-hidden="true" tabindex="-1"></a> <span class="fu">geom_line</span>(<span class="fu">aes</span>(<span class="at">group =</span> grouptag)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb5-16"><a href="#cb5-16" aria-hidden="true" tabindex="-1"></a> <span class="fu">xlab</span>(<span class="st">'Registration Date'</span>) <span class="sc">+</span> <span class="fu">ylab</span>(<span class="st">'senseBox count'</span>)</span></code></pre></div>
|
|
|
|
|
<p><img src="data:image/png;base64,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
|
|
|
|
|
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>grouptag_counts <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">summarise</span>(</span>
|
|
|
|
|
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a> <span class="at">oldest =</span> <span class="fu">min</span>(createdAt),</span>
|
|
|
|
|
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a> <span class="at">newest =</span> <span class="fu">max</span>(createdAt),</span>
|
|
|
|
|
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a> <span class="at">count =</span> <span class="fu">max</span>(count)</span>
|
|
|
|
|
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a> ) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">arrange</span>(<span class="fu">desc</span>(count))</span></code></pre></div>
|
|
|
|
|
<div class="kable-table">
|
|
|
|
|
<table style="width:100%;">
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col width="36%" />
|
|
|
|
|
<col width="27%" />
|
|
|
|
|
<col width="27%" />
|
|
|
|
|
<col width="8%" />
|
|
|
|
|
</colgroup>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr class="header">
|
|
|
|
|
<th align="left">grouptag</th>
|
|
|
|
|
<th align="left">oldest</th>
|
|
|
|
|
<th align="left">newest</th>
|
|
|
|
|
<th align="right">count</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">edu</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2023-02-20 11:06:45</td>
|
|
|
|
|
<td align="right">430</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Save Dnipro</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">354</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Luftdaten</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2023-01-27 15:22:54</td>
|
|
|
|
|
<td align="right">244</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">HU Explorers</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-12-14 10:11:34</td>
|
|
|
|
|
<td align="right">124</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">CS:iDrop</td>
|
|
|
|
|
<td align="left">2023-01-10 10:22:33</td>
|
|
|
|
|
<td align="left">2023-01-31 15:13:46</td>
|
|
|
|
|
<td align="right">120</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">#stropdeaer</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">101</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">321heiss</td>
|
|
|
|
|
<td align="left">2022-06-27 14:12:25</td>
|
|
|
|
|
<td align="left">2022-08-08 10:22:21</td>
|
|
|
|
|
<td align="right">91</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">GIZ Clean Air Day Project</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">76</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Captographies</td>
|
|
|
|
|
<td align="left">2021-05-21 15:24:45</td>
|
|
|
|
|
<td align="left">2023-01-31 12:11:49</td>
|
|
|
|
|
<td align="right">62</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Futurium</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">40</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Bad_Hersfeld</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">37</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">TKS Bonn</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">36</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Mikroprojekt Mitmachklima</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-08-23 13:14:11</td>
|
|
|
|
|
<td align="right">34</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">kerekdomb_</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">34</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Bottrop-Feinstaub</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">33</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Luchtwachters Delft</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">33</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Futurium 2021</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">32</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Feinstaub</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-08-01 16:27:10</td>
|
|
|
|
|
<td align="right">29</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">luftdaten.info</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">28</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">ifgi</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">26</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">SUGUCS</td>
|
|
|
|
|
<td align="left">2022-11-30 15:25:32</td>
|
|
|
|
|
<td align="left">2023-01-23 13:17:54</td>
|
|
|
|
|
<td align="right">25</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">cleanairfrome</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-05-15 21:13:30</td>
|
|
|
|
|
<td align="right">24</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">WAUW!denberg</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">23</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">freshairbromley</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2023-01-31 10:18:57</td>
|
|
|
|
|
<td align="right">23</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Riga</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">22</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">KJR-M</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">21</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Mikroklima</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-09-05 08:38:57</td>
|
|
|
|
|
<td align="right">21</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">bad_hersfeld</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-06-14 09:34:02</td>
|
|
|
|
|
<td align="right">21</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Smart City MS</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">20</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">SekSeeland</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">19</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Luftdaten.info</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">18</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">1</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-04-25 15:07:39</td>
|
|
|
|
|
<td align="right">17</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Apeldoorn</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">17</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">luftdaten</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">17</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">BurgerMeetnet</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-05-10 21:22:35</td>
|
|
|
|
|
<td align="right">16</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Haus C</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">16</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">AGIN</td>
|
|
|
|
|
<td align="left">2022-11-28 17:33:12</td>
|
|
|
|
|
<td align="left">2022-11-28 17:42:18</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">APPI</td>
|
|
|
|
|
<td align="left">2023-01-26 13:38:22</td>
|
|
|
|
|
<td align="left">2023-01-26 13:40:59</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">BRGL</td>
|
|
|
|
|
<td align="left">2022-11-06 19:23:43</td>
|
|
|
|
|
<td align="left">2022-11-06 22:08:36</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">BRGW</td>
|
|
|
|
|
<td align="left">2022-11-02 10:28:52</td>
|
|
|
|
|
<td align="left">2022-11-02 13:32:12</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Burgermeetnet</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">HTLJ</td>
|
|
|
|
|
<td align="left">2022-11-21 22:04:17</td>
|
|
|
|
|
<td align="left">2022-11-21 22:05:47</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">MSGB</td>
|
|
|
|
|
<td align="left">2022-11-14 09:08:57</td>
|
|
|
|
|
<td align="left">2022-11-14 10:19:24</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">MSHO</td>
|
|
|
|
|
<td align="left">2022-12-20 09:28:40</td>
|
|
|
|
|
<td align="left">2022-12-20 10:01:38</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">MSIN</td>
|
|
|
|
|
<td align="left">2022-11-21 17:02:39</td>
|
|
|
|
|
<td align="left">2022-11-21 23:06:22</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">MSKE</td>
|
|
|
|
|
<td align="left">2023-01-05 15:40:58</td>
|
|
|
|
|
<td align="left">2023-01-05 15:52:02</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">MakeLight</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">PMSI</td>
|
|
|
|
|
<td align="left">2023-01-20 14:22:03</td>
|
|
|
|
|
<td align="left">2023-01-20 14:31:52</td>
|
|
|
|
|
<td align="right">15</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Haus B</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">14</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">UrbanGarden</td>
|
|
|
|
|
<td align="left">2023-02-02 19:27:40</td>
|
|
|
|
|
<td align="left">2023-02-18 14:50:19</td>
|
|
|
|
|
<td align="right">14</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Соседи по воздуху</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2023-01-27 09:50:43</td>
|
|
|
|
|
<td align="right">14</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">PIE</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">13</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">RB-DSJ</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">13</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Sofia</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">12</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">co2mofetten</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2023-01-17 07:38:21</td>
|
|
|
|
|
<td align="right">12</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Haus D</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">11</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Netlight</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">11</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">home</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">11</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">#STROPDEAER</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2023-02-16 15:12:50</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">AirAberdeen</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Balthasar-Neumann-Schule 1</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Bestäuberprojekt</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Che Aria Tira?</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">HBG Bonn</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">IntegrA</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Mikroklima H</td>
|
|
|
|
|
<td align="left">2022-05-07 17:29:00</td>
|
|
|
|
|
<td align="left">2022-05-07 17:47:42</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">dwih-sp</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">esri-de</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">makerspace-partheland</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2023-02-20 18:34:50</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">montorioveronese.it</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-12-29 07:45:57</td>
|
|
|
|
|
<td align="right">10</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">ATSO</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">9</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Fläming</td>
|
|
|
|
|
<td align="left">2022-08-15 19:16:48</td>
|
|
|
|
|
<td align="left">2022-12-13 06:29:22</td>
|
|
|
|
|
<td align="right">9</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Mikroklima C-R</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">9</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Ostroda</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">9</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">RSS</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">9</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">clevermint</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">9</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">test</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-12-18 22:20:34</td>
|
|
|
|
|
<td align="right">9</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">2</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2023-01-07 15:44:29</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">DBDS</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Data4City</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">IKG</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">IVKOWeek</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-07-05 09:42:31</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Koerber-Stiftung</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">M7</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-11-28 13:00:44</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Natlab Ökologie</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">PGKN</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Raumanmeri</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">stw</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="left">2022-03-30 11:25:43</td>
|
|
|
|
|
<td align="right">8</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="plot-rate-of-growth-and-inactivity-per-week" class="section level1">
|
|
|
|
|
<h1>Plot rate of growth and inactivity per week</h1>
|
|
|
|
|
<p>First we group the boxes by <code>createdAt</code> into bins of one
|
|
|
|
|
week:</p>
|
|
|
|
|
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>bins <span class="ot">=</span> <span class="st">'week'</span></span>
|
|
|
|
|
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a>mvavg_bins <span class="ot">=</span> <span class="dv">6</span></span>
|
|
|
|
|
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a></span>
|
|
|
|
|
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a>growth <span class="ot">=</span> boxes <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">week =</span> <span class="fu">cut</span>(<span class="fu">as.Date</span>(createdAt), <span class="at">breaks =</span> bins)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">group_by</span>(week) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">summarize</span>(<span class="at">count =</span> <span class="fu">length</span>(week)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">event =</span> <span class="st">'registered'</span>)</span></code></pre></div>
|
|
|
|
|
<p>We can do the same for <code>updatedAt</code>, which informs us about
|
|
|
|
|
the last change to a box, including uploaded measurements. This method
|
|
|
|
|
of determining inactive boxes is fairly inaccurate and should be
|
|
|
|
|
considered an approximation, because we have no information about
|
|
|
|
|
intermediate inactive phases. Also deleted boxes would probably have a
|
|
|
|
|
big impact here.</p>
|
|
|
|
|
<div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>inactive <span class="ot">=</span> boxes <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a> <span class="co"># remove boxes that were updated in the last two days,</span></span>
|
|
|
|
|
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a> <span class="co"># b/c any box becomes inactive at some point by definition of updatedAt</span></span>
|
|
|
|
|
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">filter</span>(updatedAt <span class="sc"><</span> <span class="fu">now</span>() <span class="sc">-</span> <span class="fu">days</span>(<span class="dv">2</span>)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">week =</span> <span class="fu">cut</span>(<span class="fu">as.Date</span>(updatedAt), <span class="at">breaks =</span> bins)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">group_by</span>(week) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">summarize</span>(<span class="at">count =</span> <span class="fu">length</span>(week)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">event =</span> <span class="st">'inactive'</span>)</span></code></pre></div>
|
|
|
|
|
<p>Now we can combine both datasets for plotting:</p>
|
|
|
|
|
<div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>boxes_by_date <span class="ot">=</span> <span class="fu">bind_rows</span>(growth, inactive) <span class="sc">%>%</span> <span class="fu">group_by</span>(event)</span>
|
|
|
|
|
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a></span>
|
|
|
|
|
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplot</span>(boxes_by_date, <span class="fu">aes</span>(<span class="at">x =</span> <span class="fu">as.Date</span>(week), <span class="at">colour =</span> event)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">xlab</span>(<span class="st">'Time'</span>) <span class="sc">+</span> <span class="fu">ylab</span>(<span class="fu">paste</span>(<span class="st">'rate per '</span>, bins)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">scale_x_date</span>(<span class="at">date_breaks=</span><span class="st">"years"</span>, <span class="at">date_labels=</span><span class="st">"%Y"</span>) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">scale_colour_manual</span>(<span class="at">values =</span> <span class="fu">c</span>(<span class="at">registered =</span> <span class="st">'lightgreen'</span>, <span class="at">inactive =</span> <span class="st">'grey'</span>)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">geom_point</span>(<span class="fu">aes</span>(<span class="at">y =</span> count), <span class="at">size =</span> <span class="fl">0.5</span>) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb9-8"><a href="#cb9-8" aria-hidden="true" tabindex="-1"></a> <span class="co"># moving average, make first and last value NA (to ensure identical length of vectors)</span></span>
|
|
|
|
|
<span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">geom_line</span>(<span class="fu">aes</span>(<span class="at">y =</span> <span class="fu">rollmean</span>(count, mvavg_bins, <span class="at">fill =</span> <span class="fu">list</span>(<span class="cn">NA</span>, <span class="cn">NULL</span>, <span class="cn">NA</span>))))</span></code></pre></div>
|
|
|
|
|
<p><img src="data:image/png;base64,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
|
|
|
|
|
<p>We see a sudden rise in early 2017, which lines up with the fast
|
|
|
|
|
growing grouptag <code>Luftdaten</code>. This was enabled by an
|
|
|
|
|
integration of openSenseMap.org into the firmware of the air quality
|
|
|
|
|
monitoring project <a href="https://sensor.community/de/">luftdaten.info</a>. The dips in mid
|
|
|
|
|
2017 and early 2018 could possibly be explained by production/delivery
|
|
|
|
|
issues of the senseBox hardware, but I have no data on the exact time
|
|
|
|
|
frames to verify.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="plot-duration-of-boxes-being-active" class="section level1 tabset">
|
|
|
|
|
<h1 class="tabset">Plot duration of boxes being active</h1>
|
|
|
|
|
<p>While we are looking at <code>createdAt</code> and
|
|
|
|
|
<code>updatedAt</code>, we can also extract the duration of activity of
|
|
|
|
|
each box, and look at metrics by exposure and grouptag once more:</p>
|
|
|
|
|
<div id="by-exposure" class="section level2">
|
|
|
|
|
<h2>…by exposure</h2>
|
|
|
|
|
<div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a>duration <span class="ot">=</span> boxes <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">group_by</span>(exposure) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">filter</span>(<span class="sc">!</span><span class="fu">is.na</span>(updatedAt)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">duration =</span> <span class="fu">difftime</span>(updatedAt, createdAt, <span class="at">units=</span><span class="st">'days'</span>))</span>
|
|
|
|
|
<span id="cb10-5"><a href="#cb10-5" aria-hidden="true" tabindex="-1"></a></span>
|
|
|
|
|
<span id="cb10-6"><a href="#cb10-6" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplot</span>(duration, <span class="fu">aes</span>(<span class="at">x =</span> exposure, <span class="at">y =</span> duration)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb10-7"><a href="#cb10-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">geom_boxplot</span>() <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb10-8"><a href="#cb10-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">coord_flip</span>() <span class="sc">+</span> <span class="fu">ylab</span>(<span class="st">'Duration active in Days'</span>)</span></code></pre></div>
|
|
|
|
|
<p><img src="data:image/png;base64,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
|
|
|
|
|
<p>The time of activity averages at only 157 days, though there are
|
|
|
|
|
boxes with 2389 days of activity, spanning a large chunk of
|
|
|
|
|
openSenseMap’s existence.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="by-grouptag" class="section level2">
|
|
|
|
|
<h2>…by grouptag</h2>
|
|
|
|
|
<div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>duration <span class="ot">=</span> boxes <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">group_by</span>(grouptag) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a> <span class="co"># only include grouptags with 8 or more members</span></span>
|
|
|
|
|
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">filter</span>(<span class="fu">length</span>(grouptag) <span class="sc">>=</span> <span class="dv">8</span> <span class="sc">&</span> <span class="sc">!</span><span class="fu">is.na</span>(grouptag) <span class="sc">&</span> <span class="sc">!</span><span class="fu">is.na</span>(updatedAt)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">duration =</span> <span class="fu">difftime</span>(updatedAt, createdAt, <span class="at">units=</span><span class="st">'days'</span>))</span>
|
|
|
|
|
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a> </span>
|
|
|
|
|
<span id="cb11-7"><a href="#cb11-7" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplot</span>(duration, <span class="fu">aes</span>(<span class="at">x =</span> grouptag, <span class="at">y =</span> duration)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb11-8"><a href="#cb11-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">geom_boxplot</span>() <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb11-9"><a href="#cb11-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">coord_flip</span>() <span class="sc">+</span> <span class="fu">ylab</span>(<span class="st">'Duration active in Days'</span>)</span></code></pre></div>
|
|
|
|
|
<p><img src="data:image/png;base64,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
|
|
|
|
|
<div class="sourceCode" id="cb12"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a>duration <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">summarize</span>(</span>
|
|
|
|
|
<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a> <span class="at">duration_avg =</span> <span class="fu">round</span>(<span class="fu">mean</span>(duration)),</span>
|
|
|
|
|
<span id="cb12-4"><a href="#cb12-4" aria-hidden="true" tabindex="-1"></a> <span class="at">duration_min =</span> <span class="fu">round</span>(<span class="fu">min</span>(duration)),</span>
|
|
|
|
|
<span id="cb12-5"><a href="#cb12-5" aria-hidden="true" tabindex="-1"></a> <span class="at">duration_max =</span> <span class="fu">round</span>(<span class="fu">max</span>(duration)),</span>
|
|
|
|
|
<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a> <span class="at">oldest_box =</span> <span class="fu">round</span>(<span class="fu">max</span>(<span class="fu">difftime</span>(<span class="fu">now</span>(), createdAt, <span class="at">units=</span><span class="st">'days'</span>)))</span>
|
|
|
|
|
<span id="cb12-7"><a href="#cb12-7" aria-hidden="true" tabindex="-1"></a> ) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb12-8"><a href="#cb12-8" aria-hidden="true" tabindex="-1"></a> <span class="fu">arrange</span>(<span class="fu">desc</span>(duration_avg))</span></code></pre></div>
|
|
|
|
|
<div class="kable-table">
|
|
|
|
|
<table style="width:100%;">
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col width="35%" />
|
|
|
|
|
<col width="16%" />
|
|
|
|
|
<col width="16%" />
|
|
|
|
|
<col width="16%" />
|
|
|
|
|
<col width="14%" />
|
|
|
|
|
</colgroup>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr class="header">
|
|
|
|
|
<th align="left">grouptag</th>
|
|
|
|
|
<th align="left">duration_avg</th>
|
|
|
|
|
<th align="left">duration_min</th>
|
|
|
|
|
<th align="left">duration_max</th>
|
|
|
|
|
<th align="left">oldest_box</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Ostroda</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Mikroklima C-R</td>
|
|
|
|
|
<td align="left">328 days</td>
|
|
|
|
|
<td align="left">321 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Apeldoorn</td>
|
|
|
|
|
<td align="left">326 days</td>
|
|
|
|
|
<td align="left">263 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">freshairbromley</td>
|
|
|
|
|
<td align="left">298 days</td>
|
|
|
|
|
<td align="left">23 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Mikroklima</td>
|
|
|
|
|
<td align="left">280 days</td>
|
|
|
|
|
<td align="left">42 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Mikroklima H</td>
|
|
|
|
|
<td align="left">279 days</td>
|
|
|
|
|
<td align="left">229 days</td>
|
|
|
|
|
<td align="left">292 days</td>
|
|
|
|
|
<td align="left">292 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Smart City MS</td>
|
|
|
|
|
<td align="left">272 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Feinstaub</td>
|
|
|
|
|
<td align="left">220 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">co2mofetten</td>
|
|
|
|
|
<td align="left">212 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">makerspace-partheland</td>
|
|
|
|
|
<td align="left">210 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Luftdaten</td>
|
|
|
|
|
<td align="left">208 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">luftdaten.info</td>
|
|
|
|
|
<td align="left">197 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Burgermeetnet</td>
|
|
|
|
|
<td align="left">188 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">esri-de</td>
|
|
|
|
|
<td align="left">188 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">#stropdeaer</td>
|
|
|
|
|
<td align="left">185 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Sofia</td>
|
|
|
|
|
<td align="left">170 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">WAUW!denberg</td>
|
|
|
|
|
<td align="left">166 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">KJR-M</td>
|
|
|
|
|
<td align="left">165 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">IKG</td>
|
|
|
|
|
<td align="left">162 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">AirAberdeen</td>
|
|
|
|
|
<td align="left">153 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">M7</td>
|
|
|
|
|
<td align="left">152 days</td>
|
|
|
|
|
<td align="left">87 days</td>
|
|
|
|
|
<td align="left">243 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">1</td>
|
|
|
|
|
<td align="left">145 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">BurgerMeetnet</td>
|
|
|
|
|
<td align="left">139 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Luftdaten.info</td>
|
|
|
|
|
<td align="left">138 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Bottrop-Feinstaub</td>
|
|
|
|
|
<td align="left">132 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">stw</td>
|
|
|
|
|
<td align="left">129 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">cleanairfrome</td>
|
|
|
|
|
<td align="left">128 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">montorioveronese.it</td>
|
|
|
|
|
<td align="left">128 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">RB-DSJ</td>
|
|
|
|
|
<td align="left">122 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Mikroprojekt Mitmachklima</td>
|
|
|
|
|
<td align="left">117 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Luchtwachters Delft</td>
|
|
|
|
|
<td align="left">109 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">BRGL</td>
|
|
|
|
|
<td align="left">107 days</td>
|
|
|
|
|
<td align="left">85 days</td>
|
|
|
|
|
<td align="left">109 days</td>
|
|
|
|
|
<td align="left">109 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Fläming</td>
|
|
|
|
|
<td align="left">107 days</td>
|
|
|
|
|
<td align="left">23 days</td>
|
|
|
|
|
<td align="left">175 days</td>
|
|
|
|
|
<td align="left">192 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">BRGW</td>
|
|
|
|
|
<td align="left">106 days</td>
|
|
|
|
|
<td align="left">98 days</td>
|
|
|
|
|
<td align="left">113 days</td>
|
|
|
|
|
<td align="left">113 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">PIE</td>
|
|
|
|
|
<td align="left">101 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Riga</td>
|
|
|
|
|
<td align="left">101 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">kerekdomb_</td>
|
|
|
|
|
<td align="left">100 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">luftdaten</td>
|
|
|
|
|
<td align="left">99 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">home</td>
|
|
|
|
|
<td align="left">94 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Bad_Hersfeld</td>
|
|
|
|
|
<td align="left">93 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">dwih-sp</td>
|
|
|
|
|
<td align="left">91 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">MSGB</td>
|
|
|
|
|
<td align="left">89 days</td>
|
|
|
|
|
<td align="left">50 days</td>
|
|
|
|
|
<td align="left">101 days</td>
|
|
|
|
|
<td align="left">101 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">AGIN</td>
|
|
|
|
|
<td align="left">86 days</td>
|
|
|
|
|
<td align="left">86 days</td>
|
|
|
|
|
<td align="left">86 days</td>
|
|
|
|
|
<td align="left">87 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">HTLJ</td>
|
|
|
|
|
<td align="left">84 days</td>
|
|
|
|
|
<td align="left">58 days</td>
|
|
|
|
|
<td align="left">94 days</td>
|
|
|
|
|
<td align="left">94 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">bad_hersfeld</td>
|
|
|
|
|
<td align="left">84 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Соседи по воздуху</td>
|
|
|
|
|
<td align="left">84 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Captographies</td>
|
|
|
|
|
<td align="left">78 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">643 days</td>
|
|
|
|
|
<td align="left">643 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Save Dnipro</td>
|
|
|
|
|
<td align="left">74 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">PGKN</td>
|
|
|
|
|
<td align="left">67 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Netlight</td>
|
|
|
|
|
<td align="left">60 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">MSHO</td>
|
|
|
|
|
<td align="left">57 days</td>
|
|
|
|
|
<td align="left">36 days</td>
|
|
|
|
|
<td align="left">65 days</td>
|
|
|
|
|
<td align="left">65 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Futurium</td>
|
|
|
|
|
<td align="left">52 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">MSIN</td>
|
|
|
|
|
<td align="left">52 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">79 days</td>
|
|
|
|
|
<td align="left">94 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">test</td>
|
|
|
|
|
<td align="left">52 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">329 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">ifgi</td>
|
|
|
|
|
<td align="left">51 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">#STROPDEAER</td>
|
|
|
|
|
<td align="left">50 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">ATSO</td>
|
|
|
|
|
<td align="left">48 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">279 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">2</td>
|
|
|
|
|
<td align="left">46 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">310 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">MakeLight</td>
|
|
|
|
|
<td align="left">46 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Haus B</td>
|
|
|
|
|
<td align="left">44 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">239 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Futurium 2021</td>
|
|
|
|
|
<td align="left">43 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">329 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">IVKOWeek</td>
|
|
|
|
|
<td align="left">42 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">DBDS</td>
|
|
|
|
|
<td align="left">41 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">GIZ Clean Air Day Project</td>
|
|
|
|
|
<td align="left">36 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">edu</td>
|
|
|
|
|
<td align="left">36 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">TKS Bonn</td>
|
|
|
|
|
<td align="left">32 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">HU Explorers</td>
|
|
|
|
|
<td align="left">28 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">319 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">321heiss</td>
|
|
|
|
|
<td align="left">24 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">43 days</td>
|
|
|
|
|
<td align="left">241 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">SUGUCS</td>
|
|
|
|
|
<td align="left">9 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">53 days</td>
|
|
|
|
|
<td align="left">85 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">APPI</td>
|
|
|
|
|
<td align="left">3 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">7 days</td>
|
|
|
|
|
<td align="left">28 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">MSKE</td>
|
|
|
|
|
<td align="left">3 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">7 days</td>
|
|
|
|
|
<td align="left">49 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">PMSI</td>
|
|
|
|
|
<td align="left">3 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">4 days</td>
|
|
|
|
|
<td align="left">34 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">RSS</td>
|
|
|
|
|
<td align="left">3 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">28 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">CS:iDrop</td>
|
|
|
|
|
<td align="left">2 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">36 days</td>
|
|
|
|
|
<td align="left">44 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">UrbanGarden</td>
|
|
|
|
|
<td align="left">2 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">12 days</td>
|
|
|
|
|
<td align="left">21 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Balthasar-Neumann-Schule 1</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Bestäuberprojekt</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Che Aria Tira?</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Data4City</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">HBG Bonn</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Haus C</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Haus D</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">IntegrA</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Koerber-Stiftung</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">Natlab Ökologie</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">Raumanmeri</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="odd">
|
|
|
|
|
<td align="left">SekSeeland</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr class="even">
|
|
|
|
|
<td align="left">clevermint</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">0 days</td>
|
|
|
|
|
<td align="left">330 days</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
<p>The time of activity averages at only 89 days, though there are boxes
|
|
|
|
|
with 643 days of activity, spanning a large chunk of openSenseMap’s
|
|
|
|
|
existence.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="by-year-of-registration" class="section level2">
|
|
|
|
|
<h2>…by year of registration</h2>
|
|
|
|
|
<p>This is less useful, as older boxes are active for a longer time by
|
|
|
|
|
definition. If you have an idea how to compensate for that, please send
|
|
|
|
|
a <a href="https://github.com/sensebox/opensensmapr/pulls">Pull
|
|
|
|
|
Request</a>!</p>
|
|
|
|
|
<div class="sourceCode" id="cb13"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="co"># </span><span class="al">NOTE</span><span class="co">: boxes older than 2016 missing due to missing updatedAt in database</span></span>
|
|
|
|
|
<span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a>duration <span class="ot">=</span> boxes <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">year =</span> <span class="fu">cut</span>(<span class="fu">as.Date</span>(createdAt), <span class="at">breaks =</span> <span class="st">'year'</span>)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb13-4"><a href="#cb13-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">group_by</span>(year) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb13-5"><a href="#cb13-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">filter</span>(<span class="sc">!</span><span class="fu">is.na</span>(updatedAt)) <span class="sc">%>%</span></span>
|
|
|
|
|
<span id="cb13-6"><a href="#cb13-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(<span class="at">duration =</span> <span class="fu">difftime</span>(updatedAt, createdAt, <span class="at">units=</span><span class="st">'days'</span>))</span>
|
|
|
|
|
<span id="cb13-7"><a href="#cb13-7" aria-hidden="true" tabindex="-1"></a></span>
|
|
|
|
|
<span id="cb13-8"><a href="#cb13-8" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplot</span>(duration, <span class="fu">aes</span>(<span class="at">x =</span> <span class="fu">substr</span>(<span class="fu">as.character</span>(year), <span class="dv">0</span>, <span class="dv">4</span>), <span class="at">y =</span> duration)) <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb13-9"><a href="#cb13-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">geom_boxplot</span>() <span class="sc">+</span></span>
|
|
|
|
|
<span id="cb13-10"><a href="#cb13-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">coord_flip</span>() <span class="sc">+</span> <span class="fu">ylab</span>(<span class="st">'Duration active in Days'</span>) <span class="sc">+</span> <span class="fu">xlab</span>(<span class="st">'Year of Registration'</span>)</span></code></pre></div>
|
|
|
|
|
<p><img src="data:image/png;base64,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
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="more-visualisations" class="section level1">
|
|
|
|
|
<h1>More Visualisations</h1>
|
|
|
|
|
<p>Other visualisations come to mind, and are left as an exercise to the
|
|
|
|
|
reader. If you implemented some, feel free to add them to this vignette
|
|
|
|
|
via a <a href="https://github.com/sensebox/opensensmapr/pulls">Pull
|
|
|
|
|
Request</a>.</p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>growth by phenomenon</li>
|
|
|
|
|
<li>growth by location -> (interactive) map</li>
|
|
|
|
|
<li>set inactive rate in relation to total box count</li>
|
|
|
|
|
<li>filter timespans with big dips in growth rate, and extrapolate the
|
|
|
|
|
amount of senseBoxes that could be on the platform today, assuming there
|
|
|
|
|
were no production issues ;)</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- code folding -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- dynamically load mathjax for compatibility with self-contained -->
|
|
|
|
|
<script>
|
|
|
|
|
(function () {
|
|
|
|
|
var script = document.createElement("script");
|
|
|
|
|
script.type = "text/javascript";
|
|
|
|
|
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
|
|
|
|
|
document.getElementsByTagName("head")[0].appendChild(script);
|
|
|
|
|
})();
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|