Normalmente, cuando queremos visualizar una variable en un territorio utilizando mapas coropletas, utilizamos geometrías administrativas que se conocen comúnmente. Por ejemplo, si quisiéramos ver las tasas de desempleo en toda Europa, podríamos visualizarlas por los respectivos estados dentro de cada país.
Sin embargo, las regiones administrativas suelen ser irregulares y varían en tamaño entre sí. Por esta razón, Una alternativa útil para visualizar cualquier variable en un territorio es usar hexágonos para dividirlo.. Las ventajas incluyen tener una geometría equilibrada para mejores comparaciones regionales y una mejor cobertura territorial. Además, los mapas hexagonales ofrecen el beneficio de minimizar el sesgo visual, ya que proporcionan una representación equitativa de las áreas, a diferencia de los límites administrativos tradicionales, que a veces pueden distorsionar la percepción de los datos debido a sus formas y tamaños irregulares.
En este articulo, Proporcionaremos una explicación paso a paso de cómo crear mapas hexagonales en Python.. Para lograr esto, utilizaremos dos bibliotecas que agilizan el proceso de creación de mapas: H3 y Plotly.
El conjunto de datos utilizado en este artículo está disponible en el portal de datos abiertos de la ciudad de Barcelona. Este portal de datos abiertos alberga datos demográficos, económicos y sociológicos de la ciudad de Barcelona, todos ellos de libre acceso. El conjunto de datos que estamos utilizando contiene información de todos los hoteles de Barcelona, incluida su ubicación.. Puedes descargar el archivo desde el siguiente enlace.
El número de hoteles será la variable que visualicemos en el mapa hexagonal. Las siguientes secciones del artículo explicarán paso a paso cómo crear esta visualización.
El primer paso de nuestro análisis, tras descargar el archivo, es proceder a la lectura y limpieza de los datos. En este caso, el conjunto de datos contiene muchas columnas que no son relevantes para nuestro análisis y no las examinaremos. Seleccionaremos específicamente el nombre del hotel, su ubicación geográfica (latitud y longitud) y quizás algún atributo relacionado con su ubicación (aunque no los usaremos en este caso particular). Una vez que hayamos seleccionado estas columnas, les cambiaremos el nombre con nombres más simples y luego nuestro conjunto de datos estará listo para su visualización.
Para visualizar los datos usando un mapa hexagonal, nuestro primer paso es crear la grilla. Para lograr esto, utilizaremos el biblioteca H3, desarrollado por Uber. El get_hexagon_grid La función es responsable de crear la cuadrícula hexagonal en forma de GeoDataFrame. Comienza creando un hexágono en una ubicación específica (latitude y longitude), en este caso, el centro de Barcelona. El tamaño de este hexágono está definido por el resolution parámetro. A continuación se generan hexágonos adicionales del mismo tamaño de forma concéntrica alrededor del hexágono central. El número de anillos concéntricos a crear está determinado por el ring_size parámetro. Finalmente, esta colección de hexágonos se convierte en un GeoDataFramedonde a cada hexágono se le asigna una identificación única correspondiente a la identificación proporcionada por la biblioteca H3.
Si bien no profundizaremos en los detalles de cada función utilizada para construir la cuadrícula hexagonal en este artículo, los lectores interesados pueden consultar la documentación de la biblioteca para obtener una comprensión detallada de cómo la hemos aplicado.
El siguiente gráfico ilustra cómo los parámetros resolution y ring_size influyen en la red creada. Resolution controla el tamaño de los hexágonos, lo que significa que resoluciones más altas dan como resultado hexágonos más pequeños. Por otra parte, el ring_size El parámetro gobierna el número de anillos concéntricos de hexágonos creados alrededor del hexágono central. En otras palabras, una mayor ring_size conduce a un mayor número de anillos concéntricos. En el siguiente gráfico, todos los gráficos tienen los mismos límites de eje. Como puedes observar, para cubrir la misma área, usar una resolución mayor requiere más anillos porque, como se mencionó anteriormente, todos los hexágonos creados son del mismo tamaño que el hexágono central.
El elegido resolution Dependerá de las variaciones de la variable que queramos representar a lo largo de un área específica. Si hay una variación significativa, una mayor resolution será considerado. En este caso particular, una resolución de 9 has sido seleccionado. Además, el ring_size Dependerá de la región que pretendemos cubrir y de la resolution elegido previamente. En este caso específico, un ring_size de 45 es suficiente para cubrir toda el área de la ciudad de Barcelona. No profundizaremos en los detalles de cómo llegamos a esta conclusión. En términos generales, obtuvimos el cuadro delimitador del polígono de la ciudad de Barcelona y determinamos el número de anillos necesarios para cubrir esa área.
A continuación, encontrará la creación de la red hexagonal en forma de GeoDataFrameutilizando los parámetros descritos anteriormente y el get_hexagon_grid función.
Como puedes ver arriba, el get_hexagon_grid función proporciona un GeoDataFrame con dos columnas: la primera columna sirve como una identificación única asignada a cada polígono por la biblioteca H3, mientras que la segunda columna contiene el polígono real y lleva el nombre geometry.
Luego de crear la grilla hexagonal, es necesario asignar cada hotel al hexágono al que pertenece. El calculate_hexagon_ids La función calcula el hexágono al que pertenece cada hotel y crea una nueva columna llamada Hexagon_ID para almacenar esta información.
Ahora, el conjunto de datos de todos los hoteles también incluye información sobre el hexágono en el que se encuentra cada hotel. Esta información se encuentra en el Hexagon_ID columna como identificador alfanumérico.
Una vez asignado el ID del hexágono procedemos a calcular los datos que deseamos visualizar. En este caso particular, nuestro objetivo es mostrar el número de hoteles en cada hexágono. Para lograrlo realizamos una agrupación por Hexagon_ID y un count operación. Además, queremos implementar una función de desplazamiento que nos permita ver los nombres de los hoteles ubicados en cada hexágono. Para lograr esto, realizamos una operación de unión para todos los nombres de hoteles del grupo. Usamos el HTML <br> etiqueta para indicar un salto de línea en la unión, ya que Plotly usa HTML para definir los textos que se desplazan sobre él.
Como se vio arriba, el marco de datos agrupado tiene tres columnas: (1) Hexagon_IDque contiene el identificador hexagonal único, (2) Countque contiene el número de hoteles en ese hexágono, y (3) Hotelsque contiene una lista de los nombres de hoteles dentro del hexágono.
Una vez agrupados los datos, Podemos pasar al paso final, que es la creación del mapa hexagonal usando Plotly..
El create_choropleth_map La función es responsable de procesar el conjunto de datos agrupados y el conjunto de datos que contiene las geometrías de cada hexágono para generar el mapa del hexágono. Este mapa nos permite visualizar qué zonas de la ciudad tienen mayor concentración de hoteles.
Para crear el mapa, emplearemos el choropleth_mapbox función disponible en Plotly Express. Esta función genera un mapa con la geometría definida (en este caso, el conjunto de hexágonos creados) y los colorea según el número de hoteles detectados en cada hexágono, utilizando la escala de colores continua seleccionada por el usuario. Cuando pasa el mouse sobre uno de los hexágonos, puede ver la lista de hoteles ubicados dentro de ese hexágono.
En este caso, el mapa de fondo utilizado es carto-positronpero este parámetro se puede ajustar fácilmente para utilizar un estilo de mapa diferente que proporcione una mejor identificación de las calles de la ciudad y los puntos de interés, como open-street-map. Además, también podemos utilizar una escala de colores diferente. En el caso anterior utilizamos el Viridis escala de colores, mientras que en este caso estamos usando la Reds escala de colores.
El mapa es interactivo, lo que nos permite acercarnos a la zona de interés.
Como se evidencia al hacer zoom sobre la zona con tonos rojizos, la mayoría de los hoteles en Barcelona están situados alrededor de la Plaça de Catalunya.
Los mapas de coropletas con regiones administrativas son un medio valioso para visualizar cómo se distribuye una variable dentro de un área geográfica. Sin embargo, tienen la desventaja de proporcionar una visualización sesgada de la distribución de la variable debido a las formas irregulares y los diferentes tamaños de las regiones administrativas. Por esta razón, El uso de mapas hexagonales con formas geométricas regulares sirve como una alternativa muy útil para analizar distribuciones en un territorio.. En este articulo, Hemos proporcionado una explicación detallada de cómo crear una cuadrícula hexagonal utilizando la biblioteca Uber H3 y cómo esta cuadrícula se ha utilizado en una visualización de Plotly para representar la distribución de hoteles en Barcelona..