如何使用 R 从加拿大政府网站批量下载历史天气数据



我正在尝试使用R从加拿大政府的国家天气和气候数据报告服务批量下载气候数据。以下是通过他们的网站提供的说明,这些说明解释了如何使用 Cygwin 执行此操作,我能够做到这一点,但是,我想将文件检索作为 R 脚本的一部分包含在 R 中,该脚本迭代抓取多个站点和时间框架的数据并处理它们等。我对 R 有点陌生,所以我在这个过程上遇到了麻烦。

自述文件.txt

基于URL的程序,可从气候网站自动批量下载数据(http://www.climate.weather.gc.ca)版本: 2016-05-10

加拿大环境与气候变化

要在线阅读此文件,请访问: ftp://client_climate@ftp.tor.ec.gc.ca/Pub/Get_More_Data_Plus_de_donnees/

文件夹:Get_More_Data_Plus_de_donnees>自述文件.txt

有关如何从加拿大环境与气候变化部气候网站下载一个站点的所有天气数据的说明:

国家档案馆中每日更新的气候台站列表,包括其气候ID,台站ID,WMO ID,TC ID和坐标,可以在以下文件夹中找到:
Get_More_Data_Plus_de_donnees>台站清单EN

.csv使用以下实用程序下载数据:
wget (GNU/Linux操作系统)Cygwin(Windows操作系统)https://www.cygwin.com
Homebrew(OS X - Apple)
http://brew.sh/

以.csv格式下载耶洛奈夫 A 从 1998 年到 2008 年的所有可用每小时数据的示例

命令行:

在"1998 2008年"中;在"序列 1 12"中执行月份;do wget --content-disposition "http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=1706&Year=${year}&Month=${month}&Day=14&timeframe=1&submit= Download+Data" ;做;做

WHERE:
year = 在命令行中更改值('seq 1998 2008') month = 更改命令行中的值('seq 1 12')格式
= [csv|xml]:格式输出timeframe = 1: 用于
每小时数据
timeframe = 2: 用于每日数据
timeframe = 3: 用于每月数据 天
:"天"变量的值不使用,可以是任意值 对于另一个工作站,更改变量工作站 ID 的值 对于 XML 格式的数据,请在 URL 中将变量格式的值更改为 xml。

有关法语信息,请将下载+数据更改为++T%C3%A9l%C3%A9charger+%0D%0Ades+donn%C3%A9es,并在URL中使用_f更改_e。

如有疑问或疑虑,请联系我们的国家气候服务办公室: ec.services.climatiques-climate.services.ec@canada.ca

如上所述,Cygwin 命令是:

for year in `seq 2015 2018`;do for month in `seq 1 12`;do wget --content-disposition "http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=51459&Year=${year}&Month=${month}&Day=14&timeframe=1&submit=Download+Data" ;done;done

我知道download.file()有一个选项wget,但是,当我尝试以下操作时,Cygwin 命令会使用:

download.file("http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=51459&Year=$2018&Month=$12&Day=14&timeframe=2&submit=Download+Data","X:/folderX/example.csv", method = "wget")

我收到一个'wget' call had nonzero exit status错误。

不确定这是否与 Cygwin 命令--content-disposition有关,或者我什至是否使用正确的功能接近它,因此非常感谢任何方向。

谢谢。

你正在使用http,你需要https。 您的数字前面也有 $。

你有什么 : http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=51459&Year=$2018&Month=$12&Day=14&timeframe=2&submit=Download+Data

工作链接: https://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=51459&Year=2018&Month=3&Day=31&timeframe=1

还有一些必要的文档供气候数据的一般使用,例如台站列表,以便您知道在哪里请求: https://drive.google.com/uc?authuser=0&id=1egfzGgzUb0RFu_EE5AYFZtsyXPfZ11y2&export=download

您可以在此处找到有关列的信息: https://climate.weather.gc.ca/glossary_e.html#weather

这里有一些一般数据信息: https://climate.weather.gc.ca/about_the_data_index_e.html https://drive.google.com/drive/folders/1WJCDEU34c60IfOnG4rv5EPZ4IhhW9vZH

在您发布的链接中,我根本没有看到任何有用的东西。 它似乎是某种登录页面,但它不包含任何与天气相关的数据。 无论如何,这里是如何循环访问 URL 数组,并从每个 URL 下载数据。 只需修改它以满足您的需求。

library(RCurl);library(XML)
pageNum <- seq(1:10)
url <- paste0("http://www.totaljobs.com/JobSearch/Results.aspx?Keywords=Leadership&LTxt=&Radius=10&RateType=0&JobType1=&CompanyType=&PageNum=") 
urls <- paste0(url, pageNum) 
allPages <- lapply(urls, function(x) getURLContent(x)[[1]])
xmlDocs <- lapply(allPages, function(x) XML::htmlParse(x))

这是另一个例子。

mydownload <- function (start_date, end_date) {
start_date <- as.Date(start_date)  ## convert to Date object
end_date <- as.Date(end_date)  ## convert to Date object
dates <- as.Date("1970/01/01") + (start_date : end_date)  ## date sequence
## a loop to download data
for (i in 1:length(dates)) {
string_date <- as.character(dates[i])
myfile <- paste0("C:/Users/Excel/Desktop/weather/", string_date, ".csv")
string_date <- gsub("-", "-", string_date)  ## replace "-" with "/"
myurl <- paste("https://sci.ncas.ac.uk/leedsweather/Archive/CUSTOM-ARC-", string_date, "-METRIC.csv", sep = "")
download.file(url = myurl, destfile = myfile, quiet = TRUE)
}
}
mydownload("2013/11/25", "2013/11/30")

正如@EmilyKothe所说,您可以使用R weathercan软件包批量下载ECCC站数据。我发现它仍然有点烦人,因为不是每个人都使用 R。

因此,我基于weathercan功能构建了一个Shiny Web应用程序: https://nickrongkp.shinyapps.io/WeatherCan/该应用程序托管在 shinyapps.io(运行时间有限的免费帐户)上,因此为了他人的缘故,请在完成后立即关闭浏览器。

源代码: https://github.com/nickyrong/ShinyWeatherCan

最新更新