Last active
January 19, 2018 14:19
-
-
Save rparatodxs/70e6a52afcbe909c64d5d97cf43ebc15 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-----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