空氣品質指數是定量描述空氣品質狀況的非線性無量綱指數。其數值越大、級別和類別越高、表征顏色越深,說明空氣污染狀況越嚴重,對人體的健康危害也就越大。
對照各項污染物的分級濃度限值,以細顆粒物(PM2.5)、可吸入顆粒物(PM10)、二氧化硫(SO2)、二氧化氮(NO2)、臭氧(O3)、一氧化碳(CO)等各項污染物的實測濃度值(其中PM2.5、PM10為24小時平均濃度)分別計算得出空氣品質分指數(Individual Air Quality Index, IAQI)。
IAQIP = IAQIHi - IAQILoBPHi - BPLo (CP - BPLo) + IAQILo
IAQIP:污染物項目P的空氣品質分指數;
CP:污染物項目P的質量濃度值;
BPHi:相應地區的空氣品質分指數及對應的污染物項目濃度指數表中與CP相近的污染物濃度限值的高位值;
BPLo:相應地區的空氣品質分指數及對應的污染物項目濃度指數表中與CP相近的污染物濃度限值的低位值;
IAQIHi:相應地區的空氣品質分指數及對應的污染物項目濃度指數表中與BPHi對應的空氣品質分指數;
IAQILo:相應地區的空氣品質分指數及對應的污染物項目濃度指數表中與BPLo對應的空氣品質分指數。
AQI = max {IAQI1, IAQI2, IAQI3,…, IAQIn}
IAQI:空氣品質分指數;
n:污染物項目。
簡單來說,AQI就是在各IAQI中取最大值。 AQI大於50時,IAQI最大的污染物為首要污染物。若IAQI最大的污染物為兩項或兩項以上時,並列為首要污染物。IAQI大於100的污染物為超標污染物。
中華民國空氣污染指標(Pollutant Standards Index,PSI)是空氣污染情況的一項指標,由中華民國行政院環境保護署於1993年擴充測站後推出,目標乃藉由本測站系統監控全台灣所有的空氣品質並加以通報改善。將上述空氣品質指數(AQI)轉化為一個由0至500的單一數字,並按照指數高低而劃分為良好、普通、對敏感族群不健康、對所有族群不健康、非常不健康和危害六種級別。
空氣品質指標(AQI)與健康影響表
|
library(httr)
library(jsonlite)
library(ggplot2)
library(ggmap)
z <- Sys.time()
z <- unclass(z)
z <- floor(z*1000) # get interger
url_AQI <- paste0("https://taqm.epa.gov.tw/taqm/aqs.ashx?lang=tw&act=aqi-epa&ts=",z)
AQI.list <- fromJSON(content(GET(url_AQI), "text"))
AQI.v <- unlist(AQI.list$Data)
AQI.m <- matrix(AQI.v, byrow = F, ncol = 28)
AQI.df <- as.data.frame(AQI.m)
cname <- names(AQI.list$Data)
names(AQI.df) <- cname
AQI.df$AQI <- as.numeric(AQI.df$AQI)
AQI.df$lat <- as.numeric(AQI.df$lat)
AQI.df$lng <- as.numeric(AQI.df$lng)
AQI.df$AQIStyle <- factor(AQI.df$AQIStyle, levels=c("AQI0","AQI1","AQI2","AQI3","AQI4","AQI5","AQI6"))
即時資料直接在R檔中運行沒有問題,但轉移至Markdown後會出現以下警告:
Warning: Removed 78 rows containing missing values (geom_point).
經查證發現(lng,lat)的座標點在Markdown中有做變動,geom_point無法順利地顯示在地圖上,但確切的數值無法得知,也無法推算。以下嘗試出一個辦法是:額外定義(lng,lat)的數值,其數值由data.frame裡copy出來,但在使用上較不切實際。
location <- data.frame(
lng=c(121.7601, 121.6408, 121.6899, 121.5378, 121.4519, 121.4587, 121.4325, 121.4810, 121.3657, 121.4492, 121.5154, 121.5265, 121.5080, 121.5296, 121.5786, 121.5133, 121.3200, 121.2018, 121.0828, 121.2040, 121.2164, 121.0387, 121.0889, 120.9721, 120.8986, 120.8202, 120.7588, 120.7417, 120.5688, 120.6777, 120.6411, 120.6169, 120.5415, 120.4691, 120.4097, 120.6853, 120.5450, 120.3487, 120.3455, 120.2473, 120.2028, 120.4408, 120.3173, 120.2971, 120.2183, 120.2026, 120.5305, 120.3057, 120.3326, 120.3581, 120.4253, 120.4117, 120.3283, 120.2929, 120.2881, 120.3076, 120.3377, 120.4880, 120.5612, 120.7889, 121.1505, 121.5998, 121.5296, 121.7464, 121.7929, 121.4938, 121.2217, 120.6773, 121.5163, 120.3120, 120.9679, 119.9499, 118.3123, 119.5662, 121.1619, 120.2518, 120.2846, 121.7492),
lat=c(25.12917, 25.06567, 25.17967, 24.97722, 24.98253, 25.01297, 25.03797, 25.06895, 25.07857, 25.16450, 25.10542, 25.06236, 25.04650, 25.02061, 25.05000, 25.06320, 24.99479, 25.06034, 25.03550, 24.95279, 24.86387, 24.90014, 24.74064, 24.80562, 24.69697, 24.56527, 24.38294, 24.25659, 24.22563, 24.09961, 24.15196, 24.16220, 24.06600, 24.13167, 23.92517, 23.91300, 23.71185, 23.75755, 23.55484, 23.46531, 23.71753, 23.46278, 23.30563, 23.11510, 23.04833, 22.98458, 22.88358, 22.75751, 22.68906, 22.62739, 22.56414, 22.47950, 22.73367, 22.67486, 22.63257, 22.60539, 22.56583, 22.67308, 22.52311, 21.95807, 22.75536, 23.97131, 25.18272, 24.74792, 24.63220, 25.07261, 24.95328, 23.75639, 25.01700, 22.60871, 23.96884, 26.16047, 24.43213, 23.56903, 23.04508, 23.75351, 23.84802, 24.30814),
AQIStyle=AQI.df$AQIStyle
)
map =
ggmap(
get_googlemap(
center=c(120.6968965,23.7504154),
zoom=7,
maptype='hybrid'),
darken = 0.2
)
## Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=23.750415,120.696896&zoom=7&size=640x640&scale=2&maptype=hybrid&sensor=false
map +
geom_point(
data=location,
aes(x=lng, y=lat, color=AQIStyle), # according AQIStyle to change different color
size=3,
alpha=0.4
) +
scale_color_manual(
"Air Quality \nIndex",
labels=c("No data","0~50","51~100","101~150","151~200","201~300","301~500"),
values=c("black","green","yellow","orange","red","purple","#750000"),
guide=guide_legend(reverse=TRUE),
drop=FALSE
)