De la T4 a Madrid: ¿coche o transporte público?

Kiko Llaneras analizaba ayer en El País el trayecto en coche y transporte público desde el aeropuerto al centro de diversas ciudades españolas en Del aeropuerto al centro: ¿en coche o transporte público? El resultado es el esperado, es decir, que en coche se tarda menos en general, pero con la salvedad de dos casos: Valencia y la terminal T4 de Madrid, donde el tiempo promedio es similar en transporte público.

En concreto, para la T4, se obtienen unos 21 y 26 minutos de trayecto para coche y transporte público respectivamente. Este resultado choca frontalmente con la experiencia cotidiana, pero hay que tener en cuenta que el dato está calculado para el trayecto hasta la parada de transporte público más cercana al ayuntamiento. En definitiva, no parece un dato muy representativo del madrileño medio y ni siquiera del turista medio que vaya hacia su hotel. De hecho, en el artículo añaden que

Mi compañero Marco Gramaglia ha hecho un análisis más extenso del asunto para la T4 de Madrid con el objetivo de obtener una media más representativa. Para ello, ha calculado la distancia y el tiempo, en coche y transporte público, desde la terminal T4 hasta cada uno de los barrios de Madrid. Después, cada barrio contribuye a la media global de manera ponderada por población:

Yo he tomado sus datos y he obtenido la siguiente figura que desglosa distancia y duración del viaje, en coche y transporte público, para cada barrio. El tamaño de los puntos es proporcional a la población del barrio y las líneas verticales marcan las medias ponderadas, cuyos valores exactos también aparecen sobreimpresos.

BAP

Como puede apreciarse en la gráfica de la derecha, la duración del viaje en coche tiene una varianza pequeña. Es decir, vayas a donde vayas dentro de Madrid, en coche tardarás un tiempo cercano a la media ponderada, que es de unos 23 minutos. Por otro lado, la duración del viaje en transporte público varía mucho en función del barrio de destino, cuya media ponderada es de más de 1 hora.

Hay pocos barrios con una media en transporte público cercana a la media ponderada global en coche. Uno de ellos, precisamente, es el barrio de Justicia, colindante con el Ayuntamiento de Madrid, de ahí que el dato obtenido por Kiko Llaneras para el caso de la T4 resulte poco representativo. Probablemente el análisis de las otras ciudades adolecerá de un problema similar, aunque lógicamente la desviación será menor en ciudades más pequeñas.

Metodología

Los diferentes barrios y sus coordenadas se han descargado de aquí; las cifras de población, de aquí. A partir de estos datos, se ha calculado el centroide de cada barrio y, con ayuda de Google Maps, se han obtenido las distancias y duraciones de trayecto desde la terminal T4 hasta dichos centroides, tanto en coche como en transporte público, para hoy 2 de agosto a las 17 horas.

Se podría refinar el análisis obteniendo los datos para diferentes días y diferentes horas, pero la diferencia promedio de duración obtenida entre ambos medios de transporte es lo suficientemente grande como para aceptar que las conclusiones no variarían.

Presentación de simmer en sociedad

En un ratito, a las 19:00 h, empezará la 35 Reunión del Grupo de R de Madrid en Medialab Prado, y me dejarán la tribuna unos minutos para presentar simmer a la comunidad eRReRa de Madrid. Que, por cierto, se está haciendo mayor y ya tiene hasta página web y mailing list.

Dejo por aquí la presentación de mi charla. Sin mi voz rellenando los huecos no tiene mucho sentido, así que si te interesa y no andas lejos, ya sabes dónde estaremos. Si no, se suelen grabar y colgar por aquí.

El agujero de la construcción (2)

He ampliado el dataset de la entrada anterior para identificar personas físicas y jurídicas y recoger códigos de actividad (CNAE) y objeto social de las empresas. El análisis se puede seguir aquí. El principal resultado es el histograma por código CNAE o, dicho de otra forma, cómo se distribuyen las empresas deudoras por actividad económica:

hist

¿Qué representa ese pico entre 4000 y 4500? Bien, no hay sorpresas aquí: resulta que ese rango de códigos está destinado al sectorde la construcción. A partir de ahí, he refinado el primer análisis con 144 empresas más reconocidas gracias a dicho código. Como resultado, ahora el número de empresas de la construcción supera el 50 % y la deuda que acumulan prácticamente llega al 60 %.

bars

boxplot

El agujero de la construcción

He abierto un repositorio de GitHub con un análisis muy tonto con R sobre la lista de grandes morosos recientemente publicada por la Agencia Tributaria. Si alguien quiere colaborar, está más que invitado. El análisis puede leerse aquí de momento, hasta que haga algo más potable con todo esto (¿github.io?, ¿más ideas?, ¿algo que sea embebible aquí?) definitivamente, y si todo va bien, debería poder leerse aquí debajo:

simmer: un simulador de eventos discretos para R

R es un maravilloso lenguaje de programación principalmente enfocado a la estadística y la representación de datos que utilizo en mi día a día, tanto en mis labores de investigación como de docencia, aunque no me prodigo mucho al respecto por aquí. Al mismo tiempo, la simulación por eventos discretos, una de las técnicas por excelencia en mi campo (y otros, y a la cual dedico mis horas de docencia), no tenía hasta ahora representación en el universo R. Y digo hasta ahora porque, gracias al esfuerzo de Bart Smeets y el mío propio, el CRAN (Comprehensive R Archive Network, el repositorio oficial de paquetes de R) ya cuenta con simmer, un simulador de eventos discretos para R.

El paquete simmer es un proyecto creado originalmente por Bart al que yo me he unido como colaborador y ahora también mantenedor del paquete. Si alguien está interesado, lo puede instalar directamente desde CRAN con el instalador de paquetes de R o aquí tiene el repositorio de GitHub con las últimas novedades. Sugerencias y reportes de bugs, también en GitHub.

Aquí un pequeño ejemplo de funcionamiento (una introducción de uso más extensa puede encontrarse aquí):

library(simmer)

coffees <- list(
  espresso =function() runif(1, min=5, max=10),
  macchiato=function() runif(1, min=6, max=12),
  americano=function() runif(1, min=3, max=8)
)
coffee_prep_duration <- function()
  sample(coffees, 1)[[1]]()

coffee_trajectory <- create_trajectory("I want coffee!") %>%
  seize("barista", 1) %>%
  timeout(coffee_prep_duration) %>%
  release("barista", 1)

env <- simmer("coffee shop") %>%
  add_resource("barista", 2) %>%
  add_generator("caffeine addict",
                coffee_trajectory, 
                function() abs(rnorm(1, 5, 2))) %>%
  run(until=480)
  
plot_evolution_arrival_times(env, type = "flow_time")

simmer