Как извлечь данные из подземного прогноза погоды (wunderground) в файлы csv - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь загрузить исторические данные из подземного прогноза погоды в формат csv, запустив цикл for с итерациями [i] для каждой даты.

Чтобы ускорить время выполнения, я запускаю код с 1 сентября 2019 года по сегодняшний день (на самом деле мне нужно будет работать в течение нескольких лет). Я запускаю цикл for для URL:

myurl[i] <- paste("https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=",station,"&day=",my_dates$day[i],"&month=",my_dates$month[i],"&year=",my_dates$year[i],"&graphspan=day&format=1", sep = "")

Где я - дата между началом и концом. например. https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IISLEOFW4&day=1&month=9&year=2019&graphspan=day&format=1

start_date <- as.POSIXct("2019-09-01",tz="gmt")
end_date <-  as.POSIXct(Sys.Date(),tz="gmt")

dates <- seq.POSIXt(start_date,end_date,by="day")

my_dates<-as.integer(unlist(strsplit(as.character(dates),"-")))

my_dates<-array(my_dates,dim=c(3,length(my_dates)/3))

my_dates<-as.data.frame(t(my_dates), )

colnames(my_dates)<-c("year","month","day")

station <- "IISLEOFW4"


for(i in 1:length(my_dates)) {

  myurl[i] <- paste("https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=",station,"&day=",my_dates$day[i],"&month=",my_dates$month[i],"&year=",my_dates$year[i],"&graphspan=day&format=1", sep = "")
  folder <- "D:\\WeatherData"
  myfile <- paste("NewportWeather",rownames(my_dates),".csv")
  download.file(url = myurl[i], file.path(folder, myfile, fsep = "\\" ))
}

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

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

Спасибо за помощь!

1 Ответ

0 голосов
/ 11 октября 2019

Я разобрался с этим!

Как указал @AndrewGustar, мне нужно было включить i в имя файла, которое, как я обнаружил, можно сделать следующим образом.

myfile[i] <- paste("NewportWeather",i,".csv")

Мне также пришлось изменить длину (my_dates) до nrow (my_dates) в цикле for.

Код завершился следующим образом:

start_date <- as.POSIXct("2019-09-01",tz="gmt")
end_date <-  as.POSIXct(Sys.Date(),tz="gmt")

dates <- seq.POSIXt(start_date,end_date,by="day")

my_dates<-as.integer(unlist(strsplit(as.character(dates),"-")))

my_dates<-array(my_dates,dim=c(3,length(my_dates)/3))

my_dates<-as.data.frame(t(my_dates), )

colnames(my_dates)<-c("year","month","day")

station <- "IISLEOFW4"


for(i in 1:nrow(my_dates)) {

  myurl[i] <- paste("https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=",station,"&day=",my_dates$day[i],"&month=",my_dates$month[i],"&year=",my_dates$year[i],"&graphspan=day&format=1", sep = "")
  folder <- "D:\\WeatherData"
  myfile[i] <- paste("NewportWeather",i,".csv")
  download.file(url = myurl[i], file.path(folder, myfile[i], fsep = "\\" ))
}

...