Un problema de cartas

Hay tres cartas. Una de ellas tiene ambas caras rojas; otra, ambas azules; la última, una roja y una azul. Al azar, te ponen una sobre la mesa. La cara que ves es roja. ¿Cuál es la probabilidad de que la cara que no ves sea también roja?

Curso de presencial y gratuito en Madrid (mío, para más señas)

Voy a impartir un curso básico de R en Madrid. El curso es

  • presencial (no habrá vídeo, retransmisión en streaming ni similares),
  • gratuito (aunque mira las letra pequeña del final)
  • no reglado, por lo que no se experidirán certificados, ANECAs o papeles de ningún tipo.

Se trata de un curso de introducción a R desde cero en cuatro sesiones de tres horas los martes (24 de febrero y 3, 10 y 17 de marzo) de 18:00 a 21:00. El programa de las sesiones es:

Movilidad municipal

Esto que cuento hoy es algo que, creo yo, pocos saben. Pero que han sufrido grandemente quienes hayan trabajando con datos municipales históricos: que de año en año, ocurren altas, bajas y modificaciones en esa lista que uno consideraría fija.

Aquí (y más concretamente aquí) puede consultarse la lista de las modificaciones en el mapa municipal en lo que llevamos de 2015. A través de los menús del primer enlace uno puede navegar hasta los cambios ocurridos en años anteriores.

Parametrización de modelos de supervivencia (paramétricos)

He participado directa o indirectamente en algunas decenas de los llamados proyectos de churn. Estoy al tanto de aún más de los que he hablado con otros colegas.

Digresión (para desavisados): se aplica (impropiamente) el término churn a aquellos clientes (en general) que abandonan una compañía o dan de baja un servicio. En realidad churn se refiere al flujo a corto plazo de clientes de poco valor que adquiere una compañía y que pierde enseguida. No sé por qué no se ha popularizado abandono. Uno de los primeros proyectos que abordan los departamentos de inteligencia de clientes de las compañías que se lo pueden permitir es tratar de identificar aquellos clientes con alta probabilidad de abandonarla.

Recurrencia recurrente

Pregunta Antonio Sánchez Chinchón cómo mejorar la parte menos vistosa e imaginativa de esto, es decir, el código. Él, y muchos diríamos que correctamente, autocritica el uso de eval + parse para plagar el namespace de funciones.

La respuesta está en la recurrencia. He aquí mi versión del código:

library(ggplot2)
library(gridExtra)

nrows <- 6
coefs.a <- runif(min=1, max=50, nrows)
coefs.b <- runif(min=1, max=50, nrows)

foo.a <- sample(c(sin, cos), nrows, replace = TRUE)
foo.b <- sample(c(sin, cos), nrows, replace = TRUE)

foo <- function(x, a, b){
  if(a == 1 || b == 1)
    return(foo.a[[a]](coefs.a[a] * x))

  if(b == a)
    return(foo.b[[a]](coefs.b[a] * x))

  foo(x, a-1, b) + foo(x, a-1, b-1)
}

vplayout = function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)

opts=theme(legend.position="none",
      panel.background = element_rect(fill="gray95"),
      plot.background = element_rect(fill="gray95", colour="gray95"),
      panel.grid = element_blank(),
      axis.ticks=element_blank(),
      axis.title=element_blank(),
      axis.text =element_blank())

grid.newpage()

jpeg(file="AddingWaves.jpeg", width = 1800, height = 1000,
      bg = "gray95", quality = 100)

pushViewport(viewport(layout = grid.layout(nrows, 2*nrows-1)))

for (i in 1:nrows) {
  for (j in 1:i) {
    print(ggplot(data.frame(x = c(0, 20)), aes(x)) +
            stat_function(fun = function(x) foo(x, i, j),
                  colour = "black", alpha=.75)+opts,
          vp = vplayout(i, nrows+(2*j-(i+1))))
  }
}

dev.off()

El resultado es

Vuelvo a España

Al final y contra todo pronóstico, me han afectado los despidos de eBay.

Así que vuelvo a España. Pronto se me verá por Madrid. Que la primavera sea propicia para las ideas que me rondan la cabeza.

Una nota sobre pésames y jódetes: que nadie se sienta obligado a darme los primeros o pierda el tiempo cantándome los segundos. A mi edad, las dos únicas palabras que me afectarían son las de es cáncer. Lo sucedido son puros y amortizadísimos gajes del oficio.

Ejercicios de mi clase de R

R

Ya conté que participo (como profesor) en el Experto en Data Science de la U-tad. Voy a copiar aquí los ejercicios que propuse en la asignatura de preparación de datos con R. Por si alguien les quiere hincar el diente. En lo que sigue he eliminado algunos detalles que no vienen a cuento. He dejado el resto.

Son así:

Los ejercicios tienen que resolverse individualmente. No son sencillos: parte de ellos están inspirados en problemas prácticos reales. Por eso puedes ayudarte de cualquier tipo de instrumento (Google, blogs, libros, etc.) que estaría a tu alcance en tu trabajo. Eso sí, en las soluciones que envíes, indica los recursos que utilices y deja clara cuál es tu aportación en cada caso.

Parametrización para vagos muy, muy vagos

R

Un ejemplo sencillo. Tengo un programa que contiene, por ejemplo, una consulta tal que

query <- "select * from mitabla
    where country = 24 and year = 2014"

Hay gente sumamente diligente, con una enorme capacidad de trabajo y con vocación de hormiguita que en mil ejecuciones distintas (distinto país, distinto año) del código anterior sería capaz de editar la consulta a mano. Probablemente usando el block de notas. Esa gente, que además suele madrugar mucho, siempre me ha dado cierta envidia. No sé por qué.

Entrevista en Principio de Incertidumbre: "big data" sin artificio

El jueves pasado y durante un breve receso de mi gripe, me entrevistaron en Canal Extremadura Radio. Durante una hora larga (que luego hubo que recortar a los 30 minutos que dura el programa de divulgación científica Principio de Incertidumbre) hablé de estadística, big data y R con Jorge Solís Bejarano.

A quien tengo que agradecer, primero, que contase conmigo; pero además y sobre todo, lo bien documentado que estuvo (lo cual me lleva a pensar que habrá que estar atentos a otras grabaciones de su programa).