1
0
Fork 0
mirror of https://github.com/sensebox/opensensmapr synced 2025-02-22 06:23:57 +01:00
opensensmapR/inst/doc/osem-intro.html

870 lines
110 KiB
HTML
Raw Permalink Normal View History

2023-02-23 15:12:46 +01:00
<!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" />
2023-03-10 10:32:36 +01:00
<meta name="date" content="2023-03-08" />
2023-02-23 15:12:46 +01:00
<title>Exploring the openSenseMap Dataset</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">Exploring the openSenseMap Dataset</h1>
<h4 class="author">Norwin Roosen</h4>
2023-03-10 10:32:36 +01:00
<h4 class="date">2023-03-08</h4>
2023-02-23 15:12:46 +01:00
<p>This package provides data ingestion functions for almost any data
stored on the open data platform for environmental sensordata <a href="https://opensensemap.org" class="uri">https://opensensemap.org</a>. Its main goals are to provide
means for:</p>
<ul>
<li>big data analysis of the measurements stored on the platform</li>
<li>sensor metadata analysis (sensor counts, spatial distribution,
temporal trends)</li>
</ul>
<div id="exploring-the-dataset" class="section level3">
<h3>Exploring the dataset</h3>
<p>Before we look at actual observations, lets get a grasp of the
openSenseMap datasets structure.</p>
<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="fu">library</span>(magrittr)</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(opensensmapr)</span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a></span>
2023-03-10 10:32:36 +01:00
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="co"># all_sensors = osem_boxes(cache = &#39;.&#39;)</span></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a>all_sensors <span class="ot">=</span> <span class="fu">readRDS</span>(<span class="st">&#39;boxes_precomputed.rds&#39;</span>) <span class="co"># read precomputed file to save resources </span></span></code></pre></div>
2023-02-23 15:12:46 +01:00
<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="fu">summary</span>(all_sensors)</span></code></pre></div>
2023-03-10 10:32:36 +01:00
<pre><code>## boxes total: 11390
2023-02-23 15:12:46 +01:00
##
## boxes by exposure:
## indoor mobile outdoor unknown
2023-03-10 10:32:36 +01:00
## 2364 590 8417 19
2023-02-23 15:12:46 +01:00
##
## boxes by model:
## custom hackair_home_v2 homeEthernet
2023-03-10 10:32:36 +01:00
## 2800 73 73
2023-02-23 15:12:46 +01:00
## homeEthernetFeinstaub homeV2Ethernet homeV2EthernetFeinstaub
## 55 21 40
## homeV2Lora homeV2Wifi homeV2WifiFeinstaub
2023-03-10 10:32:36 +01:00
## 240 577 743
2023-02-23 15:12:46 +01:00
## homeWifi homeWifiFeinstaub luftdaten_pms1003
## 215 222 9
## luftdaten_pms1003_bme280 luftdaten_pms3003 luftdaten_pms3003_bme280
## 10 1 7
## luftdaten_pms5003 luftdaten_pms5003_bme280 luftdaten_pms7003
## 7 60 6
## luftdaten_pms7003_bme280 luftdaten_sds011 luftdaten_sds011_bme280
2023-03-10 10:32:36 +01:00
## 78 286 3066
2023-02-23 15:12:46 +01:00
## luftdaten_sds011_bmp180 luftdaten_sds011_dht11 luftdaten_sds011_dht22
2023-03-10 10:32:36 +01:00
## 114 135 2552
2023-02-23 15:12:46 +01:00
##
## $last_measurement_within
## 1h 1d 30d 365d never
2023-03-10 10:32:36 +01:00
## 0 0 4151 5909 2062
2023-02-23 15:12:46 +01:00
##
## oldest box: 2016-08-09 19:34:42 (OBS Bohmte UK_02)
2023-03-10 10:32:36 +01:00
## newest box: 2023-02-28 09:47:17 (bitburg)
2023-02-23 15:12:46 +01:00
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
2023-03-10 10:32:36 +01:00
## 1.000 4.000 5.000 4.994 5.000 76.000</code></pre>
2023-02-23 15:12:46 +01:00
<p>This gives a good overview already: As of writing this, there are
more than 700 sensor stations, of which ~50% are currently running. Most
of them are placed outdoors and have around 5 sensors each. The oldest
station is from May 2014, while the latest station was registered a
couple of minutes ago.</p>
<p>Another feature of interest is the spatial distribution of the boxes:
<code>plot()</code> can help us out here. This function requires a bunch
of optional dependencies though.</p>
2023-03-10 10:32:36 +01:00
<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><span class="fu">plot</span>(all_sensors)</span></code></pre></div>
<p><img src="data:image/png;base64,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
2023-02-23 15:12:46 +01:00
<p>It seems we have to reduce our area of interest to Germany.</p>
<p>But what do these sensor stations actually measure? Lets find out.
<code>osem_phenomena()</code> gives us a named list of of the counts of
each observed phenomenon for the given set of sensor stations:</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>phenoms <span class="ot">=</span> <span class="fu">osem_phenomena</span>(all_sensors)</span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="fu">str</span>(phenoms)</span></code></pre></div>
2023-03-10 10:32:36 +01:00
<pre><code>## List of 3298
## $ Temperatur : int 9405
## $ rel. Luftfeuchte : int 8315
## $ PM10 : int 8148
## $ PM2.5 : int 8136
## $ Luftdruck : int 5668
## $ Beleuchtungsstärke : int 1670
## $ UV-Intensität : int 1660
## $ Temperature : int 644
2023-02-23 15:12:46 +01:00
## $ Humidity : int 473
2023-03-10 10:32:36 +01:00
## $ VOC : int 423
## $ Luftfeuchte : int 363
## $ Lufttemperatur : int 357
## $ CO₂ : int 305
2023-02-23 15:12:46 +01:00
## $ Pressure : int 293
2023-03-10 10:32:36 +01:00
## $ Bodenfeuchte : int 283
2023-02-23 15:12:46 +01:00
## $ Luftfeuchtigkeit : int 272
2023-03-10 10:32:36 +01:00
## $ atm. Luftdruck : int 246
2023-02-23 15:12:46 +01:00
## $ Lautstärke : int 240
## $ PM01 : int 206
## $ IAQ : int 162
## $ Kalibrierungswert : int 156
## $ rel. Luftfeuchte SCD30 : int 156
2023-03-10 10:32:36 +01:00
## $ Bodentemperatur : int 154
2023-02-23 15:12:46 +01:00
## $ Temperatur SCD30 : int 154
## $ CO2eq : int 153
## $ Windgeschwindigkeit : int 152
2023-03-10 10:32:36 +01:00
## $ pH-Wert : int 143
## $ Gesamthärte : int 142
## $ Blei : int 140
## $ Eisen : int 140
## $ Gesamthärte 2 : int 140
## $ Kupfer C : int 140
## $ Kupfer D : int 140
## $ Kupfer1 : int 140
## $ Kupfer2 : int 140
## $ Nitrat : int 140
## $ Nitrit : int 140
2023-02-23 15:12:46 +01:00
## $ GesamthaerteLabor : int 120
2023-03-10 10:32:36 +01:00
## $ CO2 : int 113
2023-02-23 15:12:46 +01:00
## $ Feinstaub PM10 : int 98
## $ Windrichtung : int 82
2023-03-10 10:32:36 +01:00
## $ rel. Luftfeuchte (HECA) : int 75
## $ Temperatur (HECA) : int 73
2023-02-23 15:12:46 +01:00
## $ Temperatura : int 69
## $ Helligkeit : int 67
## $ Feinstaub PM2.5 : int 65
## $ Taupunkt : int 62
## $ Latitude : int 61
## $ Longtitude : int 58
## $ Durchschnitt Umgebungslautstärke : int 51
## $ Minimum Umgebungslautstärke : int 51
## $ UV-Index : int 49
2023-03-10 10:32:36 +01:00
## $ Batterie : int 46
2023-02-23 15:12:46 +01:00
## $ temperature : int 46
## $ Feinstaub PM1.0 : int 41
## $ Umgebungslautstärke : int 41
## $ UV : int 40
## $ humidity : int 38
## $ Abstand nach links : int 34
## $ Beschleunigung Z-Achse : int 34
## $ Beschleunigung X-Achse : int 33
## $ Beschleunigung Y-Achse : int 33
## $ Geschwindigkeit : int 33
## $ Niederschlag : int 33
## $ Feinstaub PM25 : int 32
## $ PM1 : int 32
## $ Abstand nach rechts : int 31
## $ PM1.0 : int 30
## $ rel. Luftfeuchtigkeit : int 30
## $ Relative Humidity : int 29
## $ Sonnenstrahlung : int 29
## $ Luftdruck relativ : int 28
## $ Luftdruck absolut : int 26
## $ Rain : int 26
## $ Regenrate : int 26
## $ CO2 Konzentration : int 25
## $ RSSI : int 22
## $ gefühlte Temperatur : int 22
## $ PM 2.5 : int 21
## $ Battery : int 20
## $ Ciśnienie : int 20
2023-03-10 10:32:36 +01:00
## $ EisenLabor : int 20
2023-02-23 15:12:46 +01:00
## $ Air Pressure : int 19
## $ Regen : int 19
## $ Schall : int 19
## $ Signal : int 19
## $ Ilmanpaine : int 18
## $ Lämpötila : int 18
## $ UV Index : int 18
## $ Wind speed : int 18
## $ PM 10 : int 17
## $ PM4 : int 17
## $ Air pressure : int 16
## $ Temperatur DHT22 : int 16
## $ Wind Direction : int 16
## $ Altitude : int 15
## $ Illuminance : int 15
## $ Speed : int 15
## $ Wind Speed : int 15
## [list output truncated]</code></pre>
<p>Thats quite some noise there, with many phenomena being measured by a
single sensor only, or many duplicated phenomena due to slightly
different spellings. We should clean that up, but for now lets just
filter out the noise and find those phenomena with high sensor
numbers:</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>phenoms[phenoms <span class="sc">&gt;</span> <span class="dv">20</span>]</span></code></pre></div>
<pre><code>## $Temperatur
2023-03-10 10:32:36 +01:00
## [1] 9405
2023-02-23 15:12:46 +01:00
##
## $`rel. Luftfeuchte`
2023-03-10 10:32:36 +01:00
## [1] 8315
2023-02-23 15:12:46 +01:00
##
## $PM10
2023-03-10 10:32:36 +01:00
## [1] 8148
2023-02-23 15:12:46 +01:00
##
## $PM2.5
2023-03-10 10:32:36 +01:00
## [1] 8136
2023-02-23 15:12:46 +01:00
##
## $Luftdruck
2023-03-10 10:32:36 +01:00
## [1] 5668
2023-02-23 15:12:46 +01:00
##
## $Beleuchtungsstärke
2023-03-10 10:32:36 +01:00
## [1] 1670
2023-02-23 15:12:46 +01:00
##
## $`UV-Intensität`
2023-03-10 10:32:36 +01:00
## [1] 1660
2023-02-23 15:12:46 +01:00
##
## $Temperature
2023-03-10 10:32:36 +01:00
## [1] 644
2023-02-23 15:12:46 +01:00
##
## $Humidity
## [1] 473
##
## $VOC
2023-03-10 10:32:36 +01:00
## [1] 423
2023-02-23 15:12:46 +01:00
##
## $Luftfeuchte
2023-03-10 10:32:36 +01:00
## [1] 363
2023-02-23 15:12:46 +01:00
##
## $Lufttemperatur
2023-03-10 10:32:36 +01:00
## [1] 357
2023-02-23 15:12:46 +01:00
##
## $`CO₂`
2023-03-10 10:32:36 +01:00
## [1] 305
2023-02-23 15:12:46 +01:00
##
## $Pressure
## [1] 293
##
## $Bodenfeuchte
2023-03-10 10:32:36 +01:00
## [1] 283
2023-02-23 15:12:46 +01:00
##
## $Luftfeuchtigkeit
## [1] 272
##
## $`atm. Luftdruck`
2023-03-10 10:32:36 +01:00
## [1] 246
2023-02-23 15:12:46 +01:00
##
## $Lautstärke
## [1] 240
##
## $PM01
## [1] 206
##
## $IAQ
## [1] 162
##
## $Kalibrierungswert
## [1] 156
##
## $`rel. Luftfeuchte SCD30`
## [1] 156
##
## $Bodentemperatur
2023-03-10 10:32:36 +01:00
## [1] 154
2023-02-23 15:12:46 +01:00
##
## $`Temperatur SCD30`
## [1] 154
##
## $CO2eq
## [1] 153
##
## $Windgeschwindigkeit
## [1] 152
##
## $`pH-Wert`
2023-03-10 10:32:36 +01:00
## [1] 143
2023-02-23 15:12:46 +01:00
##
## $Gesamthärte
2023-03-10 10:32:36 +01:00
## [1] 142
2023-02-23 15:12:46 +01:00
##
## $Blei
2023-03-10 10:32:36 +01:00
## [1] 140
2023-02-23 15:12:46 +01:00
##
## $Eisen
2023-03-10 10:32:36 +01:00
## [1] 140
2023-02-23 15:12:46 +01:00
##
## $`Gesamthärte 2`
2023-03-10 10:32:36 +01:00
## [1] 140
2023-02-23 15:12:46 +01:00
##
## $`Kupfer C`
2023-03-10 10:32:36 +01:00
## [1] 140
2023-02-23 15:12:46 +01:00
##
## $`Kupfer D`
2023-03-10 10:32:36 +01:00
## [1] 140
2023-02-23 15:12:46 +01:00
##
## $Kupfer1
2023-03-10 10:32:36 +01:00
## [1] 140
2023-02-23 15:12:46 +01:00
##
## $Kupfer2
2023-03-10 10:32:36 +01:00
## [1] 140
2023-02-23 15:12:46 +01:00
##
## $Nitrat
2023-03-10 10:32:36 +01:00
## [1] 140
2023-02-23 15:12:46 +01:00
##
## $Nitrit
2023-03-10 10:32:36 +01:00
## [1] 140
##
## $GesamthaerteLabor
2023-02-23 15:12:46 +01:00
## [1] 120
##
## $CO2
2023-03-10 10:32:36 +01:00
## [1] 113
2023-02-23 15:12:46 +01:00
##
## $`Feinstaub PM10`
## [1] 98
##
## $Windrichtung
## [1] 82
##
## $`rel. Luftfeuchte (HECA)`
2023-03-10 10:32:36 +01:00
## [1] 75
2023-02-23 15:12:46 +01:00
##
## $`Temperatur (HECA)`
2023-03-10 10:32:36 +01:00
## [1] 73
2023-02-23 15:12:46 +01:00
##
## $Temperatura
## [1] 69
##
## $Helligkeit
## [1] 67
##
## $`Feinstaub PM2.5`
## [1] 65
##
## $Taupunkt
## [1] 62
##
## $Latitude
## [1] 61
##
## $Longtitude
## [1] 58
##
## $`Durchschnitt Umgebungslautstärke`
## [1] 51
##
## $`Minimum Umgebungslautstärke`
## [1] 51
##
## $`UV-Index`
## [1] 49
##
2023-03-10 10:32:36 +01:00
## $Batterie
2023-02-23 15:12:46 +01:00
## [1] 46
##
2023-03-10 10:32:36 +01:00
## $temperature
## [1] 46
2023-02-23 15:12:46 +01:00
##
## $`Feinstaub PM1.0`
## [1] 41
##
## $Umgebungslautstärke
## [1] 41
##
## $UV
## [1] 40
##
## $humidity
## [1] 38
##
## $`Abstand nach links`
## [1] 34
##
## $`Beschleunigung Z-Achse`
## [1] 34
##
## $`Beschleunigung X-Achse`
## [1] 33
##
## $`Beschleunigung Y-Achse`
## [1] 33
##
## $Geschwindigkeit
## [1] 33
##
## $Niederschlag
## [1] 33
##
## $`Feinstaub PM25`
## [1] 32
##
## $PM1
## [1] 32
##
## $`Abstand nach rechts`
## [1] 31
##
## $PM1.0
## [1] 30
##
## $`rel. Luftfeuchtigkeit`
## [1] 30
##
## $`Relative Humidity`
## [1] 29
##
## $Sonnenstrahlung
## [1] 29
##
## $`Luftdruck relativ`
## [1] 28
##
## $`Luftdruck absolut`
## [1] 26
##
## $Rain
## [1] 26
##
## $Regenrate
## [1] 26
##
## $`CO2 Konzentration`
## [1] 25
##
## $RSSI
## [1] 22
##
## $`gefühlte Temperatur`
## [1] 22
##
## $`PM 2.5`
## [1] 21</code></pre>
<p>Alright, temperature it is! Fine particulate matter (PM2.5) seems to
be more interesting to analyze though. We should check how many sensor
stations provide useful data: We want only those boxes with a PM2.5
sensor, that are placed outdoors and are currently submitting
measurements:</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>pm25_sensors <span class="ot">=</span> <span class="fu">osem_boxes</span>(</span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a> <span class="at">exposure =</span> <span class="st">&#39;outdoor&#39;</span>,</span>
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a> <span class="at">date =</span> <span class="fu">Sys.time</span>(), <span class="co"># ±4 hours</span></span>
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a> <span class="at">phenomenon =</span> <span class="st">&#39;PM2.5&#39;</span></span>
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div>
2023-03-10 10:32:36 +01:00
<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>pm25_sensors <span class="ot">=</span> <span class="fu">readRDS</span>(<span class="st">&#39;pm25_sensors.rds&#39;</span>) <span class="co"># read precomputed file to save resources </span></span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a><span class="fu">summary</span>(pm25_sensors)</span></code></pre></div>
<pre><code>## boxes total: 3011
2023-02-23 15:12:46 +01:00
##
## boxes by exposure:
## outdoor
2023-03-10 10:32:36 +01:00
## 3011
2023-02-23 15:12:46 +01:00
##
## boxes by model:
## custom hackair_home_v2 homeEthernetFeinstaub
2023-03-10 10:32:36 +01:00
## 175 8 12
2023-02-23 15:12:46 +01:00
## homeV2EthernetFeinstaub homeV2Lora homeV2Wifi
2023-03-10 10:32:36 +01:00
## 9 22 2
2023-02-23 15:12:46 +01:00
## homeV2WifiFeinstaub homeWifi homeWifiFeinstaub
2023-03-10 10:32:36 +01:00
## 132 3 32
2023-02-23 15:12:46 +01:00
## luftdaten_pms1003 luftdaten_pms1003_bme280 luftdaten_pms5003
2023-03-10 10:32:36 +01:00
## 1 3 3
2023-02-23 15:12:46 +01:00
## luftdaten_pms5003_bme280 luftdaten_pms7003 luftdaten_pms7003_bme280
2023-03-10 10:32:36 +01:00
## 10 2 28
2023-02-23 15:12:46 +01:00
## luftdaten_sds011 luftdaten_sds011_bme280 luftdaten_sds011_bmp180
2023-03-10 10:32:36 +01:00
## 117 1365 60
2023-02-23 15:12:46 +01:00
## luftdaten_sds011_dht11 luftdaten_sds011_dht22
2023-03-10 10:32:36 +01:00
## 44 983
2023-02-23 15:12:46 +01:00
##
## $last_measurement_within
## 1h 1d 30d 365d never
2023-03-10 10:32:36 +01:00
## 0 0 3011 3011 0
2023-02-23 15:12:46 +01:00
##
## oldest box: 2017-03-03 18:20:43 (Witten Heven Dorf)
2023-03-10 10:32:36 +01:00
## newest box: 2023-02-28 08:28:27 (eth0)
2023-02-23 15:12:46 +01:00
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
2023-03-10 10:32:36 +01:00
## 2.000 4.000 5.000 4.854 5.000 26.000</code></pre>
2023-02-23 15:12:46 +01:00
<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><span class="fu">plot</span>(pm25_sensors)</span></code></pre></div>
2023-03-10 10:32:36 +01:00
<p><img src="data:image/png;base64,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
2023-02-23 15:12:46 +01:00
<p>Thats still more than 200 measuring stations, we can work with
that.</p>
</div>
<div id="analyzing-sensor-data" class="section level3">
<h3>Analyzing sensor data</h3>
<p>Having analyzed the available data sources, lets finally get some
measurements. We could call <code>osem_measurements(pm25_sensors)</code>
now, however we are focusing on a restricted area of interest, the city
of Berlin. Luckily we can get the measurements filtered by a bounding
box:</p>
2023-03-10 10:32:36 +01:00
<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="fu">library</span>(sf)</span>
<span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(units)</span>
<span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(lubridate)</span>
<span id="cb13-4"><a href="#cb13-4" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(dplyr)</span></code></pre></div>
<p>Since the API takes quite long to response measurements, especially
filtered on space and time, we do not run the following chunks for
publication of the package on CRAN.</p>
<div class="sourceCode" id="cb14"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="co"># construct a bounding box: 12 kilometers around Berlin</span></span>
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a>berlin <span class="ot">=</span> <span class="fu">st_point</span>(<span class="fu">c</span>(<span class="fl">13.4034</span>, <span class="fl">52.5120</span>)) <span class="sc">%&gt;%</span></span>
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_sfc</span>(<span class="at">crs =</span> <span class="dv">4326</span>) <span class="sc">%&gt;%</span></span>
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_transform</span>(<span class="dv">3857</span>) <span class="sc">%&gt;%</span> <span class="co"># allow setting a buffer in meters</span></span>
<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_buffer</span>(<span class="fu">set_units</span>(<span class="dv">12</span>, km)) <span class="sc">%&gt;%</span></span>
<span id="cb14-6"><a href="#cb14-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_transform</span>(<span class="dv">4326</span>) <span class="sc">%&gt;%</span> <span class="co"># the opensensemap expects WGS 84</span></span>
<span id="cb14-7"><a href="#cb14-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_bbox</span>()</span>
<span id="cb14-8"><a href="#cb14-8" aria-hidden="true" tabindex="-1"></a>pm25 <span class="ot">=</span> <span class="fu">osem_measurements</span>(</span>
<span id="cb14-9"><a href="#cb14-9" aria-hidden="true" tabindex="-1"></a> berlin,</span>
<span id="cb14-10"><a href="#cb14-10" aria-hidden="true" tabindex="-1"></a> <span class="at">phenomenon =</span> <span class="st">&#39;PM2.5&#39;</span>,</span>
<span id="cb14-11"><a href="#cb14-11" aria-hidden="true" tabindex="-1"></a> <span class="at">from =</span> <span class="fu">now</span>() <span class="sc">-</span> <span class="fu">days</span>(<span class="dv">3</span>), <span class="co"># defaults to 2 days</span></span>
<span id="cb14-12"><a href="#cb14-12" aria-hidden="true" tabindex="-1"></a> <span class="at">to =</span> <span class="fu">now</span>()</span>
<span id="cb14-13"><a href="#cb14-13" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div>
<div class="sourceCode" id="cb15"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a>pm25 <span class="ot">=</span> <span class="fu">readRDS</span>(<span class="st">&#39;pm25_berlin.rds&#39;</span>) <span class="co"># read precomputed file to save resources </span></span>
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(pm25)</span></code></pre></div>
<p><img src="data:image/png;base64,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
2023-02-23 15:12:46 +01:00
<p>Now we can get started with actual spatiotemporal data analysis.
First, lets mask the seemingly uncalibrated sensors:</p>
2023-03-10 10:32:36 +01:00
<div class="sourceCode" id="cb16"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a>outliers <span class="ot">=</span> <span class="fu">filter</span>(pm25, value <span class="sc">&gt;</span> <span class="dv">100</span>)<span class="sc">$</span>sensorId</span>
<span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a>bad_sensors <span class="ot">=</span> outliers[, drop <span class="ot">=</span> <span class="cn">TRUE</span>] <span class="sc">%&gt;%</span> <span class="fu">levels</span>()</span>
<span id="cb16-3"><a href="#cb16-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-4"><a href="#cb16-4" aria-hidden="true" tabindex="-1"></a>pm25 <span class="ot">=</span> <span class="fu">mutate</span>(pm25, <span class="at">invalid =</span> sensorId <span class="sc">%in%</span> bad_sensors)</span></code></pre></div>
2023-02-23 15:12:46 +01:00
<p>Then plot the measuring locations, flagging the outliers:</p>
2023-03-10 10:32:36 +01:00
<div class="sourceCode" id="cb17"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a><span class="fu">st_as_sf</span>(pm25) <span class="sc">%&gt;%</span> <span class="fu">st_geometry</span>() <span class="sc">%&gt;%</span> <span class="fu">plot</span>(<span class="at">col =</span> <span class="fu">factor</span>(pm25<span class="sc">$</span>invalid), <span class="at">axes =</span> <span class="cn">TRUE</span>)</span></code></pre></div>
<p><img src="data:image/png;base64,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
2023-02-23 15:12:46 +01:00
<p>Removing these sensors yields a nicer time series plot:</p>
2023-03-10 10:32:36 +01:00
<div class="sourceCode" id="cb18"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a>pm25 <span class="sc">%&gt;%</span> <span class="fu">filter</span>(invalid <span class="sc">==</span> <span class="cn">FALSE</span>) <span class="sc">%&gt;%</span> <span class="fu">plot</span>()</span></code></pre></div>
<p><img src="data:image/png;base64,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
2023-02-23 15:12:46 +01:00
<p>Further analysis: comparison with LANUV data <code>TODO</code></p>
</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>