Quiero representar hoy la evolución del Ibex 35 a lo largo del año pasado al estilo GapMinder. En concreto, usando un MotionChart de Google.
Primero, bajo los símbolos de los activos del Ibex de Yahoo! Finance:
library(XML) simbolos <- readHTMLTable(htmlParse("http://finance.yahoo.com/q/cp?s=%5EIBEX+Components")) simbolos <- as.character(simbolos[[9]]$Symbol) simbolos <- gsub("-P", "", simbolos)
Luego, creo una pequeña función y se la aplico a cada símbolo:
library(tseries) foo <- function( simbolo, final = Sys.time(), profundidad = 365 * 24 * 3600 ){ tmp <- get.hist.quote(instrument= simbolo, start = final - profundidad, end= final, quote="AdjClose", provider="yahoo", origin="1970-01-01", compression="d", retclass="zoo") precios <- as.data.frame(tmp) precios$fecha <- index(tmp) rownames(precios) <- NULL precios$simbolo <- simbolo precios$AdjClose <- 100 * precios$AdjClose / precios$AdjClose[1] precios$x <- as.numeric(precios$fecha) precios$x <- 1 + precios$x - precios$x[1] colnames(precios) <- c("precio", "fecha", "simbolo", "dias") precios } res <- sapply(simbolos, foo, simplify = F) res <- do.call(rbind, res)
Finalmente, creo el gráfico:
El resultado tiene un aspecto similar a la siguiente captura estática:
No puedo insertar aquí el gráfico dinámico pero cualquiera que ejecute el código anterior en su máquina lo debería obtener en su propio navegador.
Muy chulo. Acabo de ejecutarlo y de paso he aprendido algunas cosas, como la función get.hist.quote para obtener cotizaciones desde yahoo. Otra función que he visto muchas veces, pero que no comprendo del todo bien es do.call, ¿no es lo mismo que un lapply, podría alguien explicarla un poco?
Saludos
Buenas, muy interesante, pero estoy intentando ejecutarlo en mi maquina con las librerías que aquí indicas y me sale un problema con esta linea:
precios$fecha <- index(tmp)
¿De qué paquete es la funcion index?. No consigo encontrarla
@Pepe Curioso que falle… La función que necesitas está en el paquete zoo. Por algún motivo no me hizo falta en su día. No sé si por omisión mía o por alguna reorganización en los paquetes utilizados.