Series temporales animadas con R y gganimate, comparando cotizaciones

La comparación de series es otro de los usos que le estoy dando a las animaciones, en este caso quiero comparar la cotización de Tesla frente a la cotización del Bitcoin e intentar establecer paralelismo (o no). Obtenemos los datos vía quantmod y comenzamos a traficar:

library(quantmod)
library(tidyverse)
library(gganimate)
library(lubridate)

cartera = c("BTC-USD", "TSLA")
getSymbols(cartera, src="yahoo", from="2019-12-31")
chartSeries(`BTC-USD`)
tail(`BTC-USD`)
btc =  data.frame(date=index(`BTC-USD`), coredata(`BTC-USD`))
tesla =  data.frame(date=index(`TSLA`), coredata(`TSLA`))

Ya tenemos dos data frames con la cotización de Testa y la cotización del Bitcoin desde el 31/12/2019 hasta la fecha. Ahora vamos a unir los 2 objetos en uno para facilitar los gráficos.

Mapa de Rstats animado con el porcentaje de vacunación en España

El dato del porcentaje de vacunados de COVID por Comunidad Autónoma está en prensa diariamente y yo estoy empezando a trabajar animaciones para visualizar los datos de un modo más dinámico, fundamentalmente visualizaciones con R y las librerías ggplot y gganimate, así que un mapa animado con ese dato me parecía un ejercicio interesante. No esperaba que estos ejercicios tuvieran mucho interés puesto que hay material en la web más que suficiente, pero dos personas sí mostraron interés por lo que crearé dos entradas en el blog con algunas animaciones realizadas. La primera de ellas la traigo hoy y consiste en el porcentaje de personas vacunadas en España en función de las vacunas entregadas por Comunidad Autónoma. No me quiero meter en los datos, directamente vamos a representar, todo lo referente a datos y coronovirus en España no funciona tan correcto como debiera.

youtube-dl para descargar videos y mplayer para pasar esos vídeos a imágenes

Si deseamos descargar vídeos de Youtube tenemos youtube-dl pero podemos descargar de otras web y en esta entrada vamos a ver como. Además podemos transformar esas entradas en fotogramas, esto es útil a la hora de analizar imágenes, podríamos estudiar la presencia de una marca en un partido de fútbol, identificar las matrículas que pasan delante de determinada cámara u otros casos de uso. Y en uno de esos casos precisamente J.L. Cañadas del blog hermano Muestrear no es Pecado me ha descubierto la librería youtube-dl y la creación de scripts para tranformar videos en imágenes que posteriormente podemos analizar. El caso de mplayer es distinto, lo conocía, Cañadas me ha descubierto el ffmpeg que ofrece más posibilidades.

Mapas estáticos de Perú con R y Python a nivel de Distrito

Petición de un lector de un código de ejemplo para hacer mapas de Perú con R y con Python, perfectamente reproducible si seguimos algunas entradas del blog pero que, de este modo, quedan resumidos en un solo sitio. En este caso se va a emplear un notebook desde RStudio donde tendremos chunks de R y Python en función de lo que necesitemos. Podéis copiar y pegar directamente, debe salir lo mismo.

Corrección ortográfica en RStudio

Si os estáis acostumbrando a usar RStudio como editor de texto y no confiáis en vuestras capacidades ortográficas, sabed que podéis hacer una revisión ortográfica de vuestro documento desde RStudio. Es muy sencillo, lo primero es Tools –> Global Options y luego te vas a spelling (ortografía) y allí eliges el diccionario que quieres usar, si no aparece el tuyo lo puedes descargar o actualizar:

Ahora en los documentos de R que estéis editando si pulsáis F7 podréis realizar una revisión ortográfica del texto.

Analisisydecision.es os desea felices fiestas

Un homenaje a R base del que nadie se acuerda. Una animación donde se usa el paquete snowflakes para hacer copos de nieve y hay algún uso interesante de la función text. En cualquier caso, lo dicho, felices fiestas en estos días extraños.

alturas <- seq(100,200, by = 3)
posiciones <- as.integer(runif(length(alturas),5,95))
radio = round(runif(length(alturas),0.7,1.8),2)
orientacion = posiciones/5 * (pi/6)
grises <- paste0("gray",as.integer(runif(length(alturas),70,95)))

texto =  " AnalisisyDecision.es  "
texto2 = "os desea felices fiestas";

saveGIF(
  for (i in seq(0,100, by = 3)){
    frase2=""
    frase1=substr(texto,1,i/3)
    if (i > nchar(texto)) frase2=substr(texto2,1,i/2 - nchar(texto))
    plot(rep(100,100),rep(100,100),ann=FALSE,type="n",axes=FALSE, ylim=c(0,100), xlim=c(0,100))
    snowflakes(xCoor = posiciones, yCoor = alturas - i, radius = radio,
               orientation = orientacion, seeds = puntas, color = grises)
    text(80,50, frase1, adj = c(1,0), cex=2, col=i)
    text(80,30, frase2, adj = c(1,0), cex=2, col=i)},
  fps= 1 , movie.name="C:/temp/animaciones/navidad.gif")

Mi curriculum con RMarkdown y pagedown

Me he puesto a actualizar mi curriculum y a la vez estoy aprendiendo markdown y en ese proceso Jose Luis Cañadas me dijo «usa pagedown». No era yo fan de Rmarkdown, pero me estoy reconvirtiendo. Me está pasando con markdown algo parecido a lo que me pasó con el picante, no me gustaba hasta que lo probé y desde entonces me encanta. ¿Por qué lo probé? Porque había decidido tomarme un tiempo sabático para elaborar una serie de cursos, webminar y actualizar la web que son 12 años sin modificaciones. Tras 3 meses sabáticos estoy harto de no trabajar , son 25 años seguidos trabajando, 20 gestionando datos, y otros 5 en los que hice de todo (hasta servir en la Armada). No soy capaz de estar sin trabajar, el primer paso es elaborar un resumen de mi vida profesional y dar un nuevo formato porque llevo con el mismo unos 12 años.

Evaluando la capacidad predictiva de mi modelo tweedie

Cuando tenemos que evaluar el comportamiento de un modelo de clasificación binomial empleamos sensibilidad, especificidad,… ya he hablado sobre ese tema aunque volveré sobre ello. Sin embargo, si nuestro modelo estima un valor es posible que no tengamos tan claro como está funcionando su capacidad predictiva. Lo que traigo hoy es un análisis muy básico pero que entienden muy bien aquellas personas que no tienen grandes conocimientos en ciencia de datos, además es una continuación de la entrada en la que se ilustraba un ejemplo de uso de los modelos tweedie.

Librería mapSpain en RStats. Mapas estáticos de España

Más mapas estáticos de España con R esta vez con la [librería mapSpain de Diego Hernangomez](http://CCAA.sf <- esp_get_ccaa() table(CCAA.sf$iso2.ccaa.code)) que simplifica mucho la realización de esta tarea. el primer ejemplo es un mapa del exceso de mortalidad por comunidad Autónoma para el año 2020 reaprovechando un código del blog:

library(mapSpain)
library(sf)
library(tidyverse)
library(lubridate)
library(stringr)

df <- read.csv("https://momo.isciii.es/public/momo/data")

df <- df %>% dplyr::filter(ambito =='ccaa' & nombre_sexo=='todos' & cod_gedad=='all') %>%
  mutate(fecha_defuncion=as.Date(fecha_defuncion, '%Y-%m-%d')) %>%
  filter(year(fecha_defuncion)>=2020)

df <- df %>% mutate(ola = case_when(
  fecha_defuncion <= as.Date("2020-03-07") ~ 'Anteriores',
  fecha_defuncion <= as.Date("2020-05-07") ~ 'Primera ola',
  fecha_defuncion <= as.Date("2020-08-01") ~ 'Verano',
  TRUE ~ 'Segunda ola'),
  exceso = round(defunciones_observadas/defunciones_esperadas-1,4)*100,
  iso2.ccaa.code = paste0("ES-",cod_ambito,sep=""))

agr <- df %>% dplyr::filter(ola=='Primera ola') %>% group_by(iso2.ccaa.code) %>%
  summarise(exceso=round(sum(defunciones_observadas)/sum(defunciones_esperadas)-1,4)*100)

Como vemos en el código se ha preparado una variable iso2.ccaa.code para el cruce con el objeto espacial que vamos a obtener con mapSpain. Ahora para realizar el mapa sólo necesitamos unas líneas de código para realizar el mapa con el que empezamos la entrada:

No estamos igual que en la primera ola de COVID

Me cuesta hablar sobre COVID porque creo que hay voces con más conocimiento y mejor preparadas que la mía para opinar sobre el tema. Pero en los últimos tiempos leo algunas cosas que me empiezan a calentar y vuelvo a pensar que a lo mejor mi voz si debió ser escuchada. El caso es que hay una línea de opinión que argumenta que estamos más o menos igual que en el momento de aparición del virus, algo que llamamos primera ola frente a segunda ola, que las medidas no han funcionado siempre con el argumento «yo no soy contrario a pero en la Universidad de Nabucodonosor salió un estudio que». Sería bajo y de mala educación por mi parte insinuar que son unos gilipollas y por eso prefiero presentar un pequeño código de R para que podáis leer los datos de MoMo del Instituto Carlos III:

Modelos tweedie con H2O. Mutualizar siniestralidad en base a factores de riesgo

Ya he escrito sobre la distribución tweedie en otra ocasión y hoy vuelvo a traeros un ejemplo de uso que además servirá para introducir un método, una forma de trabajar con modelos en H2O y R además de emplear gradient boosting machine (gbm) para la obtención de primas de riesgo. Ya hay buenos profesionales repartidos en el mercado laboral a los que les he mostrado como hacer modelos de riesgo para el sector asegurador con R y H2O dentro del Máster en Big Data de la UNED donde imparto el módulo de seguros. Pero hoy quiero traer al blog un resumen de otro tipo de modelos que nos pueden servir para segmentar una cartera de seguros en base a la siniestralidad esperada de un riesgo. Recordad que un seguro trata de mutualizar el gasto entre una cartera, no sé a priori quien va a tener un siniestro (¡si lo supiera!) pero si dispongo de información histórica de mi cartera y esa información me puede dar unas pistas sobre lo que ocurrirá a futuro (habitualmente un año), quiero ver que parte de esa información histórica es reproducible asumiendo siempre un error.

Computer Vision con R. OpenCV de andar por casa

Trabajando con Computer Vision aprecio que estamos muy limitados por las máquinas que usamos, o tiene mucho sentido montar GPUs en casa del tamaño del aire acondicionado y por supuesto no tiene sentido el consumo energético que implica. Aquí estoy yo montando una GPU para el análisis de imágenes.

Este tema implica que la Computer Vision no lo podrá usar el común de los data scientist , a los necesarios conocimientos técnicos y matemáticos se añade el disponer de unos recursos tecnológicos que no están al alance de cualquiera. Sin embargo, los conocimientos técnicos y matemáticos los puedes adquirir o puedes aprovecharte de los entornos colaborativos. Pero, podemos iniciarnos en el reconocimiento de imágenes con R y la librería openCV y si salen algunos temas en los que estoy enredando es posible que la reducción de dimensionalidad y la geometría nos ahorre máquinas y energía.

R + Python = reticulate

He sido reticente a usar reticulate con R porque no me gusta R markdown y si he trabajado con Python no he necesitado R y viceversa. Ahora tengo en mente algún juego/proyecto de esos que se quedan siempre en el tintero por falta de tiempo o interés pero me están sirviendo para elaborar unos apuntes sobre R markdow y Python que voy a sintetizaros en esta entrada por si a alguien le fuera de utilidad.