<!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-03-08" / >
< title > Exploring the openSenseMap Dataset< / title >
< script > / / P a n d o c 2 . 9 a d d s a t t r i b u t e s o n b o t h h e a d e r a n d d i v . W e r e m o v e t h e f o r m e r ( t o
// 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" > b o d y {
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 >
< h4 class = "date" > 2023-03-08< / h4 >
< 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 >
< span id = "cb1-4" > < a href = "#cb1-4" aria-hidden = "true" tabindex = "-1" > < / a > < span class = "co" > # all_sensors = osem_boxes(cache = ' .' )< / 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" > ' boxes_precomputed.rds' < / span > ) < span class = "co" > # read precomputed file to save resources < / span > < / span > < / code > < / pre > < / div >
< 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 >
< pre > < code > ## boxes total: 11390
##
## boxes by exposure:
## indoor mobile outdoor unknown
## 2364 590 8417 19
##
## boxes by model:
## custom hackair_home_v2 homeEthernet
## 2800 73 73
## homeEthernetFeinstaub homeV2Ethernet homeV2EthernetFeinstaub
## 55 21 40
## homeV2Lora homeV2Wifi homeV2WifiFeinstaub
## 240 577 743
## 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
## 78 286 3066
## luftdaten_sds011_bmp180 luftdaten_sds011_dht11 luftdaten_sds011_dht22
## 114 135 2552
##
## $last_measurement_within
## 1h 1d 30d 365d never
## 0 0 4151 5909 2062
##
## oldest box: 2016-08-09 19:34:42 (OBS Bohmte UK_02)
## newest box: 2023-02-28 09:47:17 (bitburg)
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 4.000 5.000 4.994 5.000 76.000< / code > < / pre >
< 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 >
< 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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
< 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 >
< 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
## $ Humidity : int 473
## $ VOC : int 423
## $ Luftfeuchte : int 363
## $ Lufttemperatur : int 357
## $ CO₂ : int 305
## $ Pressure : int 293
## $ Bodenfeuchte : int 283
## $ Luftfeuchtigkeit : int 272
## $ atm. Luftdruck : int 246
## $ Lautstärke : int 240
## $ PM01 : int 206
## $ IAQ : int 162
## $ Kalibrierungswert : int 156
## $ rel. Luftfeuchte SCD30 : int 156
## $ Bodentemperatur : int 154
## $ Temperatur SCD30 : int 154
## $ CO2eq : int 153
## $ Windgeschwindigkeit : int 152
## $ 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
## $ GesamthaerteLabor : int 120
## $ CO2 : int 113
## $ Feinstaub PM10 : int 98
## $ Windrichtung : int 82
## $ rel. Luftfeuchte (HECA) : int 75
## $ Temperatur (HECA) : int 73
## $ 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
## $ Batterie : int 46
## $ 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
## $ EisenLabor : int 20
## $ 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 let’ s 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" > > < / span > < span class = "dv" > 20< / span > ]< / span > < / code > < / pre > < / div >
< pre > < code > ## $Temperatur
## [1] 9405
##
## $`rel. Luftfeuchte`
## [1] 8315
##
## $PM10
## [1] 8148
##
## $PM2.5
## [1] 8136
##
## $Luftdruck
## [1] 5668
##
## $Beleuchtungsstärke
## [1] 1670
##
## $`UV-Intensität`
## [1] 1660
##
## $Temperature
## [1] 644
##
## $Humidity
## [1] 473
##
## $VOC
## [1] 423
##
## $Luftfeuchte
## [1] 363
##
## $Lufttemperatur
## [1] 357
##
## $`CO₂`
## [1] 305
##
## $Pressure
## [1] 293
##
## $Bodenfeuchte
## [1] 283
##
## $Luftfeuchtigkeit
## [1] 272
##
## $`atm. Luftdruck`
## [1] 246
##
## $Lautstärke
## [1] 240
##
## $PM01
## [1] 206
##
## $IAQ
## [1] 162
##
## $Kalibrierungswert
## [1] 156
##
## $`rel. Luftfeuchte SCD30`
## [1] 156
##
## $Bodentemperatur
## [1] 154
##
## $`Temperatur SCD30`
## [1] 154
##
## $CO2eq
## [1] 153
##
## $Windgeschwindigkeit
## [1] 152
##
## $`pH-Wert`
## [1] 143
##
## $Gesamthärte
## [1] 142
##
## $Blei
## [1] 140
##
## $Eisen
## [1] 140
##
## $`Gesamthärte 2`
## [1] 140
##
## $`Kupfer C`
## [1] 140
##
## $`Kupfer D`
## [1] 140
##
## $Kupfer1
## [1] 140
##
## $Kupfer2
## [1] 140
##
## $Nitrat
## [1] 140
##
## $Nitrit
## [1] 140
##
## $GesamthaerteLabor
## [1] 120
##
## $CO2
## [1] 113
##
## $`Feinstaub PM10`
## [1] 98
##
## $Windrichtung
## [1] 82
##
## $`rel. Luftfeuchte (HECA)`
## [1] 75
##
## $`Temperatur (HECA)`
## [1] 73
##
## $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
##
## $Batterie
## [1] 46
##
## $temperature
## [1] 46
##
## $`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" > ' outdoor' < / 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" > ' PM2.5' < / span > < / span >
< span id = "cb9-5" > < a href = "#cb9-5" aria-hidden = "true" tabindex = "-1" > < / a > )< / span > < / code > < / pre > < / div >
< 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" > ' pm25_sensors.rds' < / 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
##
## boxes by exposure:
## outdoor
## 3011
##
## boxes by model:
## custom hackair_home_v2 homeEthernetFeinstaub
## 175 8 12
## homeV2EthernetFeinstaub homeV2Lora homeV2Wifi
## 9 22 2
## homeV2WifiFeinstaub homeWifi homeWifiFeinstaub
## 132 3 32
## luftdaten_pms1003 luftdaten_pms1003_bme280 luftdaten_pms5003
## 1 3 3
## luftdaten_pms5003_bme280 luftdaten_pms7003 luftdaten_pms7003_bme280
## 10 2 28
## luftdaten_sds011 luftdaten_sds011_bme280 luftdaten_sds011_bmp180
## 117 1365 60
## luftdaten_sds011_dht11 luftdaten_sds011_dht22
## 44 983
##
## $last_measurement_within
## 1h 1d 30d 365d never
## 0 0 3011 3011 0
##
## oldest box: 2017-03-03 18:20:43 (Witten Heven Dorf)
## newest box: 2023-02-28 08:28:27 (eth0)
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.000 4.000 5.000 4.854 5.000 26.000< / code > < / pre >
< 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 >
< p > < img src = "data:image/png;base64,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
< 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, let’ s 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 >
< 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" > %> %< / 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" > %> %< / 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" > %> %< / 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" > %> %< / 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" > %> %< / 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" > ' PM2.5' < / 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" > ' pm25_berlin.rds' < / 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,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGACAMAAAByRC0tAAAAe1BMVEUAAAAAADoAAGYAOjoAOpAAZmYAZrYil+Yo4uU6AAA6ADo6AGY6OpA6kNth0E9mAABmADpmAGZmOpBmZgBmkJBmtv+QOgCQOjqQZgCQ2/+enp62ZgC2/9u2///NC7zbkDrb2//b///fU2v1xxD/tmb/25D//7b//9v////HLagQAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAgAElEQVR4nO2dC4OcOHLH2cvF1OaybB53vljO4RzYa33/TxjVSw8QNI1mpumZ+tvD9ICQStKPUknQ3Z03mRrUPdoA03PLADI1yQAyNckAMjXJADI1yQAyNckAMjXJADI1yQAyNckAMjXJADI1yQAyNckAMjXJADI1yQAyNckAMjXJADI1yQAyNelFAepM71uvDtBLZma6nAwgU5MMIFOTDCBTkwwgU5MMIFOTDCBTkwwgU5MMIFV9Tcx0QwaQqPPPY+uVZACxumxrukMGEKujIexJjL2SDCAWBUAWBd0vA4hlAJ2UAcSyIeykDCCWBdEnZQCJbBp/TgaQyhYST8kAMjXJADI1yQAyNckAMjXJADI1yQAyNckAMjXJADI1qRWgn5/5Da5/+scdBZjejxoB+tb9xi++64uGzB4rW4k+pTaAfn6O2Hz78z8PF3BF2b2wc2oD6I/f/6Yvv28MYk/SKXY3/qTMA7EMoJNqjoHEBT17DGQAnVTrLOyP33kWtuF/nqdPtj4sybQvWwcSGUDnZACxbAg7KVtIZBlAJ2ULiSwD6KRsGi+yhcRzeq2FxN2Pgb2knsjUK8k8kKlJtpBoapItJJqaZOtApiYZQKYmtc7CMPL5/g4WEk0n9QIA0fwrm9Cfzcz0jGoHSNCxafzHVDtAP34lgJ78iUTTSZkHMjWpFSBcA/rkNZxuysz0jGqexgeGfvmyvRBtAL1z2TqQqUkGkKlJBpCpSQaQqUkGkKlJBpCpSQaQqUkGkKlJBpCpSQaQqUkGkKlJBpCpSQaQqUkGkMremXpKBpDI3ht/TgYQyz6d46QMIJYBdFIGEMsAOikDSGQx0DkZQCqbhZ2SAWRqkgFkapIBZGqSAWRqkgFkapIBZGqSAWRqkgFkapIBZGqSAaSylehTagXovXxbj31f2Ek1AvR+vq2n043pLrUB9H6+K8Me5zip1o+4s6/9/uAyD8SyIeykmmOg9/JtPRZEn1PrLOz9fFuP8XNKtg5kapIBZGqSLSSammQLiaYm2TTe1KTXWkh8vq/9Np2SeSBTk2wh0dQkW0g0NcnWgUxNMoBUFu+f0ssAJN+berSAK8pmjOfUOo1P0/Unfx7IHuc4p0YPJJOv5/dAHQ1hT2LsldQ+C8P51zsAyDzQObXHQF9/+WIAfVy9QBD9rfvtPQBkUfQpvcQs7Mev//L8AFkMdE4vMo3/+bl7doBsGn9StpAoMoDOyQBi2fvCTsoAYhlAJ2UAsSyIPikDSGQx0DkZQCxbBzopA4hlMdBJGUAsA+ikDCCW3Qs7KQNIZCHQORlAKuPnlAwgU5MMIFOTDCBTkwwglcVAp2QAiTr/PLZeSQYQyxYST8oAYhlAJ2UAsQygkzKARLYSfU4GkMgAOicDiGVD2EkZQCwD6KQMIJYBdFIGkMgWEs/JAFJZDH1KBpCpSQaQqUkGkKlJrQDZt/V8cDUCZN/W89HVBpB9V8aHVxtA7+drv00nZR7I1KTmGMi+redjaxOgb91ff/3ly83z7dt6Pri2APrjP//371++b2LRVoDp/WgboBAT//FfBpBpX1sA/fx7GL4OeCBbSPzg2oyBvn9iiPZlC4kfXTaNNzVpDyCdYW0OT/a136YdgH5+vhkCmQf68NoBKHMvm7KFxI+uXQ+0wUQuW0j84NqLgX782+2V6FMFmN6PdgH69VYQfbKAS8ri/VPaHcI+Hczke9dt3jZ7ll6xt/WcU2MQ7b923W8//v2f24mfpFPsjYUn1RhEfw3B81fyPk8+jTeATqotiCa/w8me/IlEA+ikdoew7vZKNDqpn//nn94D2ce7nFTrE4kKF6PUltlDZQCd0+bzQL8fm7x/4+nX982vbX6STrEh7KS2PRCOYE0rQNsFXFAG0EntD2EvANGT9IkBdFK3Y6Cjg9kdBVxRtpB4TvbhCiqLoU/pyDS+24yQTxZgej/a80D8jE+YYG3O0U8WYHo/OnAz9duf/7m1SniyANP70YGbqd//9I+t+xQnCzC9Hx24mYoe6AMAZEH0KR2KgY4/GXSsgCvKpvHntDuNp3lYcD5fG1aCnqRTbCHxpGwdiGUAnZQBxDKATqrteaCTBVxRFgOd020PtP2kxukCLimbhZ3SgSGsYRVxowDT+9EBgBpWETcKML0fmQcyNek2QD9+/RgxkOmUjj3O0TARexqALIg+JVsHEtk0/pwMIJYtJJ6UAcQygE7KAGIZQCdlAIksBjonA0hls7BTMoBMTTKATE0ygExNMoBMTWoFyL6t54OrESD7tp6PrjaA7LsyPrzaALKv/f7wMg9kalJzDGTf1vOx1ToLs2/r+eCydSBTkwwgU5NsIdG0IQA4kMoWEk11gfzckE3jTVVBtt3Tay0k2td+P7kg2+7JPJCpKsi2e7KFxCfVsRC3pQD/BjHQe1pIfK7RFvyh7m0q4i1mYecKuKKe610ZkG0fKwOI9WTvC4Ns+1i1AvRNv0lj66Okn6RPDKCTag2if/kSwiD8FGkD6E0F/hr8vMg0/ufnEEI/OUBPFgNRiPvqE7EjepmFxK/b34bwNJ3yXLMwfxUn9EILiV8/PT1AzybItg9Uawwk2Pzx+9b9eAPolQTZ9oFqn4XxIPbzswH0toJs+4ql3IqzbB3oaQX+Dfi5WYYB9Lx62VlYLTfIthsygEwk8BVSINtuyAC6hh69pgO8srTe6w2gg3roOhD414tnDrEJ2y5o/2wDSPTQlWjItq+R9+2cGbI1ajYLO6jH3gsD6ih4nazTtnZYAQGvbug+fWCAiovrwQARP/AqWWfb+lFIJqzS3R7+Pi5A4PP2elmAxnG8wxDpu42+agyvIdvWD0oBUElW27fQhwUIsi3qJWOgUX6OGkLuZwMU8PU+PMxVmUF5Gh+DAqTFYQuiNwTZlvRys7Ax2x6yg7uuSgRk29VpB0vIMl6cBltDVzxz85jKAHp53Q/QNg+QbW/vloObzml1GsR/+7Zt68MC9IpLL3cDtD2AnQEINo9UTlPnVxm/YIfrpI8LUH6hvvA68L0xUG0RuDi83rs9uEC2vX1Moq81QRBDsw3DRB8YoCTwL+yM7p2F7ZVf7UKettXTZ1s5H7LXi5IUIL/IL0G1aRjLALrZg69ffrY9klxn/fUzFt2eowYVHMEXE/m0u0Br2zgDyEt7w+MMyLbHUssZB5yToAGb5WTDF6z2Jhg3rTOANFSEh91MhWxbOVpSQn2aOnx5lnNuMWhl2xgYF4WDHM/LiQ4ozsK2zPtYAOWdoa9BXPsDP4oG/A4/C4KSx4B4blKgJ/wsRrBiu55txUzzQjJ8auUkfSiAwKeGiK/pReDH41ri29vExuxMwsAvQ2LIO7w40dHfrjwhQlMFKB+rilKFn3cB0F4Qd0829S1u4KE3U3fql3sQX/LD+4oz2fm4MhyOudeGsCy77AD4fKf+VPVQgA6CAf5lQlzItzE8ZDMeCVAlMsmOpa0vg9tsHFM5SuOyncWgnW2zXUV+ab+QFQ3c6KtHAgT+EBiQbZuUMtIrS16DjF6PGMKUZNg67tNR7ch8W8qFXW59NsRSyjNkUIMi2snMymIpv9EFDwQIsu2ejqa7LfB5k6qn5nZ80Oc5xr6FnRQl+hWHkRKHWVi2P56X1TY/LQcIVm2c0QbZttSTAXRw0NvMSj0PyDUGGgI8CCDuuS0cNI0MJD7np9pwsPAUoNVUTHxx2EOEazPLmJGvH38CgJbX4P02rBx34kbHgo4e53hzgjJLttOkn+Qr6mdoyJJOBYbUZ8XkJ+rwBosRrGbD5QA6hoP2sp5wgqBlObHTMpIeFAMpv7CT
< p > Now we can get started with actual spatiotemporal data analysis.
First, lets mask the seemingly uncalibrated sensors:< / p >
< 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" > > < / 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" > %> %< / 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 >
< p > Then plot the measuring locations, flagging the outliers:< / p >
< 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" > %> %< / span > < span class = "fu" > st_geometry< / span > () < span class = "sc" > %> %< / 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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
< p > Removing these sensors yields a nicer time series plot:< / p >
< 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" > %> %< / span > < span class = "fu" > filter< / span > (invalid < span class = "sc" > ==< / span > < span class = "cn" > FALSE< / span > ) < span class = "sc" > %> %< / span > < span class = "fu" > plot< / span > ()< / span > < / code > < / pre > < / div >
< p > < img src = "data:image/png;base64,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
< 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 >