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" / >
< meta name = "date" content = "2017-08-23" / >
< 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 >
< h4 class = "date" > < em > 2017-08-23< / em > < / h4 >
< 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 >
< blockquote >
< p > < em > Please note:< / em > The openSenseMap API is sometimes a bit unstable when streaming long responses, which results in < code > curl< / code > complaining about < code > Unexpected EOF< / code > . This bug is being worked on upstream. Meanwhile you have to retry the request when this occurs.< / p >
< / blockquote >
< 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 > ## box total: 701
##
## boxes by exposure:
## indoor outdoor unknown
## 127 553 21
##
## 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
## 40 3 14
## luftdaten_sds011_dht22
## 187
##
## $last_measurement_within
## 1h 1d 30d 365d never
2017-08-23 16:07:05 +02:00
## 312 327 418 554 63
2017-08-23 02:07:56 +02:00
##
## oldest box: 2014-05-28 15:36:14 (CALIMERO)
## newest box: 2017-08-23 08:44:14 (Messstation Steinheim am Albuch)
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 4.000 5.000 4.609 5.000 17.000< / code > < / pre >
< p > This gives a good overview already: As of writing this, there are more than 600 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 dependcies 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 191
## $ Temperatur : int 644
## $ rel. Luftfeuchte : int 531
## $ Luftdruck : int 367
## $ PM10 : int 344
## $ PM2.5 : int 344
## $ 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
## [1] 644
##
## $`rel. Luftfeuchte`
## [1] 531
##
## $Luftdruck
## [1] 367
##
## $PM10
## [1] 344
##
## $PM2.5
## [1] 344
##
## $`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 >
< pre > < code > ## box total: 236
##
## boxes by exposure:
## outdoor
## 236
##
## boxes by model:
## custom homeEthernetFeinstaub homeWifi
## 18 4 5
## homeWifiFeinstaub luftdaten_sds011 luftdaten_sds011_bme280
## 12 15 29
## luftdaten_sds011_bmp180 luftdaten_sds011_dht11 luftdaten_sds011_dht22
## 1 11 141
##
## $last_measurement_within
## 1h 1d 30d 365d never
## 230 233 234 234 2
##
## oldest box: 2016-09-11 08:17:17 (Balkon Gasselstiege)
## newest box: 2017-08-23 08:44:14 (Messstation Steinheim am Albuch)
##
## sensors per box:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.000 4.000 4.000 4.271 4.000 10.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, 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)
< 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 >
< span class = "st" > < / span > < span class = "kw" > st_buffer< / span > (units::< span class = "kw" > set_units< / span > (< span class = "dv" > 12< / span > , km)) %> %
< 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 > ,
< span class = "dt" > from =< / span > < span class = "kw" > now< / span > () -< span class = "st" > < / span > < span class = "kw" > days< / span > (< span class = "dv" > 7< / span > ), < span class = "co" > # defaults to 2 days< / span >
< 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 >
< p > < img src = "data:image/png;base64,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
2017-08-23 02:07:56 +02:00
< p > Now we can get started with actual spatiotemporal data analysis. First plot the measuring locations:< / p >
< div class = "sourceCode" > < pre class = "sourceCode r" > < code class = "sourceCode r" > pm25_sf =< span class = "st" > < / span > < span class = "kw" > osem_as_sf< / span > (pm25)
< span class = "kw" > plot< / span > (< span class = "kw" > st_geometry< / span > (pm25_sf), < span class = "dt" > axes =< / span > T)< / code > < / pre > < / div >
< p > < img src = "data:image/png;base64,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
2017-08-23 16:07:05 +02:00
< p > further analysis: < 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 >