mirror of
https://github.com/sensebox/opensensmapr
synced 2025-02-22 14:53:57 +01:00
661 lines
73 KiB
HTML
661 lines
73 KiB
HTML
![]() |
<!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="Jan Stenkamp" />
|
||
|
|
||
|
<meta name="date" content="2023-03-30" />
|
||
|
|
||
|
<title>Einführung in opensensmapR</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">Einführung in opensensmapR</h1>
|
||
|
<h4 class="author">Jan Stenkamp</h4>
|
||
|
<h4 class="date">2023-03-30</h4>
|
||
|
|
||
|
|
||
|
|
||
|
<p>Das package opensensmapR kann dazu genutzt werden Daten von der <a href="https://opensensemap.org">openSenseMap</a> in R abzufragen und zu
|
||
|
analysieren. Damit lassen sich sowohl die Daten einzelner senseBoxen,
|
||
|
aber vor allem auch mehrere senseBoxen gleichzeitig analysieren.</p>
|
||
|
<div id="installation" class="section level3">
|
||
|
<h3>Installation</h3>
|
||
|
<p>Um das package in R zu nutzen, muss dieses zuerst installiert werden.
|
||
|
Das ist möglich mit dem Befehl
|
||
|
<code>install.packages('opensensmapr')</code>. Danach kann das package
|
||
|
geladen werden durch den Befehl <code>library(opensensmapr)</code>.</p>
|
||
|
</div>
|
||
|
<div id="alle-boxen-abfragen" class="section level3">
|
||
|
<h3>Alle Boxen abfragen</h3>
|
||
|
<p>Um einen Überblick über alle auf der openSenseMap registrierten Boxen
|
||
|
zu bekommen, kann man diese mit dem Befehl <code>osem_boxes()</code>
|
||
|
über die API beziehen. Außerdem werden die Boxen dabei automatisch
|
||
|
vorbereitet, um sie für weitere Analysen zu nutzen. Die Daten werden
|
||
|
dann in der Variablen <code>all_sensors</code> gespeichert, um diese
|
||
|
weiter zu verwenden.</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>(opensensmapr)</span>
|
||
|
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>all_sensors <span class="ot">=</span> <span class="fu">osem_boxes</span>()</span></code></pre></div>
|
||
|
<p>Daraufhin ermöglicht die Funktion <code>summary(boxes)</code>, eine
|
||
|
Zusammenfassung der Metadaten aller Boxen anzuzeigen:</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="fu">summary</span>(all_sensors)</span></code></pre></div>
|
||
|
<pre><code>## boxes total: 11589
|
||
|
##
|
||
|
## boxes by exposure:
|
||
|
## indoor mobile outdoor unknown
|
||
|
## 2435 598 8537 19
|
||
|
##
|
||
|
## boxes by model:
|
||
|
## custom hackair_home_v2 homeEthernet
|
||
|
## 2917 75 73
|
||
|
## homeEthernetFeinstaub homeV2Ethernet homeV2EthernetFeinstaub
|
||
|
## 55 20 40
|
||
|
## homeV2Lora homeV2Wifi homeV2WifiFeinstaub
|
||
|
## 248 595 751
|
||
|
## homeWifi homeWifiFeinstaub luftdaten_pms1003
|
||
|
## 214 223 9
|
||
|
## luftdaten_pms1003_bme280 luftdaten_pms3003 luftdaten_pms3003_bme280
|
||
|
## 10 1 7
|
||
|
## luftdaten_pms5003 luftdaten_pms5003_bme280 luftdaten_pms7003
|
||
|
## 7 61 6
|
||
|
## luftdaten_pms7003_bme280 luftdaten_sds011 luftdaten_sds011_bme280
|
||
|
## 81 287 3103
|
||
|
## luftdaten_sds011_bmp180 luftdaten_sds011_dht11 luftdaten_sds011_dht22
|
||
|
## 116 135 2555
|
||
|
##
|
||
|
## $last_measurement_within
|
||
|
## 1h 1d 30d 365d never
|
||
|
## 3659 3778 4319 6029 2094
|
||
|
##
|
||
|
## oldest box: 2016-08-09 19:34:42 (OBS Bohmte UK_02)
|
||
|
## newest box: 2023-03-29 17:40:59 (Test Nr.1)
|
||
|
##
|
||
|
## sensors per box:
|
||
|
## Min. 1st Qu. Median Mean 3rd Qu. Max.
|
||
|
## 1.00 4.00 5.00 5.02 5.00 76.00</code></pre>
|
||
|
<p>So werden hier unter anderem die Anzahl aller Boxen in dem Datensatz
|
||
|
(<code>boxes total</code>), die Anzahl der Boxen die Messungen in
|
||
|
verschiedenen Zeitintervallen durchgeführt haben
|
||
|
(<code>$last_measurement_within</code>) und die zuletzt erstellte Box
|
||
|
dargestellt (<code>newest_box</code>).</p>
|
||
|
<p>Mit der Funktion <code>plot(boxes)</code> können wir dann auch noch
|
||
|
alle Stationen auf einer Karte anzeigen.</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,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGACAMAAAByRC0tAAAApVBMVEUAAAAAADoAAGYAOjoAOmYAOpAAZpAAZrYil+Y6AAA6ADo6AGY6Ojo6OmY6OpA6kLY6kNth0E9mAABmADpmAGZmOgBmOjpmZgBmZmZmkJBmtrZmtv+QOgCQkGaQkJCQtpCQtraQtv+Q2/+2ZgC2kDq2tpC2tra2//++vr7bkDrb29vb2//b/7bb/9vb///fU2v/tmb/tpD/25D/29v//7b//9v///9TDaxIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAgAElEQVR4nO2djYLkto2g4b31jidO9kYzuex6p53k3JdEney5+ibdev9HuxIJgAD/RImUStVN2FNdJVEURX4CAZCiYOrSpULg1gXoct/SAepSJR2gLlXSAepSJR2gLlXSAepSJR2gLlXSAepSJR2gLlXSAepSJR2gLlXSAepSJR2gLlXSAepSJR2gLlXSAepSJR2gLlXSAepSJYUAQZcuEIOlFKBiIru8XekAdamSDlCXKukAdamSDlCXKkkB9PLZ2dn/8rfiQ7u8N1nWQI/wqfzQLu9NlgC6aqKvKw7t8t5kAaDnVP+VOLTLe5M8QE/w/a+rDu3y3iQH0OtDyvxJHtrlvUkGoIz5kzy0y3uTNEA58yd5aJf3JkmAnuDDhkO7vDfpgcQuVdKHMrpUSQeoS5UkAXr5w09/tPLz73oX1iUlaYB+T9i4b8uHdnlv0gHqUiUdoC5V0gHqUiUdoC5V0gHqUiVpgL78+a9W/vJjB6hLStKBxH/+neQf5Yd2eW/SI9FdqiQN0OtDdii1A9Rllsx0DpyN+NyfyuiSlhRArw+MzZOaF51fl6HLe5P0fCCezvrc5wN1ScpqDZQ/tMt7k4wNhCqo20BdMpL2wmhSa/LJsA5Qlx4H6lIpHaAuVdIDiV2qpAcSu1RJd+O7VEkPJHapkq6BulRJDyR2qZIeSOxSJT0O1KVYYjMwOkBdSgWmSKN3gLoUCohPf+vytu3JurwRWQdQX2CqiycrNdDrw8ISiR2g9yYrbaDXh4VFEjtA701WemHP+VV+O0Bdpm5EC7lcLvwpNnTJSgeIxNCDn2JDl7x0gFAu/qfc0CUpHSCUDtA26QChdIC2SQeIpNtAm+RNATTHKSAli0d3L2yLnA2gZPvnKRBJxnE0H0Y2cNRllZwDIN3G2PZjKJaAJF6RIwKI5sPbFbzLzQHixnfkQIiPUx8SlvnTfU8DxHlEVFKTi1hxpfjluNPuLDcEKKlDAm1SqJ8WxZHHvyqvYekKafgocqmpOgk33AD2crkdQNSaMY7Aa3WbegszGiDMcCU8wzCoQkdaMzLIuCCJSonXE9ZDaYGPlFsAxEQQEkyNpkdWdcDVdorW3szDNfkQEu5ySeXHrIBQI+laSdfWMni3kwMB8mvAtYVkaFSWikraAh9zglXFtuwMxoTasy0zGfLVnxCjvQEKlQjdk/Q59yz63ha6R0HWhp61tT+Y0w+Mt9Y8R7WlrJ9TIbQnQP69Cr5oLW/oEu2MDkszdjDjtW48aiCiP1CkhwqoCrtNGbTsA1AAykSWAlALSoaibPkZtQJoNUKzBT2Ich1JULR5GKFDirAgewBk7tTR+bATV/yk/ugGcQ2smof2NTKgt+j/2Quz+ofLtC6DqBRhyPsNMfbLqD3XqiJUHEx5FG4rTYaKXl2fUkJl4ucpsqwDiBtivTTSOu5Cyptf1Y27Fr6m0lwm1WrUKuvK72dauK00mX+pigqv7sz/ocEcqRC5rZai8gpvL1j21GWmjnD1GbvyopxUXeu76FwA4S593fxhyi3rYxJOl6uQxTNvJmhF07UWcUctJeT0ZddZcjnMn38zV19W4bayZF6ZpEbxe6Up1DtJBRQ7+TaEZj+vqs5qoqcrtF8xPWso8Kr3hADpaFe4F/8wUzKhO6JUs69mZ2wQQtluP5UPRvCNVYhPsqrDLe3V7w4AyYtze6xfNqnQDyYLLe+Cy1xH0Er91lrSp5Y3kEq6CJBfX+IEyUvdoQZaAuSNYqlrpPsPGJaJXWprGxAShQ29CiBXhrJLayxo/ET30M2ESsdVYv76JGDh/Dn+mTxhu2sr3FaQTJYbPczRzcIxjEyu4cWFgKoRAVy2ICJuvQKisktrKpDjh9pZ+qjtBv3CJmo+ptYUINY0QUWoOvR1LhNl/3Lq/DVCOG8oT0+0SteKmNpRKmnlJ1rTu4FaETSxXvN1U5lHGF5J0OqxdIXZJU7BpwoviFPxfekKFhygKYuc69qYZXXN+UfzWlOLA/5bKltQKRF4ueyscBmhzcjELnzkOzJdM3Qt2euJXnEjgGK1E8EC7wabADdMAW7yV6adaJ5OWTWuaPC0DKbwg1MZaxjyE4ddvitvMSLLF78mbf5i4pHj0oTRZOopGt8tj5Wf9hNaIrkvXAGJVhpMIw6lKmi5fgrEjcxvmxqk0rtL1Pw01EBrhVqRClugaWsA0m3NX/F8kgLcStFocaRXoXK3ntsRFIobc0XlVAnQpI4BM6Sipe3zyGZtxY7BjxuLaEKQPmEyglYFUFrbQlqCSAdGiLjozqeFXNmtKVIEULKBVwgQr25666iVhTgFnS+4XsGJrIDzIBRYHN7elkZ0QWHC7mlSW6jMIqyIBfCrNFL0Ybajy6JtZReUFlf+q+Eub5tUBZPf5XOj08s7JMzsnOLX5s4A+TeX+O2zrssH8hZ1R6oCWC8sU+tZdNY8uBwMLUDkG5904hhDGRJ0+5xCBRWIqtY9AdLnDDepX+zNYhk8QxMz0UgsNFFW86xbOsGnQdj4gaaHKRIIy9QLx+DvR0RLHARQzJsMtb+nMQK95euUZBtBfLYWOA/wYr4XEqRowE7MnckvYLnq8bSsyfnc4sz+ERvjKIAyRZI177ebSxQNY8VaCmIJOTE178XkWQaQLR9mP7fyIJrd+eITDUiM47hFpQz478SCLYVfzwGQK4xs9eA+lgGKLEGoZeIccHK4zB9lACF4NnvTyjBQ58pKAyhCurkzGsTn+YTui0n4O+Tw3B4gZ0aAM318gCA6mTkgKGP4SIDGuQ/L80PDXqYwSIrtvuwke4sP7YmNAK6SEwPk3+Dqe6yil+GZpVHJZByNS8YgKYTiUPg5ZorMDTzTs+CF2WEvewQMFhdDjB2Dmz+GeeP1c+BarqiLEwNkxKtZ8P7G9i1Iq2K50Veg2K2EfXTx3igSOru86zXpuycnRvtQ0BC1j4HG/jdbQgMBNBYO6ubl9DbQqkh0wctWGhUKBMtaMbLPlIsHuqbDsNAiGkX8XAFCHTMXchi5v5oGBMkiZExq68xX18VpvLDY3WA68lhtLm57TL0ztUlJA7fcG1dVP1M8sD07bIw5R/KeIRmtjsG+ylLDf0b6AAtYm0cfTyCxvjjdAEvbrpoo9caMJmVNtKb033lrgg5ztdSiibIuSZQfVDEWGVRwZP8olMgwv2chQzTEJ6/WFwB6TvVfUwuAkgXz3S/cmLwI26HMGKWvNCvgfbv2VKA6KsIFGBshbwAgtkR17S95JUsAPaXf2dwAoBwRKh1ZQ8miYLvCdhXEJ3YAWU0zkqWD+dtPxmq0u8Y3wY+KhGbtBlFjmW2vDynzB09WW+pUvr4KmnhqREIGqzJgmDYDZNmjUwwzlBdJCime6zm0BjKWUgsv7AbCQ0WqUR04JS5JelvG/MFzVdZaCiA/usPBxeT1DJN1jqbNAJmojzCifEwEQFpGG128I5FeCZs93KRLNk+ktRLbcuYPna2OoIxdHCSjK02UZUAVspkfmMg2pi2DCx5qG2hSECl+BgoPZS+6ps6qJRiv9tTPWNJvyRxS255g4Y2XwRSHDReTfE7dn3gFQBMnEgcMNkJTetnB4WjxiDwu5vIuiiBQWojtIBIKBQ5piAqtpXQGC3wuSc6fknP6iqUikAj1BKWDm+mpsqsur1AAffPZiGKA7CdCcgkoum67qNbUOsnsuFyT4C4sv/jMiApK65OMNeHqTPWpmQ9rqq5wW/SUDXRQzNS3Js/aGqgRoPgy+XHzHzPl
|
||
|
<p>Die Funktion <code>osem_phenomena(boxes)</code> gibt uns außerdem
|
||
|
Informationen darüber, welche Phänomene von den Stationen gemessen
|
||
|
werden.</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 3640
|
||
|
## $ Temperatur : int 9560
|
||
|
## $ rel. Luftfeuchte : int 8436
|
||
|
## $ PM10 : int 8239
|
||
|
## $ PM2.5 : int 8224
|
||
|
## $ Luftdruck : int 5776
|
||
|
## $ Beleuchtungsstärke : int 1712
|
||
|
## $ UV-Intensität : int 1700
|
||
|
## $ Temperature : int 663
|
||
|
## $ Humidity : int 489
|
||
|
## $ VOC : int 432
|
||
|
## $ Lufttemperatur : int 373
|
||
|
## $ Luftfeuchte : int 371
|
||
|
## $ CO₂ : int 325
|
||
|
## $ Pressure : int 308
|
||
|
## $ Bodenfeuchte : int 302
|
||
|
## $ Luftfeuchtigkeit : int 275
|
||
|
## $ Lautstärke : int 255
|
||
|
## $ atm. Luftdruck : int 251
|
||
|
## $ PM01 : int 213
|
||
|
## $ Bodentemperatur : int 163
|
||
|
## $ IAQ : int 162
|
||
|
## $ Kalibrierungswert : int 156
|
||
|
## $ rel. Luftfeuchte SCD30 : int 156
|
||
|
## $ Temperatur SCD30 : int 154
|
||
|
## $ CO2eq : int 153
|
||
|
## $ Windgeschwindigkeit : int 153
|
||
|
## $ 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 118
|
||
|
## $ Feinstaub PM10 : int 101
|
||
|
## $ Windrichtung : int 82
|
||
|
## $ rel. Luftfeuchte (HECA) : int 78
|
||
|
## $ Temperatur (HECA) : int 76
|
||
|
## $ Helligkeit : int 70
|
||
|
## $ Temperatura : int 69
|
||
|
## $ Feinstaub PM2.5 : int 68
|
||
|
## $ Taupunkt : int 62
|
||
|
## $ Latitude : int 61
|
||
|
## $ Longtitude : int 58
|
||
|
## $ Durchschnitt Umgebungslautstärke : int 51
|
||
|
## $ Minimum Umgebungslautstärke : int 51
|
||
|
## $ UV-Index : int 49
|
||
|
## $ temperature : int 49
|
||
|
## $ Batterie : int 46
|
||
|
## $ Feinstaub PM1.0 : int 44
|
||
|
## $ Umgebungslautstärke : int 41
|
||
|
## $ humidity : int 41
|
||
|
## $ UV : int 40
|
||
|
## $ 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
|
||
|
## $ PM1 : int 33
|
||
|
## $ Feinstaub PM25 : int 32
|
||
|
## $ PM1.0 : int 32
|
||
|
## $ Relative Humidity : int 32
|
||
|
## $ Abstand nach rechts : int 31
|
||
|
## $ rel. Luftfeuchtigkeit : int 30
|
||
|
## $ 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
|
||
|
## $ Battery : int 21
|
||
|
## $ PM 2.5 : int 21
|
||
|
## $ Ciśnienie : int 20
|
||
|
## $ EisenLabor : int 20
|
||
|
## $ Air Pressure : int 19
|
||
|
## $ PM4 : int 19
|
||
|
## $ Regen : int 19
|
||
|
## $ Schall : int 19
|
||
|
## $ Signal : int 19
|
||
|
## $ UV Index : int 19
|
||
|
## $ Ilmanpaine : int 18
|
||
|
## $ Lämpötila : int 18
|
||
|
## $ Wind Direction : int 18
|
||
|
## $ Wind speed : int 18
|
||
|
## $ PM 10 : int 17
|
||
|
## $ Air pressure : int 16
|
||
|
## $ Altitude : int 16
|
||
|
## $ Illuminance : int 16
|
||
|
## $ Power Supply : int 16
|
||
|
## $ Temperatur DHT22 : int 16
|
||
|
## $ Wind Speed : int 16
|
||
|
## [list output truncated]</code></pre>
|
||
|
</div>
|
||
|
<div id="daten-filtern" class="section level3">
|
||
|
<h3>Daten filtern</h3>
|
||
|
<p>Mit PM10 als einem der am häufigsten gemessenen Phänomene, wollen wir
|
||
|
nun weiterarbeiten. Dazu können wir zum Beispiel mit den folgenden
|
||
|
Parametern, nur die Boxen abfragen, die PM10 gemessen haben. Dabei wird
|
||
|
die Abfrage durch das setzen der Parameter in der Klammer wie folgt
|
||
|
gefiltert:</p>
|
||
|
<ul>
|
||
|
<li><code>exposure = 'outdoor'</code> : gib nur Boxen zurück die draußen
|
||
|
stehen.</li>
|
||
|
<li><code>date = Sys.time()</code> : gib nur Boxen zurück, die zum Datum
|
||
|
Sys.time() (+-4 Stunden) eine Messung geschickt haben. Sys.time() steht
|
||
|
dabei für die aktuelle Zeit.</li>
|
||
|
<li><code>phenomenon = 'PM10'</code> : gib nur Boxen zurück, die einen
|
||
|
PM10 Sensor haben.</li>
|
||
|
</ul>
|
||
|
<p>Die Abfrage der gefilterten Boxen kann ggfs. ein paar Minuten dauern,
|
||
|
da die openSenseMap API zuerst die prall gefüllte Datenbank entsprechend
|
||
|
filtern muss.</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>pm10_sensors <span class="ot">=</span> <span class="fu">osem_boxes</span>(</span>
|
||
|
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a> <span class="at">exposure =</span> <span class="st">'outdoor'</span>,</span>
|
||
|
<span id="cb7-3"><a href="#cb7-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="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a> <span class="at">phenomenon =</span> <span class="st">'PM10'</span></span>
|
||
|
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div>
|
||
|
<p>Auch von den gefilterten Daten können wir uns wieder die
|
||
|
Zusammenfassung und eine Karte anschauen:</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><span class="fu">summary</span>(pm10_sensors)</span></code></pre></div>
|
||
|
<pre><code>## boxes total: 3009
|
||
|
##
|
||
|
## boxes by exposure:
|
||
|
## outdoor
|
||
|
## 3009
|
||
|
##
|
||
|
## boxes by model:
|
||
|
## custom hackair_home_v2 homeEthernetFeinstaub
|
||
|
## 172 7 13
|
||
|
## homeV2EthernetFeinstaub homeV2Lora homeV2Wifi
|
||
|
## 7 23 2
|
||
|
## homeV2WifiFeinstaub homeWifi homeWifiFeinstaub
|
||
|
## 125 2 30
|
||
|
## luftdaten_pms1003 luftdaten_pms1003_bme280 luftdaten_pms5003
|
||
|
## 1 4 3
|
||
|
## luftdaten_pms5003_bme280 luftdaten_pms7003 luftdaten_pms7003_bme280
|
||
|
## 11 2 30
|
||
|
## luftdaten_sds011 luftdaten_sds011_bme280 luftdaten_sds011_bmp180
|
||
|
## 110 1382 60
|
||
|
## luftdaten_sds011_dht11 luftdaten_sds011_dht22
|
||
|
## 40 985
|
||
|
##
|
||
|
## $last_measurement_within
|
||
|
## 1h 1d 30d 365d never
|
||
|
## 2985 3009 3009 3009 0
|
||
|
##
|
||
|
## oldest box: 2017-03-03 18:20:43 (Witten Heven Dorf)
|
||
|
## newest box: 2023-03-26 17:59:20 (airRohr)
|
||
|
##
|
||
|
## sensors per box:
|
||
|
## Min. 1st Qu. Median Mean 3rd Qu. Max.
|
||
|
## 2.000 4.000 5.000 4.849 5.000 29.000</code></pre>
|
||
|
<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><span class="fu">plot</span>(pm10_sensors)</span></code></pre></div>
|
||
|
<p><img src="data:image/png;base64,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
|
||
|
<p>Wie man sieht, sind jetzt alle Stationen outdoor und es gibt keine
|
||
|
Station mehr, die noch nie eine Messung durchgeführt hat. Das liegt an
|
||
|
den Parametern, die wir bei der Abfrage der Daten in der Funktion
|
||
|
gesetzt haben; alle Stationen sollten draußen sein und vor kurzem eine
|
||
|
Messung geschickt haben.</p>
|
||
|
</div>
|
||
|
<div id="daten-analysieren" class="section level3">
|
||
|
<h3>Daten analysieren</h3>
|
||
|
<p>Bis jetzt haben wir uns ja nur die Stationen angeschaut. Nun wollen
|
||
|
wir auch einen genaueren Blick auf die eigentlichen Messungen werfen.
|
||
|
Die Messungen die an die openSenseMap geschickt werden, können wir mit
|
||
|
der Funktion <code>osem_measurements()</code> abfragen.</p>
|
||
|
<p>Auch dabei können wir verschiedene Filter setzen. Unter anderem
|
||
|
wollen wir nur Messungen von Stationen in der Nähe von Münster erhalten.
|
||
|
Dazu erstellen wir zunächst ein Objekt, dass die Koordinaten von Münster
|
||
|
enthält:</p>
|
||
|
<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><span class="co"># Zunächst werden ein paar Pakete geladen, die es uns ermöglichen mit den räumlichen Daten zu arbeiten</span></span>
|
||
|
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(sf)</span>
|
||
|
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(units)</span>
|
||
|
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(lubridate)</span>
|
||
|
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(dplyr)</span>
|
||
|
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a><span class="co"># Dann erstellen wir eine sogenannte Boundingbox, in unserem Fall ein 20 km x 20 km Quadrat um das Zentrum von Münster.</span></span>
|
||
|
<span id="cb11-7"><a href="#cb11-7" aria-hidden="true" tabindex="-1"></a>muenster <span class="ot">=</span> <span class="fu">st_point</span>(<span class="fu">c</span>(<span class="fl">7.63</span>, <span class="fl">51.95</span>)) <span class="sc">%>%</span> <span class="co"># Koordinate Münster Zentrum</span></span>
|
||
|
<span id="cb11-8"><a href="#cb11-8" 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 class="co"># Koordinatensystem für geographische Koordinaten</span></span>
|
||
|
<span id="cb11-9"><a href="#cb11-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_transform</span>(<span class="dv">3857</span>) <span class="sc">%>%</span> <span class="co"># Koordinatensystem das Meter versteht</span></span>
|
||
|
<span id="cb11-10"><a href="#cb11-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_buffer</span>(<span class="fu">set_units</span>(<span class="dv">10</span>, km)) <span class="sc">%>%</span> <span class="co"># 10 km Radius um Münster</span></span>
|
||
|
<span id="cb11-11"><a href="#cb11-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_transform</span>(<span class="dv">4326</span>) <span class="sc">%>%</span> <span class="co"># Wieder Umwandlung in geographische Koordinaten, welche die openSenseMap API erwartet</span></span>
|
||
|
<span id="cb11-12"><a href="#cb11-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">st_bbox</span>() <span class="co"># erstellen eines boundingbox objektes</span></span></code></pre></div>
|
||
|
<p><code>osem_measurements()</code> nimmt ähnliche Parameter wie
|
||
|
<code>osem_boxes()</code> entgegen.</p>
|
||
|
<ul>
|
||
|
<li><code>bbox = muenster</code> : Gib nur Messungen von Boxen zurück,
|
||
|
die innerhalb unserer boundingbox liegen.</li>
|
||
|
<li><code>phenomenon = 'PM10'</code> : Gib nur PM10 Messungen
|
||
|
zurück.</li>
|
||
|
<li><code>from = now() - days(3)</code>: Gib Messungen zurück, die nicht
|
||
|
älter als drei Tage sind.</li>
|
||
|
<li><code>to = now()</code> : Gib nur Messungen zurück, die bis jetzt
|
||
|
gemessen wurden.</li>
|
||
|
</ul>
|
||
|
<p>Hierbei ersetzen die Parameter <code>from</code> und <code>to</code>,
|
||
|
den Parameter <code>date</code>, den wir zuvor in der Funktion
|
||
|
<code>osem_boxes()</code> benutzt haben. Beide Arten von Datumsfilter,
|
||
|
können in beiden Funktionen genutzt werden.</p>
|
||
|
<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>pm10_muenster <span class="ot">=</span> <span class="fu">osem_measurements</span>(</span>
|
||
|
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a> muenster, </span>
|
||
|
<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a> <span class="at">phenomenon =</span> <span class="st">'PM10'</span>,</span>
|
||
|
<span id="cb12-4"><a href="#cb12-4" 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="cb12-5"><a href="#cb12-5" aria-hidden="true" tabindex="-1"></a> <span class="at">to =</span> <span class="fu">now</span>()</span>
|
||
|
<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a>)</span></code></pre></div>
|
||
|
<p>Die PM10-Messungen können wir nun einfach als Zeitreihe
|
||
|
darstellen:</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">plot</span>(pm10_muenster)</span></code></pre></div>
|
||
|
<p><img src="data:image/png;base64,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
|
||
|
<p>Jeder Punkt stellt hier eine Messung dar und jede Box hat eine andere
|
||
|
Farbe. Wie man sieht sind die meisten Messungen unter einem Wert von 50,
|
||
|
jedoch gibt es auch ein paar Ausreißer und eine Station die dauerhaft
|
||
|
Werte um 150 misst.</p>
|
||
|
<p>Für weitere Beispiele lohnt sich ein Blick in die folgenden
|
||
|
Dokumente: - <a href="https://github.com/sensebox/opensensmapR/blob/master/inst/doc/osem-history_revised.html" class="uri">https://github.com/sensebox/opensensmapR/blob/master/inst/doc/osem-history_revised.html</a>
|
||
|
- <a href="https://sensebox.github.io/opensensmapR/inst/doc/osem-intro.html" class="uri">https://sensebox.github.io/opensensmapR/inst/doc/osem-intro.html</a></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>
|