You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
opensensmapR/inst/doc/osem-intro.html

363 lines
423 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="Norwin Roosen" />
<meta name="date" content="2018-05-26" />
<title>Exploring the openSenseMap Dataset</title>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
div.sourceCode { overflow-x: auto; }
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
code > span.dt { color: #902000; } /* DataType */
code > span.dv { color: #40a070; } /* DecVal */
code > span.bn { color: #40a070; } /* BaseN */
code > span.fl { color: #40a070; } /* Float */
code > span.ch { color: #4070a0; } /* Char */
code > span.st { color: #4070a0; } /* String */
code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
code > span.ot { color: #007020; } /* Other */
code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
code > span.fu { color: #06287e; } /* Function */
code > span.er { color: #ff0000; font-weight: bold; } /* Error */
code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code > span.cn { color: #880000; } /* Constant */
code > span.sc { color: #4070a0; } /* SpecialChar */
code > span.vs { color: #4070a0; } /* VerbatimString */
code > span.ss { color: #bb6688; } /* SpecialString */
code > span.im { } /* Import */
code > span.va { color: #19177c; } /* Variable */
code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code > span.op { color: #666666; } /* Operator */
code > span.bu { } /* BuiltIn */
code > span.ex { } /* Extension */
code > span.pp { color: #bc7a00; } /* Preprocessor */
code > span.at { color: #7d9029; } /* Attribute */
code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
</style>
<link href="data:text/css;charset=utf-8,body%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Amargin%3A%201em%20auto%3B%0Amax%2Dwidth%3A%20700px%3B%0Aoverflow%3A%20visible%3B%0Apadding%2Dleft%3A%202em%3B%0Apadding%2Dright%3A%202em%3B%0Afont%2Dfamily%3A%20%22Open%20Sans%22%2C%20%22Helvetica%20Neue%22%2C%20Helvetica%2C%20Arial%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2014px%3B%0Aline%2Dheight%3A%201%2E35%3B%0A%7D%0A%23header%20%7B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%23TOC%20%7B%0Aclear%3A%20both%3B%0Amargin%3A%200%200%2010px%2010px%3B%0Apadding%3A%204px%3B%0Awidth%3A%20400px%3B%0Aborder%3A%201px%20solid%20%23CCCCCC%3B%0Aborder%2Dradius%3A%205px%3B%0Abackground%2Dcolor%3A%20%23f6f6f6%3B%0Afont%2Dsize%3A%2013px%3B%0Aline%2Dheight%3A%201%2E3%3B%0A%7D%0A%23TOC%20%2Etoctitle%20%7B%0Afont%2Dweight%3A%20bold%3B%0Afont%2Dsize%3A%2015px%3B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%23TOC%20ul%20%7B%0Apadding%2Dleft%3A%2040px%3B%0Amargin%2Dleft%3A%20%2D1%2E5em%3B%0Amargin%2Dtop%3A%205px%3B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%23TOC%20ul%20ul%20%7B%0Amargin%2Dleft%3A%20%2D2em%3B%0A%7D%0A%23TOC%20li%20%7B%0Aline%2Dheight%3A%2016px%3B%0A%7D%0Atable%20%7B%0Amargin%3A%201em%20auto%3B%0Aborder%2Dwidth%3A%201px%3B%0Aborder%2Dcolor%3A%20%23DDDDDD%3B%0Aborder%2Dstyle%3A%20outset%3B%0Aborder%2Dcollapse%3A%20collapse%3B%0A%7D%0Atable%20th%20%7B%0Aborder%2Dwidth%3A%202px%3B%0Apadding%3A%205px%3B%0Aborder%2Dstyle%3A%20inset%3B%0A%7D%0Atable%20td%20%7B%0Aborder%2Dwidth%3A%201px%3B%0Aborder%2Dstyle%3A%20inset%3B%0Aline%2Dheight%3A%2018px%3B%0Apadding%3A%205px%205px%3B%0A%7D%0Atable%2C%20table%20th%2C%20table%20td%20%7B%0Aborder%2Dleft%2Dstyle%3A%20none%3B%0Aborder%2Dright%2Dstyle%3A%20none%3B%0A%7D%0Atable%20thead%2C%20table%20tr%2Eeven%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0A%7D%0Ap%20%7B%0Amargin%3A%200%2E5em%200%3B%0A%7D%0Ablockquote%20%7B%0Abackground%2Dcolor%3A%20%23f6f6f6%3B%0Apadding%3A%200%2E25em%200%2E75em%3B%0A%7D%0Ahr%20%7B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%3A%20none%3B%0Aborder%2Dtop%3A%201px%20solid%20%23777%3B%0Amargin%3A%2028px%200%3B%0A%7D%0Adl%20%7B%0Amargin%2Dleft%3A%200%3B%0A%7D%0Adl%20dd%20%7B%0Amargin%2Dbottom%3A%2013px%3B%0Amargin%2Dleft%3A%2013px%3B%0A%7D%0Adl%20dt%20%7B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0Aul%20%7B%0Amargin%2Dtop%3A%200%3B%0A%7D%0Aul%20li%20%7B%0Alist%2Dstyle%3A%20circle%20outside%3B%0A%7D%0Aul%20ul%20%7B%0Amargin%2Dbottom%3A%200%3B%0A%7D%0Apre%2C%20code%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0Aborder%2Dradius%3A%203px%3B%0Acolor%3A%20%23333%3B%0Awhite%2Dspace%3A%20pre%2Dwrap%3B%20%0A%7D%0Apre%20%7B%0Aborder%2Dradius%3A%203px%3B%0Amargin%3A%205px%200px%2010px%200px%3B%0Apadding%3A%2010px%3B%0A%7D%0Apre%3Anot%28%5Bclass%5D%29%20%7B%0Abackground%2Dcolor%3A%20%23f7f7f7%3B%0A%7D%0Acode%20%7B%0Afont%2Dfamily%3A%20Consolas%2C%20Monaco%2C%20%27Courier%20New%27%2C%20monospace%3B%0Afont%2Dsize%3A%2085%25%3B%0A%7D%0Ap%20%3E%20code%2C%20li%20%3E%20code%20%7B%0Apadding%3A%202px%200px%3B%0A%7D%0Adiv%2Efigure%20%7B%0Atext%2Dalign%3A%20center%3B%0A%7D%0Aimg%20%7B%0Abackground%2Dcolor%3A%20%23FFFFFF%3B%0Apadding%3A%202px%3B%0Aborder%3A%201px%20solid%20%23DDDDDD%3B%0Aborder%2Dradius%3A%203px%3B%0Aborder%3A%201px%20solid%20%23CCCCCC%3B%0Amargin%3A%200%205px%3B%0A%7D%0Ah1%20%7B%0Amargin%2Dtop%3A%200%3B%0Afont%2Dsize%3A%2035px%3B%0Aline%2Dheight%3A%2040px%3B%0A%7D%0Ah2%20%7B%0Aborder%2Dbottom%3A%204px%20solid%20%23f7f7f7%3B%0Apadding%2Dtop%3A%2010px%3B%0Apadding%2Dbottom%3A%202px%3B%0Afont%2Dsize%3A%20145%25%3B%0A%7D%0Ah3%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23f7f7f7%3B%0Apadding%2Dtop%3A%2010px%3B%0Afont%2Dsize%3A%20120%25%3B%0A%7D%0Ah4%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23f7f7f7%3B%0Amargin%2Dleft%3A%208px%3B%0Afont%2Dsize%3A%20105%25%3B%0A%7D%0Ah5%2C%20h6%20%7B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Afont%2Dsize%3A%20105%25%3B%0A%7D%0Aa%20%7B%0Acolor%3A%20%230033dd%3B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0Aa%3Ahover%20%7B%0Acolor%3A%20%236666ff%3B%20%7D%0Aa%3Avisited%20%7B%0Acolor%3A%20%23800080%3B%20%7D%0Aa%3Avisited%3Ahover%20%7B%0Acolor%3A%20%23BB00BB%3B%20%7D%0Aa%5Bhref%5E%3D%22http
</head>
<body>
<h1 class="title toc-ignore">Exploring the openSenseMap Dataset</h1>
<h4 class="author"><em>Norwin Roosen</em></h4>
<h4 class="date"><em>2018-05-26</em></h4>
<p>This package provides data ingestion functions for almost any data stored on the open data platform for environemental 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"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(magrittr)
<span class="kw">library</span>(opensensmapr)
all_sensors =<span class="st"> </span><span class="kw">osem_boxes</span>()</code></pre></div>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">summary</span>(all_sensors)</code></pre></div>
<pre><code>## boxes total: 1781
##
## boxes by exposure:
## indoor mobile outdoor unknown
## 290 55 1416 20
##
## boxes by model:
## custom homeEthernet homeEthernetFeinstaub
## 336 92 49
## homeWifi homeWifiFeinstaub luftdaten_pms1003
## 193 144 1
## luftdaten_pms1003_bme280 luftdaten_pms5003_bme280 luftdaten_pms7003_bme280
## 1 5 2
## luftdaten_sds011 luftdaten_sds011_bme280 luftdaten_sds011_bmp180
## 57 197 19
## luftdaten_sds011_dht11 luftdaten_sds011_dht22
## 46 639
##
## $last_measurement_within
## 1h 1d 30d 365d never
## 929 954 1091 1428 235
##
## oldest box: 2014-05-28 15:36:14 (CALIMERO)
## newest box: 2018-05-26 10:29:27 (UOS_DDI)
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.0 4.0 4.0 4.6 5.0 33.0</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"><pre class="sourceCode r"><code class="sourceCode r">if (!<span class="kw">require</span>(<span class="st">'maps'</span>)) <span class="kw">install.packages</span>(<span class="st">'maps'</span>)
if (!<span class="kw">require</span>(<span class="st">'maptools'</span>)) <span class="kw">install.packages</span>(<span class="st">'maptools'</span>)
if (!<span class="kw">require</span>(<span class="st">'rgeos'</span>)) <span class="kw">install.packages</span>(<span class="st">'rgeos'</span>)
<span class="kw">plot</span>(all_sensors)</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"><pre class="sourceCode r"><code class="sourceCode r">phenoms =<span class="st"> </span><span class="kw">osem_phenomena</span>(all_sensors)
<span class="kw">str</span>(phenoms)</code></pre></div>
<pre><code>## List of 433
## $ Temperatur : int 1608
## $ rel. Luftfeuchte : int 1422
## $ PM10 : int 1200
## $ PM2.5 : int 1198
## $ Luftdruck : int 825
## $ Beleuchtungsstärke : int 481
## $ UV-Intensität : int 472
## $ Luftfeuchtigkeit : int 84
## $ Temperature : int 49
## $ Humidity : int 42
## $ Helligkeit : int 25
## $ Lautstärke : int 21
## $ Schall : int 20
## $ UV : int 20
## $ Pressure : int 19
## $ Licht : int 18
## $ Luftfeuchte : int 14
## $ Umgebungslautstärke : int 14
## $ Lämpötila : int 13
## $ Ilmanpaine : int 12
## $ Signal : int 12
## $ Feinstaub PM10 : int 10
## $ Feinstaub PM2.5 : int 9
## $ Kosteus : int 8
## $ Temperatur DHT22 : int 8
## $ Valonmäärä : int 8
## $ temperature : int 8
## $ PM01 : int 7
## $ UV-säteily : int 7
## $ Niederschlag : int 6
## $ UV-Strahlung : int 6
## $ Wind speed : int 6
## $ Windgeschwindigkeit : int 6
## $ humidity : int 6
## $ Ilmankosteus : int 5
## $ Wassertemperatur : int 5
## $ Windrichtung : int 5
## $ rel. Luftfeuchtigkeit : int 5
## $ Druck : int 4
## $ Light : int 4
## $ Temperature 1 : int 4
## $ UV Index : int 4
## $ UV-Säteily : int 4
## $ lautstärke : int 4
## $ rel. Luftfeuchte 1 : int 4
## $ rel. Luftfeuchte DHT22 : int 4
## $ relative Luftfeuchtigkeit : int 4
## $ Air pressure : int 3
## $ Batterie : int 3
## $ Battery : int 3
## $ DS18B20_Probe01 : int 3
## $ DS18B20_Probe02 : int 3
## $ DS18B20_Probe03 : int 3
## $ DS18B20_Probe04 : int 3
## $ DS18B20_Probe05 : int 3
## $ Licht (digital) : int 3
## $ Luftdruck (BME280) : int 3
## $ PM 10 : int 3
## $ PM 2.5 : int 3
## $ Temp : int 3
## $ Temperatur (BME280) : int 3
## $ Temperatur HDC1008 : int 3
## $ Temperatura : int 3
## $ Temperature 2 : int 3
## $ UV-Index : int 3
## $ Valoisuus : int 3
## $ Wind Gust : int 3
## $ pressure : int 3
## $ 1 : int 2
## $ 10 : int 2
## $ 2 : int 2
## $ 3 : int 2
## $ 4 : int 2
## $ 5 : int 2
## $ 6 : int 2
## $ 7 : int 2
## $ 8 : int 2
## $ 9 : int 2
## $ Air Pressure : int 2
## $ Anderer : int 2
## $ Battery voltage : int 2
## $ CO2 : int 2
## $ Feuchte : int 2
## $ Illuminance : int 2
## $ Intensity : int 2
## $ Leitfähigkeit : int 2
## $ Lichtintensität : int 2
## $ Luftdruck BMP180 : int 2
## $ Luftfeuchte (BME280) : int 2
## $ Luftqualität : int 2
## $ Lufttemperatur : int 2
## $ PM25 : int 2
## $ Radioactivity : int 2
## $ Radioaktivität : int 2
## $ Regen : int 2
## $ Relative Humidity : int 2
## $ Sound : int 2
## $ Temperatur (DHT22) : int 2
## $ Temperatur BMP180 : int 2
## [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"><pre class="sourceCode r"><code class="sourceCode r">phenoms[phenoms &gt;<span class="st"> </span><span class="dv">20</span>]</code></pre></div>
<pre><code>## $Temperatur
## [1] 1608
##
## $`rel. Luftfeuchte`
## [1] 1422
##
## $PM10
## [1] 1200
##
## $PM2.5
## [1] 1198
##
## $Luftdruck
## [1] 825
##
## $Beleuchtungsstärke
## [1] 481
##
## $`UV-Intensität`
## [1] 472
##
## $Luftfeuchtigkeit
## [1] 84
##
## $Temperature
## [1] 49
##
## $Humidity
## [1] 42
##
## $Helligkeit
## [1] 25
##
## $Lautstärke
## [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"><pre class="sourceCode r"><code class="sourceCode r">pm25_sensors =<span class="st"> </span><span class="kw">osem_boxes</span>(
<span class="dt">exposure =</span> <span class="st">'outdoor'</span>,
<span class="dt">date =</span> <span class="kw">Sys.time</span>(), <span class="co"># ±4 hours</span>
<span class="dt">phenomenon =</span> <span class="st">'PM2.5'</span>
)</code></pre></div>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">summary</span>(pm25_sensors)</code></pre></div>
<pre><code>## boxes total: 791
##
## boxes by exposure:
## outdoor
## 791
##
## boxes by model:
## custom homeEthernetFeinstaub homeWifi
## 29 37 6
## homeWifiFeinstaub luftdaten_pms1003_bme280 luftdaten_pms5003_bme280
## 57 1 1
## luftdaten_pms7003_bme280 luftdaten_sds011 luftdaten_sds011_bme280
## 2 32 137
## luftdaten_sds011_bmp180 luftdaten_sds011_dht11 luftdaten_sds011_dht22
## 14 32 443
##
## $last_measurement_within
## 1h 1d 30d 365d never
## 771 780 784 789 2
##
## oldest box: 2016-06-02 12:09:47 (BalkonBox Mindener Str.)
## newest box: 2018-05-24 20:29:50 (Stadthalle)
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.000 4.000 4.000 4.617 5.000 12.000</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plot</span>(pm25_sensors)</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, lets finally get some measurements. We could call <code>osem_measurements(pm25_sensors)</code> now, however we are focussing 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"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(sf)</code></pre></div>
<pre><code>## Linking to GEOS 3.5.1, GDAL 2.2.2, proj.4 4.9.2</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(units)</code></pre></div>
<pre><code>##
## Attaching package: 'units'</code></pre>
<pre><code>## The following object is masked from 'package:base':
##
## %*%</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(lubridate)
<span class="kw">library</span>(dplyr)
<span class="co"># construct a bounding box: 12 kilometers around Berlin</span>
berlin =<span class="st"> </span><span class="kw">st_point</span>(<span class="kw">c</span>(<span class="fl">13.4034</span>, <span class="fl">52.5120</span>)) %&gt;%
<span class="st"> </span><span class="kw">st_sfc</span>(<span class="dt">crs =</span> <span class="dv">4326</span>) %&gt;%
<span class="st"> </span><span class="kw">st_transform</span>(<span class="dv">3857</span>) %&gt;%<span class="st"> </span><span class="co"># allow setting a buffer in meters</span>
<span class="st"> </span><span class="kw">st_buffer</span>(<span class="kw">set_units</span>(<span class="dv">12</span>, km)) %&gt;%
<span class="st"> </span><span class="kw">st_transform</span>(<span class="dv">4326</span>) %&gt;%<span class="st"> </span><span class="co"># the opensensemap expects WGS 84</span>
<span class="st"> </span><span class="kw">st_bbox</span>()</code></pre></div>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">pm25 =<span class="st"> </span><span class="kw">osem_measurements</span>(
berlin,
<span class="dt">phenomenon =</span> <span class="st">'PM2.5'</span>,
<span class="dt">from =</span> <span class="kw">now</span>() -<span class="st"> </span><span class="kw">days</span>(<span class="dv">20</span>), <span class="co"># defaults to 2 days</span>
<span class="dt">to =</span> <span class="kw">now</span>()
)
<span class="kw">plot</span>(pm25)</code></pre></div>
<p><img src="data:image/png;base64,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
<p>Now we can get started with actual spatiotemporal data analysis. First, lets mask the seemingly uncalibrated sensors:</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">outliers =<span class="st"> </span><span class="kw">filter</span>(pm25, value &gt;<span class="st"> </span><span class="dv">100</span>)$sensorId
bad_sensors =<span class="st"> </span>outliers[, drop =<span class="st"> </span>T] %&gt;%<span class="st"> </span><span class="kw">levels</span>()
pm25 =<span class="st"> </span><span class="kw">mutate</span>(pm25, <span class="dt">invalid =</span> sensorId %in%<span class="st"> </span>bad_sensors)</code></pre></div>
<p>Then plot the measuring locations, flagging the outliers:</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">st_as_sf</span>(pm25) %&gt;%<span class="st"> </span><span class="kw">st_geometry</span>() %&gt;%<span class="st"> </span><span class="kw">plot</span>(<span class="dt">col =</span> <span class="kw">factor</span>(pm25$invalid), <span class="dt">axes =</span> T)</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"><pre class="sourceCode r"><code class="sourceCode r">pm25 %&gt;%<span class="st"> </span><span class="kw">filter</span>(invalid ==<span class="st"> </span><span class="ot">FALSE</span>) %&gt;%<span class="st"> </span><span class="kw">plot</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>
<!-- 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>