2017-08-23 02:07:56 +02:00
<!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" / >
2017-08-24 21:45:38 +02:00
< meta name = "date" content = "2017-08-24" / >
2017-08-23 02:07:56 +02:00
< title > Analyzing environmental sensor data from openSenseMap.org in R< / 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" > Analyzing environmental sensor data from openSenseMap.org in R< / h1 >
< h4 class = "author" > < em > Norwin Roosen< / em > < / h4 >
2017-08-24 21:45:38 +02:00
< h4 class = "date" > < em > 2017-08-24< / em > < / h4 >
2017-08-23 02:07:56 +02:00
< div id = "analyzing-environmental-sensor-data-from-opensensemap.org-in-r" class = "section level2" >
< h2 > Analyzing environmental sensor data from openSenseMap.org in R< / h2 >
< 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 >
2017-08-24 21:45:38 +02:00
< pre > < code > ## boxes total: 704
2017-08-23 02:07:56 +02:00
##
## boxes by exposure:
## indoor outdoor unknown
2017-08-24 21:45:38 +02:00
## 127 556 21
2017-08-23 02:07:56 +02:00
##
## boxes by model:
## custom homeEthernet homeEthernetFeinstaub
## 209 78 8
## homeWifi homeWifiFeinstaub luftdaten_sds011
## 106 34 22
## luftdaten_sds011_bme280 luftdaten_sds011_bmp180 luftdaten_sds011_dht11
2017-08-24 21:45:38 +02:00
## 41 3 14
2017-08-23 02:07:56 +02:00
## luftdaten_sds011_dht22
2017-08-24 21:45:38 +02:00
## 189
2017-08-23 02:07:56 +02:00
##
## $last_measurement_within
## 1h 1d 30d 365d never
2017-08-24 21:45:38 +02:00
## 0 0 0 0 704
2017-08-23 02:07:56 +02:00
##
## oldest box: 2014-05-28 15:36:14 (CALIMERO)
2017-08-24 21:45:38 +02:00
## newest box: 2017-08-24 17:38:44 (Burgweinting)
2017-08-23 02:07:56 +02:00
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
2017-08-24 21:45:38 +02:00
## 1.000 4.000 5.000 4.605 5.000 17.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 >
2017-08-23 02:07:56 +02:00
< 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 >
2017-08-24 21:45:38 +02:00
< p > < img src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGACAIAAADK+EpIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAgAElEQVR4nOydd1xT9/f/b/YgIRAgjLD3EBmKgIigICqiouCqWvdAcdRRbR3UKu5ZtY5aN1WrxcEQoSqKyJYhEPYmhEBC9h6/P97fHx8+ro9VqtLe5x8+8OaO9w2Xe97vc17nHIRWq4VgYGBgYGAGGsjPPQAYGBgYGJgPATZgMDAwMDADEtiAwcDAwMAMSGADBgMDAwMzIIENGAwMDAzMgAQ2YDAwMDAwAxLYgMHAwMDADEhgAwYDAwMDMyCBDRgMDAwMzIAENmAwMDAwMAMS2IDBwMDAwAxIYAMGAwMDAzMggQ0YDAwMDMyABDZgMDAwMDADEtiAwcDAwMAMSGADBgMDAwMzIIENGAwMDAzMgAT96S+ZmpoqFos//XVhYGBgYL40UCjU+PHjCQTCBxyL0Gq1/T6gd8BisWxtbSMiIj7lRWFgYGBgvkyys7PPnj07YcKEDzj2U6/ANBqNvr7+77///omvCwMDAwPzBTJp0iSNRvNhx8IxMBgYGBiYAQlswGBgYGBgBiSwAYOBgYGBGZDABgwGBgYGZkACGzAYGBgYmAEJbMBgYGBgYAYksAGDgYGBgRmQwAYMBgYGBmZAAhswGBgYGJgBCWzAYGBgYGAGJLABg4GBgYEZkMAGDAYGBgZmQAIbMBgYGBiYAQlswGBgYGBgBiSwAYOBgYGBGZDABgwGBgYGZkACGzAYGBgYmAEJbMBgYGBgYAYksAGDgYGBgRmQwAYMBgYGBmZAgu796datW/9z7+jo6L9zMDAwMDAwMO/LfwzYtGnT/ufeWq327xwMDAwMDAzM+/IfA9bV1fXGPerq6mJjY4uKimbMmPGpRgUDAwMDA/M/+I8BMzQ0fOUzuVx+4MCBXbt20en0tLS0sWPHftqxwcDAwMDAvBX02z7IzMyMiYmpr6/fuHHj1q1bCQTCpxwWDAwMDAzMu3mDCrG7u3vBggWjRo2i0WglJSXx8fGw9YKBgYGB+dL4rxWYVqu9ePHihg0bIAj69ddfFyxYgEAgPtPAYGBgYGBg3sV/VmCVlZVBQUELFy6cNGlSdXX1woULYesFAwMDA/PF8p8VmKenp1KpdHJy0mq1YBH2OhcvXvxE44KB+f+oVCoGg8Hj8To6OggEQnV1tVqthiBIKpVqNBodHR2JRNLd3a1SqXoP0dHRwePx+vr6BgYG1tbWFAqFSCTq6uoaGRlhsdjPdyswMDD9yX8M2ODBg8EP5eXln2kwMO9CoVC0tbVBEKSjowPewiKRKDc3F4IgPp9PJBIxGAyBQPD19a2oqCgtLRWJRDgcjkajtbW1CQQCPB7v6upKpVJRKJSuri4EQXg83tjYGKhPRSIRiUT6ZPdSWFj44sULHR2dhoYGFovV09PT0tLCYrF0dXXNzc2dnZ0ZDEZmZiYCgXBwcNBoNCUlJRAE+fv7QxBEo9GIRCIEQVgsFoFAyOVyLBZLoVDweHx6ejqHwxGJRFKptK896wuVSg0ODraxsYmJiTE2Nv6Udw0DA9O//MeAFRYWfsZxwEAQpNVqRSIRmUzu3ZKTk5OamspisUpKSjgcTmNjI9hOJBJRKJRYLNZoNGCLra2thYWFVCotLy+XSCQQBAUEBBgbG1dUVGg0muDgYKlUmpmZyeVyX7582Xt+HA6nr6+vVqv5fL61tbVEIvH09Pz2228JBAISibSwsDAyMvrg2+ns7BSLxUgkUk9PT09PD2y8f//+kydPfv311+7u7jceVVxcnJSUtHTp0oSEBCQS2dbW1tbWRqfTsVjsihUrUCjUO65YVFQE7khfX59MJqNQKKlUqlQqlUolDoeTyWR4PB6LxZLJZCaT6evrKxKJKBSKjo4OiUSytLQcNmzYli1b3n0JGBiYLwdE3+IaGo3m999/Lyws9PX1jY6O/jtiYEwm08fHp729vd/PPIBQq9VVVVWtra1qtdra2rq8vPz+/ft1dXUvXrxQq9VkMplKpQ4bNoxKpZ44cQL8gvT09MLDw/X19XE4HBKJHDNmDAaDkUgk1dXVeXl5TCYzMjLS29sbgiCVStXc3NzV1eXq6gpWWn2Ry+V3795Vq9VYLNbQ0NDIyMjY2FitVuvr64Pl3YULFxoaGvh8PrA96enpISEhEASJRKIXL160trZ2d3dzuVyBQADMZEtLC7gRFxeXqVOnnjhxws7ObtSoUR4eHiNHjpTJZBAEEYlEuVxuY2Pj5ubG5/OfP3+uUCj6jmratGnDhg2DIEipVPJ4PAiCgoOD8Xj8x3zJTCYzOztbpVLJ5XKlUglBUK+9FwqF4LcgEom4XC6bzQbjNDAwKC4utrCwgCAoIyMDj8ePGDECjgTDwPytTJo0acmSJRMnTvyAY//LgG3evDk7O3vWrFkJCQmhoaE7duzov0H+H/9OA/bo0aOEhITq6moWi6XValkslkqlotFoBAIB2AksFtve3o5CoWJiYgICAoRC4YsXL4qLixEIhIGBQUdHR2dnZ3d3t1AonDBhwrp16/plVFwut7GxUSaTtbS0iEQimUzGYrE6Ojo6OjrodLqPj4+pqWlRUVFVVZVKpdJoNHw+H4IgIpHo4eHh7u4OnG8GBgampqYIBOLhw4cJCQkkEmnZsmWlpaW1tbXNzc3g6fL39//xxx+ZTGZjYyNwFba2ttbV1eno6KhUKiwWe/XqVTT6rSmJH8aZM2du3LhBIpHIZLKOjg4SiYT+/xoXgiCBQCCXy/39/ZuamkQikZGREZFIVCgUYG7R1NTk7e3d09MzY8aM69evg/3v3bv35MmT9vZ2pVKJRqPJZDKRSKTT6UZGRjY2NsOHD/+Y1SrM3wqfz2cwGLt375ZKpXw+f9GiRcuWLev9NDExsba2FoIgPB4/ffp0U1PTzzfSfyP9ZsAsLCzy8vLMzMza29uHDx/e3Nzcf4P8P/4lBuy7776rr68Xi8U0Gs3e3r6joyM3N7erq6ulpeWVPTdt2uTk5NTe3g4iVZaWls7OznK5HIR/XtmZx+O1t7er1eri4uKmpiYOh0Mmk+Pj499/YDk5OZmZmZ2dnWw2+xXhw7Zt29zd3Q0NDWtra8Gr+cKFC62tratWrUKj0Xw+v7Gxsbi4uL6+vr6+XqvVxsTERERE9B7OZrNv3bo1YcIEKyur3tHKZDKtVgs0FK+MRK1WNzQ0MJlMMzOz1+/070ar1ebn55eXlxsaGo4ZM4bD4Tx58iQtLU2lUjk6OpaXl7u4uJSUlEilUiqVampqymQynZ2d/fz8aDQaGo1Wq9VSqVQqlZaVleXm5vJ4PAQC8eDBgzFjxnziG/k3I5FI8vLyXF1djY2NX/mopaVFLBYfPnxYoVAUFRVVVFRAEIRCoQgEgoGBwbp161avXt3e3i6Xy/X09E6fPl1QUCAUCuVy+fr165VKJZlMDgoK+tLyX+/cucNms3V1dXV0dMaPH9875+NyuV1dXeXl5QUFBVQqNTQ0FDhjBgofY8D+a9prYmLy8uVLMzOzsrIyGo3WT8P7t9DQ0JCSkhIfH9/Z2YlAIExMTEgkkqura1lZWXp6+tixYzdu3CiVStevX8/lcnuP2rdv3yvn0dHRAR6tb7/9VqFQDB8+XCaT9fT0tLe3MxiMlJQU4BCDIAiBQPj4+PylQfb09JSXl3d2dmo0GgQCMWjQIAcHBywW29bWduzYMblcrlAojIyMBg8ezGazkUjkypUr9fX1IQgik8nm5uaBgYEQBKlUqtraWgMDg75nptFoK1as6LulN+71RlAolIODw6c3XQAEAuHr6+vr69vT07Nx40YGg4FEIp2cnFxdXb29vbdv3977duDxeD09PUD8At5xra2t9+/fr6ioEIlElpaWY8eODQsL8/b29vDw+Cz38k9Fo9FUVVV1d3dzOBwul8tgMJRKJYFAcHBwQKPRDx48KC8vLy8v9/Hx2bx58+TJk8EiWyaTzZkzJzExEUzNEQgEkUgkEokSiUStVkskktDQ0JqaGjKZDNbiOjo6UVFRVCq1oaFB
2017-08-23 02:07:56 +02: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" > < 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 >
2017-08-24 21:45:38 +02:00
< pre > < code > ## List of 189
## $ Temperatur : int 647
## $ rel. Luftfeuchte : int 534
## $ Luftdruck : int 368
## $ PM10 : int 347
## $ PM2.5 : int 347
2017-08-23 02:07:56 +02:00
## $ UV-Intensität : int 255
## $ Beleuchtungsstärke : int 251
## $ Luftfeuchtigkeit : int 83
## $ Schall : int 26
## $ Helligkeit : int 20
## $ Licht : int 20
## $ UV : int 15
## $ Humidity : int 12
## $ Temperature : int 11
## $ Anderer : int 10
## $ Ilmanpaine : int 9
## $ Lämpötila : int 9
## $ Licht (digital) : int 9
## $ Valonmäärä : int 8
## $ Windgeschwindigkeit : int 8
## $ Kosteus : int 7
## $ Luftfeuchte : int 7
## $ Lautstärke : int 6
## $ Signal : int 6
## $ UV-säteily : int 6
## $ Wind speed : int 5
## $ Pressure : int 4
## $ temperature : int 4
## $ Windrichtung : int 4
## $ DS18B20_Probe01 : int 3
## $ DS18B20_Probe02 : int 3
## $ DS18B20_Probe03 : int 3
## $ DS18B20_Probe04 : int 3
## $ DS18B20_Probe05 : int 3
## $ Light : int 3
## $ Niederschlag : int 3
## $ UV Index : int 3
## $ UV-Säteily : int 3
## $ UV-Strahlung : int 3
## $ C2H5OH : int 2
## $ CO : int 2
## $ CPU-Temp : int 2
## $ Feinstaub : int 2
## $ Feinstaub PM10 : int 2
## $ Feinstaub PM2,5 : int 2
## $ H2 : int 2
## $ humidity : int 2
## $ Ilmankosteus : int 2
## $ NH3 : int 2
## $ NO2 : int 2
## $ Regen : int 2
## $ rel. Luftfeuchtigkeit : int 2
## $ Relative Humidity : int 2
## $ Temperatur BMP280 : int 2
## $ Temperatur DHT22 : int 2
## $ Temperatur HDC1008 : int 2
## $ TemperaturBME : int 2
## $ test : int 2
## $ UV-Index : int 2
## $ Wassertemperatur : int 2
## $ Wifi-Stärke : int 2
## $ Windböen : int 2
## $ Wolkenbedeckung : int 2
## $ Air Preassure : int 1
## $ Air pressure : int 1
## $ Air Temperature : int 1
## $ Akkuspannung Terrasse : int 1
## $ Akkuspannung Unten Eingang : int 1
## $ Attendance : int 1
## $ Batterie : int 1
## $ Batterieladung : int 1
## $ Battery : int 1
## $ Beleuchtungsstaerke : int 1
## $ Beleuchtungsstärke des sichtbaren Lichts: int 1
## $ Bodenfeuchte : int 1
## $ Bodentemperatur : int 1
## $ C3H8 : int 1
## $ C4H10 : int 1
## $ CH4 : int 1
## $ CO2 : int 1
## $ CO2-Konzentration : int 1
## $ Dämmerung : int 1
## $ dT : int 1
## $ Dust Sensor : int 1
## $ Dust_Concentration : int 1
## $ Eingangsspannung : int 1
## $ Feinstaub P10 : int 1
## $ Feinstaub P2.5 : int 1
## $ Feinstaubgehalt PM10 : int 1
## $ Feinstaubgehalt PM2.5 : int 1
## $ Feinstaubkonzentration : int 1
## $ Feuchte : int 1
## $ Feuchtigkeit : int 1
## $ filedData : int 1
## $ H2, LPG, CH4, CO, Alcohol : int 1
## $ Höhe : int 1
## $ Illuminance : int 1
## $ Infrared light : int 1
## $ Intensität der ultravioletten Strahlung : int 1
## [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" > < pre class = "sourceCode r" > < code class = "sourceCode r" > phenoms[phenoms > < span class = "st" > < / span > < span class = "dv" > 20< / span > ]< / code > < / pre > < / div >
< pre > < code > ## $Temperatur
2017-08-24 21:45:38 +02:00
## [1] 647
2017-08-23 02:07:56 +02:00
##
## $`rel. Luftfeuchte`
2017-08-24 21:45:38 +02:00
## [1] 534
2017-08-23 02:07:56 +02:00
##
## $Luftdruck
2017-08-24 21:45:38 +02:00
## [1] 368
2017-08-23 02:07:56 +02:00
##
## $PM10
2017-08-24 21:45:38 +02:00
## [1] 347
2017-08-23 02:07:56 +02:00
##
## $PM2.5
2017-08-24 21:45:38 +02:00
## [1] 347
2017-08-23 02:07:56 +02:00
##
## $`UV-Intensität`
## [1] 255
##
## $Beleuchtungsstärke
## [1] 251
##
## $Luftfeuchtigkeit
## [1] 83
##
## $Schall
## [1] 26< / 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 >
2017-08-24 21:45:38 +02:00
< pre > < code > ## boxes total: 240
2017-08-23 02:07:56 +02:00
##
## boxes by exposure:
## outdoor
2017-08-24 21:45:38 +02:00
## 240
2017-08-23 02:07:56 +02:00
##
## boxes by model:
## custom homeEthernetFeinstaub homeWifi
## 18 4 5
## homeWifiFeinstaub luftdaten_sds011 luftdaten_sds011_bme280
2017-08-24 21:45:38 +02:00
## 12 14 29
2017-08-23 02:07:56 +02:00
## luftdaten_sds011_bmp180 luftdaten_sds011_dht11 luftdaten_sds011_dht22
2017-08-24 21:45:38 +02:00
## 1 11 146
2017-08-23 02:07:56 +02:00
##
## $last_measurement_within
## 1h 1d 30d 365d never
2017-08-24 21:45:38 +02:00
## 0 0 0 0 240
2017-08-23 02:07:56 +02:00
##
## oldest box: 2016-09-11 08:17:17 (Balkon Gasselstiege)
2017-08-24 21:45:38 +02:00
## newest box: 2017-08-24 17:38:44 (Burgweinting)
2017-08-23 02:07:56 +02:00
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
2017-08-24 21:45:38 +02:00
## 2.000 4.000 4.000 4.275 4.000 10.000< / code > < / pre >
2017-08-23 02:07:56 +02:00
< div class = "sourceCode" > < pre class = "sourceCode r" > < code class = "sourceCode r" > < span class = "kw" > plot< / span > (pm25_sensors)< / code > < / pre > < / div >
2017-08-24 21:45:38 +02:00
< p > < img src = "data:image/png;base64,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
2017-08-23 02:07:56 +02: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, let’ s 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)
< span class = "kw" > library< / span > (units)
< span class = "kw" > library< / span > (lubridate)
2017-08-24 21:45:38 +02:00
< span class = "kw" > library< / span > (dplyr)
2017-08-23 02:07:56 +02:00
< 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 > )) %> %
< span class = "st" > < / span > < span class = "kw" > st_sfc< / span > (< span class = "dt" > crs =< / span > < span class = "dv" > 4326< / span > ) %> %
< span class = "st" > < / span > < span class = "kw" > st_transform< / span > (< span class = "dv" > 3857< / span > ) %> %< span class = "st" > < / span > < span class = "co" > # allow setting a buffer in meters< / span >
2017-08-24 21:45:38 +02:00
< span class = "st" > < / span > < span class = "kw" > st_buffer< / span > (< span class = "kw" > set_units< / span > (< span class = "dv" > 12< / span > , km)) %> %
2017-08-23 02:07:56 +02:00
< span class = "st" > < / span > < span class = "kw" > st_transform< / span > (< span class = "dv" > 4326< / span > ) %> %< span class = "st" > < / span > < span class = "co" > # the opensensemap expects WGS 84< / span >
2017-08-23 16:07:05 +02:00
< 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 > (
2017-08-23 02:07:56 +02:00
berlin,
< span class = "dt" > phenomenon =< / span > < span class = "st" > 'PM2.5'< / span > ,
2017-08-24 21:45:38 +02:00
< 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 >
2017-08-23 02:07:56 +02:00
< span class = "dt" > to =< / span > < span class = "kw" > now< / span > ()
2017-08-23 16:07:05 +02:00
)
< span class = "kw" > plot< / span > (pm25)< / code > < / pre > < / div >
2017-08-24 21:45:38 +02:00
< 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 > < span class = "st" > < / span > < span class = "dv" > 100< / span > )$sensorId
bad_sensors =< span class = "st" > < / span > outliers[, drop =< span class = "st" > < / span > T] %> %< 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) %> %< span class = "st" > < / span > < span class = "kw" > st_geometry< / span > () %> %< 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 %> %< span class = "st" > < / span > < span class = "kw" > filter< / span > (invalid ==< span class = "st" > < / span > < span class = "ot" > FALSE< / span > ) %> %< 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 >
2017-08-23 02:07:56 +02:00
< / div >
< / 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 >