使用openair包分析气象数据

气象数据通常是有规律的时间序列,分析气象数据时需要对空气质量测量、气象数据和扩散模型输出进行分析。openair 是用于分析空气质量数据或更广泛的大气成分数据的R软件包。该软件包广泛应用于学术界、公共和私营部门。

该项目最初由英国自然环境研究委员会(NERC)资助,并由英国环境部(Defra)提供额外资金。有关 openair 的最新信息可在软件包本身和本书网站 (The openair book) 上找到。

安装

#install.packages("openair") #未安装的需要安装软件,这里不重复安装

详情

该软件包的部分功能概述如下:

通过importAURN 和 family 函数访问英国数百个空气污染监测点的数据;

通过timeAverage 和 selectByDate 等实用功能更轻松地处理大气成分数据;

通过windRose 和 pollutionRose 灵活地绘制风玫瑰图和污染玫瑰图;

通过大多数函数中的 openair 类型选项灵活地绘制按小时或天、星期、季节等划分的数据;

通过更复杂的双变量极坐标图和条件概率函数帮助描述不同污染源的特征。

可访问 NOAA Hysplit 预先计算的年度96小时回溯轨迹以及许多绘图和分析功能,如轨迹频率、潜在污染源贡献函数和轨迹聚类。

使用上述灵活方法对空气质量模型进行评估的许多功能,如可按季节、时间等轻松评估模型的类型选项。 这些功能包括关键模型统计、泰勒图、条件量值图。

实操

从英国城乡自动网络导入数据

可以轻松地从 100 多个站点导入每小时的数据,也可以一次导入多个站点和数年的数据。

library(openair)
## Warning: package 'openair' was built under R version 4.2.3
kc1 <- importAURN(site = "kc1", year = 2020)
kc1
## # A tibble: 8,784 × 15
##    source site     code  date                   co   nox   no2    no    o3   so2
##    <chr>  <chr>    <chr> <dttm>              <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 aurn   London … KC1   2020-01-01 00:00:00 0.214  64.8  46.2 12.1   1.13    NA
##  2 aurn   London … KC1   2020-01-01 01:00:00 0.237  74.1  45.0 19.0   1.20    NA
##  3 aurn   London … KC1   2020-01-01 02:00:00 0.204  60.5  41.4 12.4   1.50    NA
##  4 aurn   London … KC1   2020-01-01 03:00:00 0.204  53.5  39.8  8.93  1.60    NA
##  5 aurn   London … KC1   2020-01-01 04:00:00 0.169  37.7  33.6  2.63  5.79    NA
##  6 aurn   London … KC1   2020-01-01 05:00:00 0.160  43.3  36.8  4.25  6.09    NA
##  7 aurn   London … KC1   2020-01-01 06:00:00 0.157  48.2  39.4  5.76  2.74    NA
##  8 aurn   London … KC1   2020-01-01 07:00:00 0.178  60.5  44.7 10.3   1.20    NA
##  9 aurn   London … KC1   2020-01-01 08:00:00 0.233  71.8  47.9 15.6   2.25    NA
## 10 aurn   London … KC1   2020-01-01 09:00:00 0.329 128.   46.9 53.2   2.25    NA
## # ℹ 8,774 more rows
## # ℹ 5 more variables: pm10 <dbl>, pm2.5 <dbl>, ws <dbl>, wd <dbl>,
## #   air_temp <dbl>

使用 selectByDate 函数可以轻松选择相当复杂的时间段。 例如,选择 2012 年 6 月至 9月工作日(周一至周五)上午 7 点至下午 7 点(含)的数据:

sub <- selectByDate(kc1,
  day = "weekday",
  year = 2020,
  month = 6:9,
  hour = 7:19
)
sub
## # A tibble: 1,144 × 15
##    date                source site    code      co   nox   no2    no    o3   so2
##    <dttm>              <chr>  <chr>   <chr>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2020-06-01 07:00:00 aurn   London… KC1   0.125   23.1 16.8  4.14   56.5  2.29
##  2 2020-06-01 08:00:00 aurn   London… KC1   0.133   25.2 17.8  4.79   61.7  2.68
##  3 2020-06-01 09:00:00 aurn   London… KC1   0.119   15.6 12.2  2.22   75.8  2.35
##  4 2020-06-01 10:00:00 aurn   London… KC1   0.104   13.8 11.1  1.79   87.1  1.57
##  5 2020-06-01 11:00:00 aurn   London… KC1   0.0956  14.0 11.8  1.46   96.7  1.44
##  6 2020-06-01 12:00:00 aurn   London… KC1   0.0985  11.3  9.97 0.893 106.   1.44
##  7 2020-06-01 13:00:00 aurn   London… KC1   0.0927  11.0  9.64 0.893 112.   2.03
##  8 2020-06-01 14:00:00 aurn   London… KC1   0.0927  12.5 10.8  1.14  114.   2.81
##  9 2020-06-01 15:00:00 aurn   London… KC1   0.0811  10.7  9.48 0.822 115.   2.88
## 10 2020-06-01 16:00:00 aurn   London… KC1   0.0898  13.9 11.9  1.29  104.   2.22
## # ℹ 1,134 more rows
## # ℹ 5 more variables: pm10 <dbl>, pm2.5 <dbl>, ws <dbl>, wd <dbl>,
## #   air_temp <dbl>

同样,用多种灵活的方法计算时间平均数据也很容易。 例如,两周平均值的计算公式为

sub2 <- timeAverage(kc1, avg.time = "2 week")

type选项

openair 的一个重要方面是type选项的使用,几乎所有的 openair 函数都可以使用type选项。 type选项按变量的不同类别分割数据。 在按不同日期值分割数据的基础上,type 有许多内置选项。 以下是 type 的内置值摘要:

“year”按年份分割数据

“month”按年份中的月份分割变量

“monthyear”按年份和月份分割数据

“season”按季节分割变量。 注意,在这种情况下,用户还可以提供一个半球选项,可以是 “北半球”(默认)或 “南半球”。

“weekday”按星期拆分变量。

“weekend”按周六、周日和工作日拆分变量。

“daylight”按夜间/白天拆分变量。 需要注意的是,必须提供经度和纬度。

“dst”按夏令时和非夏令时分割变量。

“wd”如果有风向(wd),type = “wd”将把数据分割成 8 个扇区: N、NE、E、SE、S、SW、W、NW。

“seasonyear (或”yearseason”)“将把数据分成年-季区间,将一个季节的月份保持在一起。 例如,2010 年 12 月被视为 2011 年冬季的一部分(与 2011 年 1 月和 2 月一起)。 这样就更容易考虑连续的季节。 相比之下,type =”季节 “只会将数据分成四季,而不考虑年份。

如果数据框架中存在分类变量,如站点,则可直接使用该变量,如 type = “站点”。

type也可以是数值变量。在这种情况下,数值变量会被分成4分位数变量,即包含相同数量点的 4 个分区。可以提供 n.levels 选项来指示使用多少个分位数水平。

示例

导入自带数据集mydata

data(mydata)
head(mydata)
## # A tibble: 6 × 10
##   date                   ws    wd   nox   no2    o3  pm10   so2    co  pm25
##   <dttm>              <dbl> <int> <int> <int> <int> <int> <dbl> <dbl> <int>
## 1 1998-01-01 00:00:00  0.6    280   285    39     1    29  4.72  3.37    NA
## 2 1998-01-01 01:00:00  2.16   230    NA    NA    NA    37 NA    NA       NA
## 3 1998-01-01 02:00:00  2.76   190    NA    NA     3    34  6.83  9.60    NA
## 4 1998-01-01 03:00:00  2.16   170   493    52     3    35  7.66 10.2     NA
## 5 1998-01-01 04:00:00  2.4    180   468    78     2    34  8.07  8.91    NA
## 6 1998-01-01 05:00:00  3      190   264    42     0    16  5.50  3.05    NA

数据集中包含日期、风向、风速及多个气态污染物的浓度数据。我们先来看一下总体风向的分布。

#绘制玫瑰图
windRose(mydata)

 设置type选项为按年划分。

windRose(mydata,
  type = "year",
  layout = c(4, 2)
)

 风向玫瑰图总结了监测站每年的风况。接下来我们使用双变量极坐标图查看空气污染的来源。

polarPlot(mydata,
  pollutant = "so2",
  statistic = "cpf",
  percentile = 90,
  cols = "YlGnBu"
)

 二维极坐标图显示了导致污染物浓度升高的风力条件。

进一步地,可使用日历的方式呈现污染物水平的分布,如:

calendarPlot(mydata, pollutant = "o3", year = 2003)

 可详细看到2003年度每一天的臭氧浓度水平的分布和变化。关于这个包还有非常多用途,详见https://davidcarslaw.com/files/openairmanual.pdf。感兴趣的大家可进一步探索,可使用自己的数据集利用该包中的函数进行分析和可视化。

References: Carslaw, D.C. and K. Ropkins, (2012). openair — an R package for air qualitydata analysis. EnvironmentalModelling&Software. Volume27-28,pp. 52–61.

欲探索更多R包使用方法,请关注微信公众号《单细胞学会》。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值