【问题标题】:How to query NOAA for historical daily temperature averages using rnoaa?如何使用 rnoaa 查询 NOAA 的历史日平均温度?
【发布时间】:2019-06-27 00:26:31
【问题描述】:

我正在尝试使用 NOAA 数据查找一系列日期之间的历史平均温度,并与长期平均温度进行比较。

我正在使用rnoaa 包,但遇到了一些问题。对于长期平均值,我成功地使用了以下语法:

library('rnoaa')

start_date = "2010-01-15"
end_date = "2010-11-14"
station_id = "USW00093738"

weather_data <- ncdc(datasetid='NORMAL_DLY', stationid=paste0('GHCND:',station_id),
                     datatypeid='dly-tavg-normal',
                     startdate = start_date, enddate = end_date,limit=365)

这让我可以解析weather_data$data 以获取该站点在 1 月 15 日至 11 月 14 日期间的长期平均温度。

但是,我似乎无法为历史平均温度找到正确的数据集或数据类型。除了那些日子的实际日平均温度外,我想获得与上面的代码相同的数据。知道如何查询吗?我已经做了几个小时了,但没有运气。

我尝试了以下方法:

weather_data <- ncdc(datasetid='GHCND', stationid=paste0('GHCND:',station_id),
                     startdate = start_date, enddate = end_date,limit=365)

uniq_d_types = unique(weather_data$data$datatype)
View(uniq_d_types)

这让我看到了 GHCND 数据集中的独特数据类型,但这些数据类型似乎都不是日平均温度。有什么想法吗?

【问题讨论】:

  • “实际平均温度”是什么意思?这与过去 30 年计算的历史平均值有何不同?
  • 感谢@LenGreski 的回复。我的意思是那一天的平均每日温度。因此,假设最高温度为 80 F,最低温度为 50 F,但如果您要获得全天的平均值,则接近 65 F 左右。如果我看到那天 30 年的平均温度是华氏 50 度,我就会知道天气异常温暖。
  • 您要的是根据 24 小时温度读数计算得出的平均值、给定日期的最高温度和最低温度之间的差异,还是其他一些公式?
  • @LenGreski 再次感谢。正确,根据 24 小时温度读数计算的平均值可以完美运行。
  • 您需要访问每小时数据并自行汇总,因为每日平均温度不会保存到每日数据集中。有关如何从 NOAA 数据中获取每小时温度平均值的示例,请参阅下面的答案。

标签: r noaa rnoaa


【解决方案1】:

为了使用rnoaa 包从 NOAA 数据中获得平均每日实际温度,必须使用每小时数据并按天汇总。每小时NOAA数据在NORMAL_HLY数据集中,所需数据类型为HLY-TEMP-NORMAL

library('rnoaa')
library(lubridate)
options(noaakey = "obtain key from NOAA website")

start_date = "2010-01-15"
end_date = "2010-01-31"
station_id = "USW00093738"

weather_data <- ncdc(datasetid='NORMAL_HLY', stationid=paste0('GHCND:',station_id),
                     datatypeid = "HLY-TEMP-NORMAL",
                     startdate = start_date, enddate = end_date,limit=500)
data <- weather_data$data 

data$year <- year(data$date)
data$month <- month(data$date)
data$day <- day(data$date)
# summarize to average daily temps
aggregate(value ~ year + month + day,mean,data = data)

...和输出:

> aggregate(value ~ year + month + day,mean,data = data)
   year month day    value
1  2010     1  15 323.5417
2  2010     1  16 322.8750
3  2010     1  17 323.4167
4  2010     1  18 323.7500
5  2010     1  19 323.2083
6  2010     1  20 321.0833
7  2010     1  21 318.4167
8  2010     1  22 317.6667
9  2010     1  23 319.0000
10 2010     1  24 321.0833
11 2010     1  25 323.5417
12 2010     1  26 326.0833
13 2010     1  27 328.4167
14 2010     1  28 330.9583
15 2010     1  29 333.2917
16 2010     1  30 335.7917
17 2010     1  31 308.0000
> 

请注意,在此数据集中,温度以十分之一度为单位存储,因此在 2010 年 1 月 15 日至 31 日期间,杜勒斯国际机场气象站的日平均气温在 30.8 度至 33.5 度之间。

另请注意,要通过stationId 计算平均值并跨多个气象站运行,只需将station 添加到aggregate() 函数即可。

> # summarize to average daily temps by station
> aggregate(value ~ station + year + month + day,mean,data = data)
             station year month day    value
1  GHCND:USW00093738 2010     1  15 323.5417
2  GHCND:USW00093738 2010     1  16 322.8750
3  GHCND:USW00093738 2010     1  17 323.4167
4  GHCND:USW00093738 2010     1  18 323.7500
5  GHCND:USW00093738 2010     1  19 323.2083
6  GHCND:USW00093738 2010     1  20 321.0833
7  GHCND:USW00093738 2010     1  21 318.4167
8  GHCND:USW00093738 2010     1  22 317.6667
9  GHCND:USW00093738 2010     1  23 319.0000
10 GHCND:USW00093738 2010     1  24 321.0833
11 GHCND:USW00093738 2010     1  25 323.5417
12 GHCND:USW00093738 2010     1  26 326.0833
13 GHCND:USW00093738 2010     1  27 328.4167
14 GHCND:USW00093738 2010     1  28 330.9583
15 GHCND:USW00093738 2010     1  29 333.2917
16 GHCND:USW00093738 2010     1  30 335.7917
17 GHCND:USW00093738 2010     1  31 308.0000
> 

【讨论】:

    【解决方案2】:

    答案是从 NOAA 的 ISD 数据库中获取历史(即实际,在指定的日期,而不是长期平均)天气数据。通过查看此处的isd-history.csv 文件,可以找到 USAF 和 WBAN 值:

    ftp://ftp.ncdc.noaa.gov/pub/data/noaa

    这是一个示例查询。

    out &lt;- isd(usaf='724030', wban = '93738', year=2018)

    这将从 ISD 地图中获取价值数年的〜每小时天气数据。然后,您可以按照您认为合适的方式解析/处理这些数据(例如,像我一样计算每日平均温度)。

    【讨论】:

      猜你喜欢
      • 2018-08-23
      • 2016-06-22
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-26
      • 2017-11-02
      • 2014-11-15
      相关资源
      最近更新 更多