-
Notifications
You must be signed in to change notification settings - Fork 0
/
fordaemoon.R
105 lines (80 loc) · 3.31 KB
/
fordaemoon.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
library(tidyverse)
library(tidyquant)
library(openair)
library(imputeTS)
library(sf)
####################
# Import Pollution #
####################
aq <- read.csv("GIS/Pollution_Seoul_2018.txt",
fileEncoding = 'euc-kr', # Unix based
encoding = 'utf-8' # Unix based
) %>%
rename(City = "지역", Station = "측정소명", ID = "측정소ID", datetime = "측정일시",
so2 = "SO2.ppm.", co = "CO.ppm.", o3 = "O3.ppm.", no2 = "NO2.ppm.", pm10 = "PM10.....", pm2.5 = "PM2.5.....")
####################
# Choose jung-gu and jongno-gu
# and covert no2 values from ppm to ppb
####################
jongno.aq <- aq %>%
filter(ID %in% c(111121, 111123, 111124, 111125)) %>% select(1:4,no2) %>%
mutate(no2 = ifelse(no2 > 0 , no2 * 1000, no2))
jongno.aq$datetime <- lubridate::parse_date_time(jongno.aq$datetime, "%y%m%d%H", tz = "Asia/Seoul")
jongno.aq$no2[jongno.aq$no2 == -999] <- NA
# imputation: bring last observation
na_locf(jongno.aq$no2, option = "locf", na_remaining = "rev", maxgap = Inf) -> jongno.aq$no2
# Filter Jan-March 2018
jongno.aq.fin <- jongno.aq %>% filter(datetime < "2018-04-01 01:00:00") %>% mutate(hour = hour(datetime))
#############
#-- Plot --##
#############
jongno.plot <- jongno.aq.fin %>%
mutate(Station = factor(Station, levels = c('종로구', '중구', '종로', '청계천로')))
jongno.plot %>%
mutate(monthly = month(datetime)) %>%
filter(monthly < 4) %>%
group_by(Station, monthly) %>%
summarise_at(vars(no2), funs(n(), mean, sd, min, max, median)) -> monthly.stat
jongno.plot %>%
mutate(daily = as.Date(datetime)) %>%
filter(daily >= "2018-01-01" & daily <= "2018-03-31") %>%
group_by(Station, daily) %>%
summarise_at(vars(no2), funs(n(), mean, sd, min, max, median)) -> jongno.stat
jongno.stat
ggplot(aes(daily, mean, colour = Station)) +
geom_line() +
geom_hline(yintercept = 60, lwd = 2, alpha = .4, linetype="dashed") +
facet_wrap(~Station) +
labs(x = "Month", y = "NO2 (ppb)") +
theme_tq() +
theme(axis.text.x = element_text(size = 15),
axis.text.y = element_text(size = 15),
axis.title.x = element_text(size = 15),
axis.title.y = element_text(size = 15),
strip.text.x = element_text(size = 15,
margin = margin(.1,0,.1,0, "cm")),) -> no2_daily
ggsave("no2_daily.png", no2_daily, width = 7, height = 5, dpi = 300)
jongno.plot %>%
ggplot(aes(x = factor(hour), y = no2)) +
geom_boxplot(aes(fill = Station)) +
labs(x = "", y = "NO2 (ppb)") +
theme_tq() +
theme(legend.position="bottom",
axis.text.x = element_text(size = 15),
axis.text.y = element_text(size = 15),
axis.title.y = element_text(size = 15),
strip.text = element_text(size= 15)) -> no2_box_back
ggsave("no2_box_back.png", no2_box_back, width = 10, height = 5, dpi = 600)
##############
#-- Output --#
##############
jongno.aq.fin %>%
mutate(date = date(datetime), label = T,
type = ifelse(ID == 111121 | ID == 111123, "Back", "Road")) %>%
group_by(type, date, hour) %>%
summarise(no2_mean = mean(no2),
no2_sd = sd(no2)) -> jongno_stats
jongno_stats %>%
slice(rep(1:n(), each = 3)) -> jongno_stats_rep
write.csv(jongno_stats, "jongno.csv", row.names = F)
write.csv(jongno_stats_rep, "jongno_rep.csv", row.names = F)