El Ibex 35 al estilo GapMinder

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:

library(googleVis)
 
M <- gvisMotionChart(res, idvar="simbolo", timevar="fecha", 
                     xvar = "dias", yvar = "precio",
                     options = list(width = 1200, 
                                    showAdvancedPanel=T,
                                    showChartButtons =F,
                                    showSelectListComponent=F,
                                    showXMetricPicker = F,
                                    showYMetricPicker = F))
plot(M)

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.

3 comentarios sobre “El Ibex 35 al estilo GapMinder

  1. José Luis 9 enero, 2013 19:02

    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

  2. Pepe 14 enero, 2014 12:47

    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

  3. datanalytics 14 enero, 2014 14:09

    @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.

Los comentarios están desabilitados.