En este caso nos vamos a comunicar con un servicio del Banco de Guatemala y obtener el tipo de cambio por un rango de fechas y luego vamos a limpiar esa informacion quitando los valores repetidos en fechas consecutivas, ya sea por el valor de compra o de venta.
Instalacion de librerias
library("RCurl")
## Loading required package: bitops
library("XML")
Definimos la funcion de obtener el rango de fechas
obtener_banguat_rango_fecha <- function(fecha1, fecha2){
headerfields = c(
Accept = "text/xml",
Accept = "multipart/*",
'Content-Type' = "text/xml; charset=utf-8"
)
body = paste("<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ws=\"http://www.banguat.gob.gt/variables/ws/\">
<soapenv:Header/>
<soapenv:Body>
<ws:TipoCambioRango>
<!--Optional:-->
<ws:fechainit>", fecha1 ,"</ws:fechainit>
<!--Optional:-->
<ws:fechafin>" , fecha2 , "</ws:fechafin>
</ws:TipoCambioRango>
</soapenv:Body>
</soapenv:Envelope>", sep="")
reader = basicTextGatherer()
curlPerform(
url = "http://www.banguat.gob.gt/variables/ws/TipoCambio.asmx",
httpheader = headerfields,
postfields = body,
writefunction = reader$update
)
doc <- xmlParse(reader$value())
rootNode <- xmlRoot(doc)
nodo2 <- rootNode[[1]]
nodo3 <- nodo2[[1]]
nodo4 <- nodo3[[1]]
nodo5 <- nodo4[[1]]
data <- xmlToDataFrame(nodo5)
return(data)
}
Definimos la funcion que limpia los datos para valores consecutivos iguales
quitar_datos_secuencia <- function(data, numero_columna){
datos <- as.matrix.noquote(data)
cols <- colnames(data)
ret <- matrix(,ncol=dim(data)[2],nrow=0)
colnames(ret) <- cols
anterior <- -1
for(i in 1:dim(data)[1]){
if(anterior!=datos[i, numero_columna]){
nuevo <- matrix(,ncol=dim(data)[2],nrow=1)
for(j in 1:dim(data)[2]){
nuevo[1, j] <- datos[i, j]
}
ret <- rbind(ret, nuevo)
}
anterior <- datos[i, numero_columna]
}
ret2 <- as.data.frame(ret)
ret2$compra <- as.numeric(as.character(ret2$compra))
ret2$venta <- as.numeric(as.character(ret2$venta))
return(ret2)
}
Leyendo del servicio web de banguat por rango de fecha
datos <- obtener_banguat_rango_fecha("01/03/2019","25/03/2019")
head(datos)
## moneda fecha venta compra
## 1 2 01/03/2019 7.70445 7.70445
## 2 2 02/03/2019 7.70445 7.70445
## 3 2 03/03/2019 7.70445 7.70445
## 4 2 04/03/2019 7.70537 7.70537
## 5 2 05/03/2019 7.70243 7.70243
## 6 2 06/03/2019 7.6994 7.6994
Limpiando valores
datos2 <- quitar_datos_secuencia(datos, "compra")
head(datos2)
## moneda fecha venta compra
## 1 2 01/03/2019 7.70445 7.70445
## 2 2 04/03/2019 7.70537 7.70537
## 3 2 05/03/2019 7.70243 7.70243
## 4 2 06/03/2019 7.69940 7.69940
## 5 2 07/03/2019 7.69823 7.69823
## 6 2 08/03/2019 7.69653 7.69653
Obteniendo valores estadisticos
summary(datos2$compra)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7.676 7.689 7.693 7.693 7.698 7.705
summary(datos2$venta)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7.676 7.689 7.693 7.693 7.698 7.705