Как запросить NOAA для исторических среднесуточных температур, используя 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
для долгосрочных средних температур для данной станции в период с 15 января по 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, но ни один из типов данных не представлял собой среднесуточные температуры. Какие-нибудь мысли?
1 ответ
Чтобы получить среднесуточные фактические температуры из данных 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
>
Обратите внимание, что в этом наборе данных температуры хранятся в десятых долях градуса, поэтому за период с 15 по 31 января 2010 года среднесуточные температуры на метеостанции международного аэропорта имени Даллеса составляли от 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
>
Ответ заключается в получении исторических (то есть фактических, в указанный день - не долгосрочных средних) данных о погоде из базы данных ISA NOAA. Значения USAF и WBAN можно найти, просмотрев isd-history.csv
файл найден здесь:
ftp://ftp.ncdc.noaa.gov/pub/data/noaa
Вот пример запроса.
out <- isd(usaf='724030', wban = '93738', year=2018)
Это позволит получить почасовые данные о погоде из картографирования ISD за многие годы. Затем вы можете проанализировать / обработать эти данные так, как считаете нужным (например, для среднесуточных температур, как я).