Después de haber visto el análisis que hizo Victoriano Izquierdo hace unas semanas sobre las terrazas de Madrid usando Graphext (eran un par de semanas cuando empecé esta newsletter, pero he estado muy liado) me entraron ganas de hacer un análisis también sobre terrazas pero con purititos pandas y a ver lo que salía.
Mientras descargaba los datos, pensé en cruzarlos con otras cosas cosas como el callejero y el censo de locales para rascar un poco más en el mundo de las terrazas de Madrid, así que eso he hecho.
Análisis exploratorio
Antes de nada, me voy a quedar únicamente con los bares con mesas y sillas diferentes de cero, que hay algunos en el dataset. También he eliminado los duplicados en función de id_local (id asignado a cada local)
terrazas = terrazas[
(terrazas["mesas"] > 0) &
(terrazas["sillas"] > 0)
]
terrazas = terrazas.drop_duplicates(subset=["id_local"])
Además voy a juntar todos los conceptos de mesas y sillas en dos variables agregadas: mesas y sillas.
Distrito con más terrazas
Easy peasy con pandas: agrupar por distrito aplicando count(). Como cuenta las ocurrencias por distrito nos vale cualquier columna, aquí yo cojo “id_local” para que cuente los valores diferentes, y la renombro como “bares_con_terraza”:
(
terrazas_short
.groupby("desc_distrito_local", as_index=False)
[["id_local"]]
.count()
.sort_values(by="id_local", ascending=False)
.reset_index(drop=True)
.rename(columns={"mesas": "bares_con_terraza"})
)
Resultando en este ranking: gana Distrito Centro y palma Vicálvaro.
Distritos con más sillas en terraza
Vale, Centro tiene muchas terrazas, pero, ¿es dónde más gente puede sentarse?. Esta es fácil: usando groupby por barrio y sum sobre “sillas_es“:
(
terrazas_short
.groupby("desc_distrito_local", as_index=False)
[["sillas"]]
.sum()
.sort_values(by="sillas", ascending=False)
.reset_index(drop=True)
)
Vaya, pues no ha habido sorpresas. Centro sigue ganando.
Distrito Centro lo peta en cantidad de gente que se puede sentar, que es al final lo que nos gusta —sentarnos y que nos atraquen con una cerveza mediocre y cacahueses tiesos.
Barrios con más y menos terrazas:
¡Ojo Hispanoamérica! Fuera del centro-centro y con muchas terrazas.
Distribución de sillas por terraza en cada distrito
No es lo mismo tener terrazas en acera estrecha sin casi sillas que tener terrazas hermosas para juntarse varios.
Haciendo un merge con los dos groupby anteriores podemos calcular el número de sillas por terraza (media) por distrito:
bares_sillas = pd.merge(terrazas_d, sillas_d, on="desc_distrito_local")
bares_sillas["sillas_por_bar"] = bares_sillas["sillas"] / bares_sillas["bares_con_terraza"]
bares_sillas.sort_values(by="sillas_por_bar", ascending=False)
Vallecas manda en esto, y Salamanca palma. Sería interesante tener el dato de superficie por terraza para ver si hay relación, que entiendo que sí…
Ahora que hemos sacado la media por distrito, vamos a ver la distribución del número de sillas en cada terraza y por distrito. Viendo las distribuciones parecen bastante sesgadas a la derecha, así que mejor que marcar las medias marcaré las medianas y ordenaré por ese valor. Además, comparo (en verde) con el agregado de Madrid.
Igual hay más relación con los €/m^2 que con los m^2, ¿no? Bien porque sean zonas caras (Centro, Salamanca, Retiro) o bien porque tengan poco m^2 de aceras. En cualquier caso en distritos periféricos hay más sillas (Vallecas, Villaverde, Moratalaz).
Se ve que hay muchas terrazas pequeñas/medianas y pocas grandes en cada distrito, con algunos outliers evidentes, como estos 10 locales con más sillas de Madrid:
Distritos de la periferia en su mayoría con la excepción de Florida Retiro y Pazo Coruña en Retiro.
10 rótulos más comunes y sillas en cada uno
Por ver qué franquicia tiene más sillas en terraza he agrupado según el rótulo:
(
datos
.groupby("rotulo", as_index=False)
[["mesas", "sillas"]]
.sum()
.sort_values(by=["sillas"], ascending=False)
.head(10)
)
Los rótulos generales (bar, cafetería, bar-restaurante, etc) agrupan muchos establecimientos pequeños, y surgen como bestias las franquicias de 100 Montaditos, Rodilla, La Tagliatella, etc. Gana 100 Montaditos como franquicia en número de mesas y sillas.
Si te está gustando hasta el momento, ¡suscríbete!
Posición de las terrazas
Un análisis que me pareció molón es que dependiendo de la orientación de la calle, las terrazas tendrán diferentes horas de sol.
Para conseguir hacer este análisis, busqué en el portal de datos abiertos del Ayuntamiento de Madrid, y encontré la variable angulo_rotulacion.
Como no entendía a qué se refería, escribí al Geoportal del Ayuntamiento (geoportal@madrid.es) y con una explicación cojonuda por su parte lo entendí:
Con esto, y haciendo un poco de magia —geometría—, saqué el ángulo geográfico y calculé la dirección —N, NNE, NE, etc. Con las direcciones, se puede calcular el histograma polar y ver qué dirección agrupa más terrazas
Vemos que los ejes N-S y E-O agrupan la mayoría de las terrazas de Madrid. Según este paper en el que se analiza el potencial de horas de sol para cada orientación en el hemisferio norte, el resumen por orientación es:
Así que parece que nuestros empresarios hosteleros se colocan bastante bien, maximizando horas de sol en mañana/tarde, o colocándose al sur/norte. Habría que ver las horas de sol de cada terraza en función de las sombras de los edificios pero ya tal.
Como no se pueden hacer medias de ángulos, voy a terminar con la distribución por orientaciones de cada distrito y así elegís distrito en el que emborracharos en función de las horas de sol que queráis:
Resumen
Terrazas grandes en distritos periféricos, terrazas pequeñas en distritos del centro
Sol por la mañana en el calles este, por la tarde en calles oeste
Terrazas al norte en verano, al sur en invierno
Lecciones
Las terrazas son más grandes en distritos periféricos, supongo que por ser más baratos en €/m^2, pero habría que comprobarlo con más datos y más ganas.
A partir de ahora buscaré terrazas para desayunar al oeste, y para tomar cañas por la tarde al este.
Nos flipan las terrazas.