Skip to content

Instantly share code, notes, and snippets.

@rparatodxs
Last active January 19, 2018 14:19
Show Gist options
  • Save rparatodxs/70e6a52afcbe909c64d5d97cf43ebc15 to your computer and use it in GitHub Desktop.
Save rparatodxs/70e6a52afcbe909c64d5d97cf43ebc15 to your computer and use it in GitHub Desktop.
#-----Web Scraper del Meteo Chile
#-http://164.77.222.61/climatologia/php/temperaturaMensual.php?IdEstacion=330021&FechaIni=01-01-1971
setwd("C:/Scraping Data from the Web")
rm(list=ls())
require(RCurl)
require(XML)
library(rvest)
require(rjson)
library(RJSONIO)
#-----------------------SERIAMENTE
#http://164.77.222.61/climatologia/php/temperaturaMensual.php?IdEstacion=330021&FechaIni=01-01-1971
#IDs desde Direccion Meteorologica de Chile
#Chacalluta, Arica Ap. Código Nacional :180005
#Diego Aracena Iquique Ap. Código Nacional :200006
#El Loa, Calama Ad. Código Nacional :220002
#Cerro Moreno Antofagasta Ap.Código Nacional :230001
#Desierto de Atacama, Caldera Ad. Código Nacional :270008
#Mataveri Isla de Pascua Ap. Código Nacional :270001
#La Florida, La Serena Ad. Código Nacional :290004
#Rodelillo, Ad.Código Nacional :330007
#Santo Domingo, Ad.Código Nacional :330030
#Quinta Normal, Santiago Código Nacional :330020
#Eulógio Sánchez, Tobalaba Ad.Código Nacional :330019
#Pudahuel Santiago Código Nacional :330021
#Juan Fernández, Estación Meteorológica.Código Nacional :330031
#General Freire, Curicó Ad. Código Nacional :340031
#General Bernardo O'Higgins, Chillán Ad. Código Nacional :360011
#Carriel Sur, Concepción. Código Nacional :360019
#María Dolores, Los Angeles Ad.Código Nacional :370033
#Maquehue, Temuco Ad.Código Nacional :380013
#Pichoy, Valdivia Ad.Código Nacional :390006
#Cañal Bajo, Osorno Ad.Código Nacional :400009
#El Tepual Puerto Montt Ap.Código Nacional :410005
#Futaleufú Ad.Código Nacional :430002
#Alto Palena Ad.Código Nacional :430004
#Puerto Aysén Ad.Código Nacional :450001
#Teniente Vidal, Coyhaique Ad. Código Nacional :450004
#Chile Chico Ad.Código Nacional :460001
#Lord Cochrane Ad. Código Nacional :470001
#Teniente Gallardo, Puerto Natales Ad.Código Nacional :510005
#Carlos Ibañez, Punta Arenas Ap.Código Nacional :520006
#Fuentes Martínez, Porvenir Ad.Código Nacional :530005
#Guardia Marina Zañartu, Pto Williams Ad. Código Nacional :550001
#C.M.A. Eduardo Frei Montalva, Antártica. Código Nacional :950001
#Esta función crea las urls para leer
#Debe ingresar los datos con el siguiente formato
#getUrls2("1971-1-1","1975-12-1", "330021")# 330021 corresponde al codigo de Pudahuel
#Una lista con los codigos de las estaciones aqui:
getUrls2 <- function(fecha_ini,fecha_fin,cod_est) #Fecha incio, fecha del fin y codigo estación monitoreo
{
#fecha_ini<-"1971-1-1"
#fecha_fin<-"1975-12-1"
#cod_est<-"330021" #Codigo de la estación
eslab<-"&FechaIni="
dates<-seq(as.Date(fecha_ini), as.Date(fecha_fin), by="mon")
años<-as.character(substring(dates, 1,4))
meses<-as.character(substring(dates, 6,7))
dia<-"01"
fecha<-paste(dia,meses,años, sep="-")
root="http://164.77.222.61/climatologia/php/temperaturaMensual.php?IdEstacion="
#cod_est<-"330021" #Codigo de la estación
urls <- NULL
urls <- c(urls,(paste(root,cod_est,eslab,fecha ,sep="")))
return(urls)
}
urls2<-getUrls2("1971-01-01","2017-12-31","330021")
fechas<-seq(as.Date("1971-01-01"), as.Date("2017-12-31"), by="day")
getData2<- function(url){
require(rjson)
#url<-"http://164.77.222.61/climatologia/php/temperaturaMensual.php?IdEstacion=330021&FechaIni=01-02-1971"
#url<-read_html(url)
tabla<-readHTMLTable(url)
tabla<-data.frame(tabla)
tabla<-tabla[3:33,]
}
urls2<-getUrls2("1971-1-1","2017-12-31", "330021")#
#Crea algunas paginas
#get data for each of them and store that data
results=NULL
for (url in urls2){
results <- rbind(results,getData2(url))
}
dim(results)
rownames(results)<-1:dim(results)[1]
colnames(results)<-c("Día","Media","Mínima","Hora1","Máxima", "Hora2")
plot(as.numeric(as.character(results$Media)),type="l")
#load("C:\\Users\\jbustos\\Documents\\Trabajo en R\\Scraping Data from the Web\\pudahuel_historico.RData")
falsos<-subset(results, Media=="." & Mínima=="." & Hora1=="." & Máxima=="." & Hora2=="." )
intersect(rownames(falsos),rownames(results))
ID_falso<-as.numeric(rownames(falsos))
results<-results[-ID_falso,]
dim(results)
fechas<-seq(as.Date("1971-01-01"), as.Date("2017-12-31"), by="day")
dias_no<-dim(results)[1]:length(fechas)+1
fechas<-fechas[-c(dias_no)]
results$fechas<-fechas
head(results)
tail(results)
results$Media<-as.numeric(as.character(results$Media))
plot(results$Media,type="l")
hist(as.numeric(as.character(results$Media)))
myts <- ts(results$Media, start=c(1971, 1), frequency=365)
head(myts )
head(results)
plot(myts )
library(zoo)
myts <-na.locf(myts)
tsdescom<-decompose(myts)
plot(tsdescom)
names(tsdescom)
plot(tsdescom$trend)
library(chron)
str(results$fechas)
results$mesaño<-substr(results$fechas,1,4)
plot(results$mesaño,results$Media)
añogrupo<-aggregate( Media~mesaño, results, mean )
plot(añogrupo$mesaño,añogrupo$Media, type="b", main="Temperatura en Santiago",
ylab="Temperatura (C°) promedio anual", sub="Estación meteorologica Pudahuel")
x=añogrupo$mesaño
y=añogrupo$Media
plot(x,y,xlab="Años", ylab="Temperatura promedio (°C)", pch=16, sub="Estación Pudahuel",
xlim=c(1965, 2020))
title("Promedio de temperatura anual en los años")
l1<-lsfit(x,y)
ls.print(l1)
abline(l1, col="red")
alfa=l1$coeff[1]
beta=l1$coeff[2]
text(1980,14.75,bquote(hat(y)==.(alfa)+.(beta)*x))
text(x, y, labels=añogrupo$mesaño, pos=2, cex=0.5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment