首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用R编程提取澳大利亚BOM天气数据

用R编程提取澳大利亚BOM天气数据
EN

Stack Overflow用户
提问于 2013-10-10 02:31:47
回答 4查看 3.8K关注 0票数 0

在这里,http://www.bom.gov.au/climate/data/ I可以输入一个变电站号,比如009572;选择变量(比如温度)及其类型(比如最大值)。单击“获取数据”将我带到一个带有“所有年份数据”链接的页面。点击它,你就会得到一个压缩文件。我知道这个问题,但是这里没有指向zip文件的直接链接。可以做些什么来自动从澳大利亚气象局网站提取天气数据吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-23 05:52:10

下面是我立即下载的代码,它也解决了您的p_c问题。如果您需要并发布,您可以改进该功能。

代码语言:javascript
运行
复制
#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")
 }
}

示例

代码语言:javascript
运行
复制
bomdata(073137,136)
票数 3
EN

Stack Overflow用户

发布于 2018-11-27 05:42:50

我也有同样的问题,而这个S.O.问题是第一页出现的。经过进一步的搜索,我发现了R包轰炸机(https://github.com/ropensci/bomrang):

提供与澳大利亚政府气象局(BOM)数据接口的功能,获取数据并返回完整的简要预报数据框架、从台站提供的当前天气数据、澳大利亚航空公司信息公报、历史气象数据以及下载和进口雷达或卫星图像。

庞朗是rOpenSci的一部分,并且正在积极开发。它有一套很好的功能:

轰炸机提供了几个检索澳大利亚气象局(BOM)数据的功能。一组检索天气数据并返回整齐数据帧的功能; get_precis_forecast()检索précis (简称)预报;get_current_weather()检索给定站点的当前天气;get_ag_bulletin()检索农业公告;get_weather_bulletin()检索BOM 0900或1500公报;get_coastal_forecast()检索沿海水域预报;get_historical()检索给定站点的历史每日观测。 第二组功能检索与卫星和雷达图像有关的信息, get_available_imagery();卫星图像本身,get_satellite_imagery();get_available_radar();雷达图像本身,get_radar_imagery()。

函数get_historical()似乎做的是OP所需要的。例如,从悉尼的气象站获得历史上每天的降雨量就像:

代码语言:javascript
运行
复制
> 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安装:

代码语言:javascript
运行
复制
install.packages("bomrang")

或者从Github安装开发版本:

代码语言:javascript
运行
复制
if (!require("remotes")) {
  install.packages("remotes", repos = "http://cran.rstudio.com/")
  library("remotes")
}

install_github("ropensci/bomrang", build_vignettes = TRUE)
票数 4
EN

Stack Overflow用户

发布于 2013-12-05 10:34:44

您可以尝试这样做,它是metvurst包使用的代码序列。米特沃斯特

代码语言:javascript
运行
复制
## 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))
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19286072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档