Más sobre ciencia de datos: cienciadedatos.net o joaquinamatrodrigo.github.io

Librerías


library(animation)
# Para instalar animation primero hay instalar en el sistema operativo: en el caso
# de ubuntu 16.4 se consigue con los siguientes comandos:
# sudo add-apt-repository -y ppa:cran/imagemagick
# sudo apt-get update
# sudo apt-get install -y libmagick++-dev

# Paquetes para los ejemplos
library(viridis)
library(ggplot2)
library(ranger)



Rotar gráfico 3D


Se muestra una función 3D desde varios ángulos.

funcion <- function(x1, x2){
             sin(x2)*exp(1-cos(x1))^2 + cos(x1)*exp(1-sin(x2))^2 + (x1-x2)^2
           }
x1  <- seq(-10, 0, length.out = 50)
x2  <- seq(-6.5, 0, length.out = 50)
f_x <- outer(x1, x2, FUN = funcion)

colores        <- viridis::magma(n = 100, alpha = 0.7)
z.facet.center <- (f_x[-1, -1] + f_x[-1, -ncol(f_x)] +
                     f_x[-nrow(f_x), -1] +
                     f_x[-nrow(f_x), -ncol(f_x)])/4
z.facet.range  <- cut(z.facet.center, 100)

# Secuencia de ángulos con los que crear los gráficos
angulos <- seq(0, 360, 10)

saveGIF(
  for (i in seq_along(angulos)) {
    par(mai = c(0,0,0,0))
    persp(x = x1, y = x2, z = f_x,
      shade = 0.8,
      r     = 8,
      phi   = 10,
      theta = angulos[i],
      col   = colores[z.facet.range],
      axes  = FALSE
    )
  },
  # Nombre del gif
  movie.name = "grafico3d.gif",
  # Dimensiones
  ani.width  = 350,
  ani.height = 350,
  # Tiempo de duración de cada frame (segundos)
  interval = 0.2
)
## [1] TRUE



x <- seq(-10, 10, length=20)
y <- x
f <- function(x, y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)

# Secuencia de ángulos con los que crear los gráficos
angulos <- seq(0, 360, 10)

saveGIF(
  for (i in seq_along(angulos)) {
    par(mai = c(0,0,0,0))
    persp(
      x = x,
      y = y,
      z = z,
      phi = 20,
      theta = angulos[i],
      expand = 0.5,
      col = "gray30",
      border = "green",
      axes = FALSE
    )
  },
  # Nombre del gif
  movie.name = "grafico3d_2.gif",
  # Dimensiones
  ani.width  = 350,
  ani.height = 350,
  # Tiempo de duración de cada frame (segundos)
  interval = 0.2
)
## [1] TRUE



ggplot2


Se muestra como evoluciona un modelo random forest a medida que se incrementa el número de árboles.

x <- seq(0, pi * 3, length.out = 600)
y <- sin(x) + rnorm(n = length(x), mean = 0, sd = 0.3)
datos <- data.frame(x, y)
arboles <- c(1,2,3, seq(5, 100, 15))
saveGIF(
  for (i in seq_along(arboles)) {
    modelo <- ranger::ranger(
            formula   = y ~ x,
            num.trees = arboles[i],
            max.depth = 3,
            data = datos
          )

    p <- ggplot(data = datos, aes(x, y)) +
        geom_point(alpha = 0.7) +
        stat_function(
          fun   = function(.x){
                    predict(modelo, data = data.frame(x = .x))[["predictions"]]
                  },
          color = "red",
          size  = 2
        ) +
        labs(title = paste("Modelo random forest: nº árboles =", arboles[i])) +
        theme(title = element_text(face = "bold"))
    
    # Al ser un gráfico ggplot2 es necesario hacer el print()
    print(p)
  },
  # Nombre del gif
  movie.name = "grafico_ggplot.gif",
  # Dimensiones
  ani.width  = 700,
  ani.height = 400,
  # Tiempo de duración de cada frame (segundos)
  interval = 1
)
## [1] TRUE



Creative Commons Licence
Este material, creado por Joaquín Amat Rodrigo, tiene licencia Attribution-NonCommercial-ShareAlike 4.0 International.