Извлечение данных о погоде в спецификации Австралии с помощью R

Здесь http://www.bom.gov.au/climate/data/ Я могу ввести номер подстанции, скажем, 009572; выберите переменную (скажем, Температура) и ее тип (скажем, Максимум). Нажатие "получить данные" приводит меня на страницу со ссылкой "Все годы данных". Нажмите на нее, и вы получите почтовый файл. Мне известны эти вопросы, но здесь у меня нет прямой ссылки на zip-файл. Можно ли что-то сделать для автоматизации извлечения данных о погоде с веб-сайта Австралийского бюро метеорологии с помощью R?

4 ответа

Решение

Вот код, который я сделал для мгновенной загрузки, и он также решает вашу проблему с p_c. Вы можете улучшить функцию, если хотите, и опубликовать.

#daily code = 136
#monthy code = 139

bomdata<- function(station,code){
for(i in 1: length(station)){
p.url<-paste("http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_stn_num=",station[i],"&p_display_type=availableYears&p_nccObsCode=",code,sep ="")
download.file(p.url,"test.txt")
filelist <- list.files(pattern = ".txt")
foo<- file(filelist,"r")
text<- suppressWarnings(readLines(foo))
close(foo)
l<- regexpr(":",text[1])
m<- unlist(gregexpr(",", text[1], perl = TRUE))
pc<- substr(text[1],l[[1]]+1,l[[1]]+(m[2]-(l[[1]]+1)))
url<-paste("http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_display_type=dailyZippedDataFile&p_stn_num=",station[i],"&p_c=",pc,"&p_nccObsCode=",code,"&p_startYear=2013", sep ="")
suppressWarnings(download.file(url,paste(station[i],".zip",sep= ""), mode = "wb"))
unlink("test.txt")
 }
}

пример

bomdata(073137,136)

У меня был тот же вопрос, и этот ТАК вопрос был на одной из первых страниц. После дальнейшего поиска я нашел пакет R Bomrang ( https://github.com/ropensci/bomrang), который:

Предоставляет функции для взаимодействия с данными Австралийского правительственного бюро метеорологии (BOM), извлечения данных и выдачи аккуратных данных о точных прогнозах, текущих данных о погоде со станций, информационных бюллетеней ag, исторических данных о погоде, а также загрузки и импорта радиолокационных или спутниковых изображений.

Bomrang является частью rOpenSci и активно развивается. Имеет хороший набор функций:

Bomrang предоставляет несколько функций для получения данных Австралийского бюро метеорологии (BOM). Семейство функций извлекает данные о погоде и возвращает аккуратные кадры данных;

get_precis_forecast(), which retrieves the précis (short) forecast;
get_current_weather(), which fetches the current weather for a given station;
get_ag_bulletin(), which retrieves the agriculture bulletin;
get_weather_bulletin(), which retrieves the BOM 0900 or 1500 bulletins;
get_coastal_forecast(), which returns coastal waters forecasts; and
get_historical(), which retrieves historical daily observations for a given station.

Вторая группа функций извлекает информацию, относящуюся к спутниковым и радиолокационным изображениям,

get_available_imagery();
the satellite imagery itself, get_satellite_imagery();
get_available_radar(); and
the radar imagery itself, get_radar_imagery().

Функция get_historical() кажется, делает то, что нужно ОП. Например, получить исторический ежедневный ливень с метеостанции в Сиднее так же просто, как:

> rain_066062 <- bomrang::get_historical(stationid = 066062,
+                         type = 'rain',
+                         meta = T)
> head(rain_066062)
$`meta`
# A tibble: 1 x 10
   site name                        lat   lon start      end        years percent AWS   ncc_obs_code
  <int> <chr>                     <dbl> <dbl> <date>     <date>     <dbl>   <int> <chr> <chr>       
1 66062 SYDNEY (OBSERVATORY HILL) -33.9  151. 1858-07-01 2018-11-01  160.     100 Y     136         

$historical_data
      Product_code Station_number Year Month Day Rainfall Period Quality
1       IDCJAC0009          66062 1858     1   1       NA     NA        
2       IDCJAC0009          66062 1858     1   2       NA     NA        
3       IDCJAC0009          66062 1858     1   3       NA     NA        
4       IDCJAC0009          66062 1858     1   4       NA     NA        
5       IDCJAC0009          66062 1858     1   5       NA     NA      
<<SNIP>>

Еще одна приятная особенность - если у вас есть долгота и широта интересующего вас объекта, get_historical() найдет ближайшую метеостанцию ​​к этому месту.

Для установки из CRAN:

install.packages("bomrang")

Или установите версию для разработчиков с Github:

if (!require("remotes")) {
  install.packages("remotes", repos = "http://cran.rstudio.com/")
  library("remotes")
}

install_github("ropensci/bomrang", build_vignettes = TRUE)

Вы можете попробовать это, это кодовая последовательность, используемая пакетом metvurst. metvurst

## SET URL FOR DATA DOWNLOAD
url <- "http://www.bom.gov.au/ntc/IDO70004/IDO70004_"

## YEARS TO BE DOWNLOADED
yr <- 1993:2012

## READ DATA FOR ALL YEARS FROM URL INTO LIST
fijilst <- lapply(seq(yr), function(i) {
read.csv(paste(url, yr[i], ".csv", sep = ""), na.strings = c(-9999, 999))
})

Хотя я до сих пор не могу понять, как это сделать с помощью download.file(), следующее почти выполняет эту работу, если в Chrome "Спросить, где сохранить каждый файл перед загрузкой" снята отметка.

system(paste('"C:/Documents and Settings/UserName/Local Settings/Application Data/Google/Chrome/Application/chrome.exe"',
         '-url http://www.bom.gov.au/jsp/ncc/cdio/weatherData/av?p_display_type=dailyZippedDataFile&p_stn_num=009572&p_c=-18465084&p_nccObsCode=136'), wait = FALSE)

Тогда я мог бы использовать paste0() и просматривать различные номера станций, если бы знал, что означает p_c=-18465084 и как он меняется от станции к станции.

Другие вопросы по тегам