Как загрузить исторические данные о погоде с веб-сайта канадского правительства, используя R - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь загрузить климатические данные в большом количестве из национальной службы отчетности о погоде и климате правительства Канады с использованием R. Вот инструкции, предоставленные на их веб-сайте, которые объясняют, как это сделать с помощью Cygwin, которыйЯ мог сделать, однако, я хотел бы включить извлечение файла как часть скрипта в R, который выполняет итерацию сбора данных для нескольких станций и временных периодов и обрабатывает их, и т. Д. Я несколько новичок в R,поэтому у меня возникли проблемы с этим процессом.

Readme.txt

Процедура на основе URL для автоматической загрузки данных с веб-сайта Climate * (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> Readme.txt

Инструкции о том, как загрузить все погодные данные для одной станции из Окружающей среды и климата Change Канадский веб-сайт по климату:

Ежедневно обновляемый список климатических станций в Национальном архиве, включая их климатический идентификатор, идентификатор станции, идентификатор ВМО, идентификатор TC и координаты, можно найти в следующей папке:
Get_More_Data_Plus_de_donnees> Station Inventory EN.csv

Используйте следующую утилиту для загрузки данных:
wget (Операционные системы GNU / Linux)
Cygwin (Операционные системы Windows) https://www.cygwin.com
Homebrew(OS X - Apple) http://brew.sh/

Пример загрузки всех доступных почасовых данных для Yellowknife A, с 1998 по 2008 год, в формате .csv

Командная строка:

за год в `seq 1998 2008`; сделать за месяц в` seq 1 12`; сделать 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 "; done; done

WHERE:
year = изменить значения в командной строке (` seq 1998 2008`)month = изменить значения в командной строке (`seq 1 12`)
format = [csv | xml]: формат вывода
timeframe = 1: для часовых данных
timeframe = 2: для суточных данных
timeframe = 3: для месячных данных
Day: значениеПеременная «день» не используется и может быть произвольным значением. Для другой станции измените значение переменной stationID. Для данных в формате XML измените значение формата переменной на xml в URL.

Для получения информации на французском языке измените Загрузить + Данные с ++ T% C3% A9l% C3% A9charger +% 0D% 0Ades + donn% C3% A9es, также измените _e с _f в URL.

По вопросам или проблемам обращайтесь в наш национальный офис климатического обслуживания по адресу: 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.

Не уверен, что это как-то связано с --content-disposition из команды Cygwin или я даже подхожу к этому с правильнымфункция или нет, поэтому любое направление очень ценится.

Спасибо.

1 Ответ

0 голосов
/ 27 декабря 2018

Я не увидел ничего полезного в ссылке, которую вы разместили.Кажется, это какая-то целевая страница, но она не содержит данных о погоде.В любом случае, вот как можно пройтись по массиву 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...