15
Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole (Nova Gorica, oktober 2016) Najprej namestimo knjižnjico openair : library("openair", lib.loc="/usr/local/lib/R/site-library") 6.1 Prepoznavanje in spreminjanje časovnega zapisa a) V R uvozite oba podatkovna niza. bilje.meteo <- read.delim("bilje-meteo-primeri.txt") go.air <- read.csv("NG-air-primeri.csv") b) Uredite imena stolpcev za oba podatkovna okvirja. names(bilje.meteo)[1:9] <- c("date","p","T","rh","rain","ws","wd","glob.rad","diff.rad") c) Uredite časovni zapis - pretvorite zapis časa v pravilen format, nastavite čas v UTC. bilje.meteo$date <- as.POSIXct(strptime(bilje.meteo$date, format = "%Y-%m-%d %H:%M"), tz="Etc/GMT-1") bilje.meteo$date.UTC <- strftime(bilje.meteo$date, format = "%Y-%m-%d %H:%M", tz = "GMT") bilje.meteo$date <- as.POSIXct(strptime(bilje.meteo$date.UTC, format = "%Y-%m-%d %H:%M"), tz = "GMT") go.air$date <- as.POSIXct(strptime(go.air$date, format = "%Y-%m-%d %H:%M:%S"), tz = "Etc/GMT-1") go.air$date.UTC <- strftime(go.air$date, format = "%Y-%m-%d %H:%M", tz = "GMT") go.air$date <- as.POSIXct(strptime(go.air$date.UTC, format = "%Y-%m-%d %H:%M"), tz = "GMT") 6.2 Urejanje in združevanje podatkov a) Najpej za oba podatkovna okvirja uskladite časovni korak. Urejene podatke shranite v nov podatkovni okvir. bilje.meteo.1h <- timeAverage(bilje.meteo, avg.time = "1 hour") 1

Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri · Uvodni tečaj v analizo okoljskih podatkov: Praktični primeri dr. Asta Gregorič, Maruška Mole ... wind dir. missing

Embed Size (px)

Citation preview

Uvodni tečaj v analizo okoljskih podatkov:Praktični primeri

dr. Asta Gregorič, Maruška Mole (Nova Gorica, oktober 2016)

Najprej namestimo knjižnjico openair :

library("openair", lib.loc="/usr/local/lib/R/site-library")

6.1 Prepoznavanje in spreminjanje časovnega zapisa

a) V R uvozite oba podatkovna niza.

bilje.meteo <- read.delim("bilje-meteo-primeri.txt")go.air <- read.csv("NG-air-primeri.csv")

b) Uredite imena stolpcev za oba podatkovna okvirja.

names(bilje.meteo)[1:9] <- c("date","p","T","rh","rain","ws","wd","glob.rad","diff.rad")

c) Uredite časovni zapis - pretvorite zapis časa v pravilen format, nastavite čas v UTC.

bilje.meteo$date <- as.POSIXct(strptime(bilje.meteo$date, format = "%Y-%m-%d %H:%M"),tz="Etc/GMT-1")

bilje.meteo$date.UTC <- strftime(bilje.meteo$date, format = "%Y-%m-%d %H:%M", tz = "GMT")bilje.meteo$date <- as.POSIXct(strptime(bilje.meteo$date.UTC, format = "%Y-%m-%d %H:%M"),

tz = "GMT")

go.air$date <- as.POSIXct(strptime(go.air$date, format = "%Y-%m-%d %H:%M:%S"),tz = "Etc/GMT-1")

go.air$date.UTC <- strftime(go.air$date, format = "%Y-%m-%d %H:%M", tz = "GMT")go.air$date <- as.POSIXct(strptime(go.air$date.UTC, format = "%Y-%m-%d %H:%M"),

tz = "GMT")

6.2 Urejanje in združevanje podatkov

a) Najpej za oba podatkovna okvirja uskladite časovni korak. Urejene podatke shranite v nov podatkovniokvir.

bilje.meteo.1h <- timeAverage(bilje.meteo, avg.time = "1 hour")

1

summary(bilje.meteo.1h)

## date p T## Min. :2015-08-31 23:00:00 Min. : 983 Min. :-7.75## 1st Qu.:2015-12-01 10:45:00 1st Qu.:1005 1st Qu.: 7.35## Median :2016-03-01 22:30:00 Median :1010 Median :12.95## Mean :2016-03-01 22:30:00 Mean :1010 Mean :13.35## 3rd Qu.:2016-06-01 10:15:00 3rd Qu.:1015 3rd Qu.:19.10## Max. :2016-08-31 22:00:00 Max. :1031 Max. :34.55## NA's :28 NA's :28## rh rain ws wd## Min. : 22.67 Min. : 0.00000 Min. :0.000 Min. : 0.00## 1st Qu.: 57.50 1st Qu.: 0.00000 1st Qu.:0.900 1st Qu.: 90.55## Median : 82.00 Median : 0.00000 Median :1.350 Median :102.26## Mean : 75.92 Mean : 0.07585 Mean :1.969 Mean :138.30## 3rd Qu.: 95.17 3rd Qu.: 0.00000 3rd Qu.:2.700 3rd Qu.:196.97## Max. :100.00 Max. :19.80000 Max. :9.500 Max. :360.00## NA's :17 NA's :26 NA's :26## glob.rad diff.rad## Min. : 0.0 Min. : 0.00## 1st Qu.: 0.0 1st Qu.: 0.00## Median : 5.5 Median : 5.25## Mean : 152.5 Mean : 63.47## 3rd Qu.: 227.4 3rd Qu.: 94.50## Max. :1016.5 Max. :620.00## NA's :8 NA's :6

summary(go.air)

## date PM10 O3## Min. :2016-01-31 23:00:00 Min. : 0.00 Min. : 0.00## 1st Qu.:2016-02-23 09:15:00 1st Qu.: 12.50 1st Qu.: 19.68## Median :2016-03-17 01:30:00 Median : 19.70 Median : 43.35## Mean :2016-03-16 22:28:59 Mean : 22.09 Mean : 46.54## 3rd Qu.:2016-04-08 11:45:00 3rd Qu.: 29.80 3rd Qu.: 68.92## Max. :2016-04-30 22:00:00 Max. :137.60 Max. :129.90## NA's :117 NA's :510## NO NO2 NOx date.UTC## Min. : 1.40 Min. : 1.60 Min. : 2.20 Length:2150## 1st Qu.: 4.20 1st Qu.: 9.90 1st Qu.: 14.30 Class :character## Median : 6.80 Median :17.00 Median : 23.50 Mode :character## Mean : 13.86 Mean :20.35 Mean : 32.73## 3rd Qu.: 14.78 3rd Qu.:27.90 3rd Qu.: 41.30## Max. :132.40 Max. :76.80 Max. :179.50## NA's :348 NA's :369 NA's :447

b) Izvozite podatke s spremenjenim časovnim korakom v .csv datoteko.

write.csv(bilje.meteo.1h, file = "bilje-meteo-1h.csv", row.names = FALSE)

2

c) Združite podatkovna okvirja po času v skupen podatkovni okvir.

meteo.air <- merge(bilje.meteo.1h, go.air, by = "date", all = TRUE)

d) Iz združenih podatkov izločite podatke od 1. 2. 2016 do 30. 4. 2016 in izrišite povzetek za izločenepodatke.

meteo.air.pomlad <- selectByDate(meteo.air, start = "1/2/2016", end = "30/4/2016")

summaryPlot(meteo.air.pomlad, period = "months", par.settings=list(fontsize=list(text=8)))

date

Feb 01 Feb 15 Mar 01 Mar 15 Apr 01 Apr 15

missing = 0 (0%)min = 983max = 1024

mean = 1006.4median = 1007

95th percentile = 1018

100 % 100 % 100 %

p

missing = 0 (0%)min = −2max = 22.8

mean = 9.9median = 9.6

95th percentile = 18.8

100 % 100 % 100 %

T

missing = 0 (0%)min = 27.5max = 100

mean = 74.7median = 78.9

95th percentile = 98.3

100 % 100 % 100 %

rela

tive

hum

idity

missing = 0 (0%)min = 0max = 7.2

mean = 0.1median = 0

95th percentile = 0.5

100 % 100 % 100 %

rain

missing = 0 (0%)min = 0max = 9.5

mean = 2.4median = 1.7

95th percentile = 6.5

100 % 100 % 100 %

win

d sp

d.

missing = 0 (0%)min = 1.4max = 360

mean = 143.3median = 103.7

95th percentile = 294.6

100 % 100 % 100 %

win

d di

r.

missing = 0 (0%)min = 0max = 931

mean = 130.1median = 3.5

95th percentile = 646.6

100 % 100 % 100 %

glob

.rad

missing = 0 (0%)min = 0max = 496.5

mean = 64.9median = 3.5

95th percentile = 288.5

100 % 100 % 100 %

diff.

rad

missing = 127 (5.9%)min = 0max = 137.6

mean = 22.1median = 19.7

95th percentile = 45.7

94.7 % 88.2 % 99.7 %

PM

10

missing = 521 (24.1%)min = 0max = 129.9

mean = 46.6median = 43.4

95th percentile = 101.7

80 % 56 % 92.4 %

O3

missing = 359 (16.6%)min = 1.4max = 132.4

mean = 13.8median = 6.8

95th percentile = 52

88.1 % 93.7 % 68.2 %

NO

missing = 380 (17.6%)min = 1.6max = 76.8

mean = 20.3median = 17

95th percentile = 46.1

84.8 % 94 % 68.2 %

NO

2

missing = 458 (21.2%)min = 2.2max = 179.5

mean = 32.7median = 23.5

95th percentile = 90.5

76.6 % 93.8 % 65.4 %

NO

x

value

Per

cent

of T

otal

010

990 1000 1010 1020

010

0 5 10 15 20

010

40 60 80 100

060

0.0 0.5 1.0 1.5

015

0 2 4 6

020

0 100 200 300

040

0 200 400 600 800

040

0 100 200 300 400

010

0 10 20 30 40 50 60

06

0 20 40 60 80 100

030

0 20 40 60 80

010

0 10 20 30 40 50

020

0 50 100

3

6.3 Analiza in prikaz meteoroloških podatkov

a) Izrišite časovni potek vremenskih parametrov za celotno obdobje (pozorni bodite na imena osi in zapisenot).

timePlot(meteo.air, pollutant = c("p","T","rh","glob.rad","rain"),date.format = "%d/%m", key.columns = 3,name.pol = c("p (hPa)",expression("T (" * degree * "C)"),"RH (%)",

expression("glob. sevanje (W m" ^-2 * ")"),"padavine (mm)"), strip = FALSE, ylab = "Vremenske spremenljivke",

par.settings=list(fontsize=list(text=10)))

Vre

men

ske

spre

men

ljivk

e

990

1000

1010

1020

1030

0

10

20

30

20

40

60

80

100

0

200

400

600

800

1000

0

5

10

15

20

01/10 01/01 01/04 01/07

p (hPa)T (°C)

RH (%)glob. sevanje (W m−2)

padavine (mm)

4

b) Prikažite razmerje med temperaturo in relativno vlažnostjo, grupirano po posameznih mesecih.

scatterPlot(meteo.air, x = "rh", y = "T", group = "month",xlab = "RH (%)", ylab = expression("T (" * degree * "C)"),key.title = "Mesec",cex = 0.8)

RH (%)

T (

°C)

0

10

20

30

20 40 60 80 100

Mesec January February March April May June July August September October November December

c) Prikažite razmerje med temperaturo in relativno vlažnostjo glede na sončno obsevanje za obdobja, koni padavin.

scatterPlot(subset(meteo.air, rain == 0), x = "T", y = "rh", z = "glob.rad",main = "Odvisnost relativne vlaznosti od temperature zraka \n glede na soncnosevanje",xlab = expression("T (" * degree * "C)"), ylab = "RH (%)",key.title = "Glob. sevanje", cex = 0.6)

Odvisnost relativne vlaznosti od temperature zraka

glede na soncno sevanje

T (°C)

RH

(%

)

20

40

60

80

100

0 10 20 30

0

200

400

600

800

1000

5

d) Prikažite razmerje med temperaturo in relativno vlažnostjo glede na sončno obsevanje za vsa opazovanjav aprilu 2016 med 12. in 16. uro po lokalnem času.

scatterPlot(selectByDate(meteo.air, hour = 10:14, month = 5),x = "T", y = "rh", z = "glob.rad",main = "Odvisnost RH od T zraka glede na soncno sevanje (april, od 12:00 do16:00)",xlab = expression("T (" * degree * "C)"), ylab = "RH (%)",key.title = "Glob. sevanje")

Odvisnost RH od T zraka glede na soncno sevanje

(april, od 12:00 do 16:00)

T (°C)

RH

(%

)

40

60

80

15 20 25

100

200

300

400

500

600

700

800

900

1000

6

e) Veter prikažite z vetrovno rožo po posameznih sezonah.

windRose(meteo.air, angle = 45, ws.int = 1, breaks = 7, paddle = F,annotate = F, main = "Vetrovna roza",key = list(height = 1),type = "season")

Vetrovna roza

W

S

N

E

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

spring (MAM)

W

S

N

E

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

summer (JJA)

W

S

N

E

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

autumn (SON)

W

S

N

E

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

winter (DJF)

0 to 1 1 to 2 2 to 3 3 to 4 4 to 5 5 to 6 6 to 9.5

(m s−1)

7

f) Prikažite povprečen dnevni potek hitrosti vetra.

dnevni.ws <- timeVariation(meteo.air, pollutant = "ws", local.tz = "Europe/Ljubljana",type = "season", ylab = expression("ws (m s" ^-1 * ")"),xlab = c("ura","ura","mesec","dan"),sub = " povprecna vrednost in 95% interval zaupanja",par.settings=list(fontsize=list(text=8)))

ura

ws

(m s

−1)

12345

Monday

sprin

g (M

AM

)

0 6 12 18 23

Tuesday Wednesday

0 6 12 18 23

Thursday Friday

0 6 12 18 23

Saturday Sunday

sum

mer

(JJ

A)

12345

12345

autu

mn

(SO

N)

0 6 12 18 23

win

ter

(DJF

)

0 6 12 18 23 0 6 12 18 23 0 6 12 18 23

12345

wind spd.

ura

ws

(m s

−1)

1.0

1.5

2.0

2.5

3.0

3.5

4.0

spring (MAM)

0 6 12 18 23

summer (JJA)

0 6 12 18 23

autumn (SON)

1.0

1.5

2.0

2.5

3.0

3.5

4.0

winter (DJF)

mesec

ws

(m s

−1)

1.0

1.5

2.0

2.5

3.0

spring (MAM)

J FMAMJ J ASOND

summer (JJA)

J FMAMJ J ASOND

autumn (SON)

1.0

1.5

2.0

2.5

3.0

winter (DJF)

dan

ws

(m s

−1)

1.5

2.0

2.5

3.0spring (MAM)

MonTueWedThuFriSatSun

summer (JJA)

MonTueWedThuFriSatSun

autumn (SON)

1.5

2.0

2.5

3.0winter (DJF)

povprecna vrednost in 95% interval zaupanja

8

print(dnevni.ws, subset = "hour")

ura

ws

(m s

−1)

1.0

1.5

2.0

2.5

3.0

3.5

4.0

spring (MAM)

0 6 12 18 23

summer (JJA)

0 6 12 18 23

autumn (SON)

1.0

1.5

2.0

2.5

3.0

3.5

4.0

winter (DJF)

wind spd.

9

6.4 Analiza in prikaz podatkov o kakovosti zraka

a) Prikažite časovni potek parametrov kakovosti zraka za obdobje februar - april.

timePlot(meteo.air.pomlad, pollutant = c("PM10", "O3","NO","NO2","NOx"),ylab = expression("(" * mu * "g m" ^-3 * ")"), key = FALSE,date.format = "%d/%m", date.breaks = 20)

(µg

m−3

)

0

50

100

PM

10

0

50

100

O3

0

50

100

NO

0

20

40

60

80

NO

2

0

50

100

150

01/02 08/02 15/02 22/02 29/02 07/03 14/03 21/03 28/03 04/04 11/04 18/04 25/04

NO

x

10

b) Prikažite potek koncentracij PM10 in O3 za obdobje 9. 4. 2016 do 12. 4. 2016.

timePlot(selectByDate(meteo.air.pomlad, start = "9/4/2016", end = "12/4/2016"),pollutant = c("PM10", "O3"), group = T,ylab = expression("O"[3] * ", PM"[10] * " (" * mu * "g m" ^-3 * ")"),date.format = "%d/%m", date.breaks = 20)

Koncentracija O3 in PM10 (9. − 12. 4. 2016)

O3,

PM

10 (

µg m

−3)

0

20

40

60

80

100

120

09/04/1600:00

09/04/1612:00

10/04/1600:00

10/04/1612:00

11/04/1600:00

11/04/1612:00

12/04/1600:00

12/04/1612:00

PM10 O3

11

c) Prikažite povprečen dnevni potek koncentracij PM10 in O3 v lokalnem času.

timeVariation(meteo.air.pomlad, pollutant = c("O3","PM10"),local.tz = "Europe/Ljubljana", xlab = c("ura","ura","mesec","dan"),sub = " povprecna vrednost in 95% interval zaupanja",par.settings=list(fontsize=list(text=8)))

ura

O3,

PM

10

20

40

60

80

100

0 6 12 18 23

Monday

0 6 12 18 23

Tuesday

0 6 12 18 23

Wednesday

0 6 12 18 23

Thursday

0 6 12 18 23

Friday

0 6 12 18 23

Saturday

0 6 12 18 23

Sunday

O3 PM10

ura

O3,

PM

10

20

30

40

50

60

70

80

0 6 12 18 23

mesec

O3,

PM

10

30

40

50

J F M A M J J A S O N D

dan

O3,

PM

10

20

30

40

50

Mon Tue Wed Thu Fri Sat Sun

povprecna vrednost in 95% interval zaupanja

12

dnevni.plini <- timeVariation(meteo.air.pomlad,pollutant = c("NO","NO2", "NOx", "O3"),local.tz = "Europe/Ljubljana",xlab = c("ura","ura","mesec","dan"),sub = " povprecna vrednost in 95% interval zaupanja",type = "month",par.settings=list(fontsize=list(text=8)))

ura

NO

, NO

2, N

Ox,

O3 0

50

100

150

Monday

Feb

ruar

y

0 6 12 18 23

Tuesday Wednesday

0 6 12 18 23

Thursday Friday

0 6 12 18 23

Saturday Sunday

Mar

ch

0

50

100

150

0

50

100

150

0 6 12 18 23

Apr

il

0 6 12 18 23 0 6 12 18 23 0 6 12 18 23

NO NO2 NOx O3

ura

NO

, NO

2, N

Ox,

O3

20

40

60

80

100

February

0 6 12 18 23

March

0 6 12 18 23

20

40

60

80

100

April

mesec

NO

, NO

2, N

Ox,

O3

10

20

30

40

50

60

February

J FMAM J J A SOND

March

J FMAM J J A SOND

10

20

30

40

50

60

April

dan

NO

, NO

2, N

Ox,

O3 20

40

60

February

MonTueWedThuFri SatSun

March

MonTueWedThuFri SatSun

20

40

60

April

povprecna vrednost in 95% interval zaupanja

13

print(dnevni.plini, subset = "hour")

ura

NO

, NO

2, N

Ox,

O3

20

40

60

80

100

February

0 6 12 18 23

March

0 6 12 18 23

20

40

60

80

100

April

NO NO2 NOx O3

d) Prikažite povprečen dnevni potek koncentracij NO, NO2, NOx in O3.

scatterPlot(meteo.air.pomlad, x = "ws", y = "PM10", type = "wd",main = "Odvisnost PM10 od smeri in hitrosti vetra",xlab = expression("Hitrost vetra (m s" ^-1 * ")"),ylab = expression("PM"[10] * " (" * mu * "g m" ^-3 * ")"))

Odvisnost PM10 od smeri in hitrosti vetra

Hitrost vetra (m s−1)

PM

10 (

µg m

−3)

0

50

100

NW

0 2 4 6 8

N NE

W

0

50

100

E

0

50

100

0 2 4 6 8

SW S

0 2 4 6 8

SE

14

e) Prikažite odvisnost koncentracij PM10 od hitrosti vetra glede grupirano po smeri vetra.

polarPlot(meteo.air.pomlad,pollutant = "PM10")

0

2

4 ws

6

8

10

W

S

N

E

mean

PM10

10

15

20

25

f) Prikažite razmerje med NO2, NOx in NO pri različnih koncentracijah O3.

scatterPlot(meteo.air.pomlad, x = "NOx", y = "NO2", z = "NO", type = "O3",main = "Razmerje med NO2, NOx in NO pri razlicnih koncentracijah O3")

Razmerje med NO2, NOx in NO pri razlicnih koncentracijah O3

NOx

NO

2 0

20

40

60

O3 0 to 19.8

0 50 100 150

O3 19.8 to 43.4

0 50 100 150

O3 43.4 to 69

0

20

40

60

O3 69 to 130

20

40

60

80

100

120

15