Problema
Queremos crear un mapa de calor en forma de calendario con las variaciones diarias de acciones o índices en R.
Solución
- Ejecutamos el código de Paul Bleicher para crear la función calendarHeat. Editamos el código fuente para modificar la paleta de colores si fuera necesario.
- Extraemos los datos usando la función getSymbols.
- Calculamos las variaciones diarias.
- Creamos el gráfico de las series temporales.
- Dow Jones, emulando la paleta usada por Mike Bostock here. Los días del índice son verde cuando suben y rosas cuando bajan. Los varaciones están calculadas en porcentaje.
- S&P500, usando otra paleta de azul a rojo. Los varaciones están calculadas en porcentaje.
library(tidyverse)
library(tidyquant)
# Dow Jones
symb <- getSymbols(Symbols = "^DJI", QQQ = 'yahoo', auto.assign = FALSE)
n <- gsub("^.*\\.", "", names(symb))
symb <- as.data.frame(symb)
colnames(symb) <- n
symb$date <- rownames(symb)
rownames(symb) <- NULL
df <- symb %>%
mutate(date = as.Date(date),
pct_vol = round(100 * (Adjusted / lag(Adjusted) - 1), 2)) %>%
filter(!is.na(pct_vol), date >= '2016-01-01', date <= '2020-12-31') # o filter(!is.na(pct_vol), date >= '2011-01-01', date <= '2015-12-31')
calendarHeat(
df$date,
df$pct_vol,
varname = "Dow Jones Industrial Average",
ncolors = 50,
color = "g2p"
)
symb <- getSymbols(Symbols = "^GSPC", QQQ = 'yahoo', auto.assign = FALSE)
n <- gsub("^.*\\.", "", names(symb))
symb <- as.data.frame(symb)
colnames(symb) <- n
symb$date <- rownames(symb)
rownames(symb) <- NULL
df <- symb %>%
mutate(date = as.Date(date),
pct_vol = round(100 * (Adjusted / lag(Adjusted) - 1), 2)) %>%
filter(!is.na(pct_vol), date >= '2016-01-01', date <= '2020-12-31')
calendarHeat(
df$date,
df$pct_vol,
varname = "S&P 500",
ncolors = 50,
color = "b2r"
)
Resultados
En los siguentes gráficos, las últimas variaciones diarias desencadenadas por la pandemia del coronavirus (COVID-19) hacen que el resto de días aparezcan muy pálidos en comparación.Entradas relacionadas
No hay comentarios:
Publicar un comentario