如何使用 rnoaa 查询 NOAA 的历史日平均温度?
How to query NOAA for historical daily temperature averages using rnoaa?
我正在尝试使用 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 数据集中的独特数据类型,但 none 数据类型似乎是日平均温度。有什么想法吗?
为了使用 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
>
答案是从 NOAA 的 ISD 数据库中获取历史(意思是实际的,在指定的日期——不是长期平均值)天气数据。 USAF 和 WBAN 值可以通过查看此处的 isd-history.csv
文件找到:
ftp://ftp.ncdc.noaa.gov/pub/data/noaa
这是一个示例查询。
out <- isd(usaf='724030', wban = '93738', year=2018)
这将从 ISD 映射中获取一年的~每小时天气数据。然后,您可以 parse/process 这些数据,但您认为合适(例如像我一样的日平均温度)。
我正在尝试使用 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 数据集中的独特数据类型,但 none 数据类型似乎是日平均温度。有什么想法吗?
为了使用 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
>
答案是从 NOAA 的 ISD 数据库中获取历史(意思是实际的,在指定的日期——不是长期平均值)天气数据。 USAF 和 WBAN 值可以通过查看此处的 isd-history.csv
文件找到:
ftp://ftp.ncdc.noaa.gov/pub/data/noaa
这是一个示例查询。
out <- isd(usaf='724030', wban = '93738', year=2018)
这将从 ISD 映射中获取一年的~每小时天气数据。然后,您可以 parse/process 这些数据,但您认为合适(例如像我一样的日平均温度)。