Python ofrece una amplia gama de bibliotecas que nos permiten abordar fácil y rápidamente problemas en diversas áreas de investigación. El análisis de datos geoespaciales y la teoría de grafos son dos áreas de investigación en las que Python proporciona un potente conjunto de bibliotecas útiles.. En este articulo, Realizaremos un análisis simple de las fronteras mundiales., explorando específicamente qué países comparten fronteras con otros. Comenzaremos utilizando información de un archivo GeoJSON que contiene polígonos para todos los países del mundo. El objetivo final es crear un gráfico que represente los distintos límites utilizando NetworkX y utilizar este gráfico para realizar múltiples análisis.
Los archivos GeoJSON permiten la representación de varias áreas geográficas y se utilizan ampliamente en análisis y visualizaciones geográficas.. La etapa inicial de nuestro análisis implica la lectura del countries.geojson archivo y convertirlo en un GeoDataFrame usando GeoPandas. Este archivo se obtuvo del siguiente repositorio de GitHub y contiene polígonos que representan diferentes países del mundo.
Como se muestra arriba, el GeoDataFrame contiene las siguientes columnas:
ADMIN: representa el nombre administrativo del área geográfica, como el nombre del país o la región.ISO_A3: Representa el código de país ISO 3166–1 alfa-3, un código de tres letras que identifica de forma única a los países.ISO_A2: Indica el código de país ISO 3166–1 alfa-2, un código de dos letras que también se utiliza para la identificación del país.geometry: Esta columna contiene la información geométrica que define la forma del área geográfica, representada comoMULTIPOLYGONdatos.
Puedes visualizar todos los múltiples polígonos que componen el GeoDataFrame utilizando elplot método, como se demuestra a continuación.
Los múltiples polígonos dentro del geometry la columna pertenece a la clase shapely.geometry.multipolygon.MultiPolygon. Estos objetos contienen varios atributos, uno de los cuales es el centroid atributo. El centroid El atributo proporciona el centro geométrico de la MULTIPOLYGON y devuelve un POINT que representa este centro.
Posteriormente podemos utilizar este POINT para extraer la latitud y longitud de cada MULTIPOLYGON y almacenar los resultados en dos columnas dentro del GeoDataFrame. Realizamos este cálculo porque luego usaremos estos valores de latitud y longitud para visualizar los nodos en el gráfico en función de sus posiciones geográficas reales.
Ahora es el momento de proceder la construcción del gráfico que representará las fronteras entre diferentes países del mundo. En este gráfico, el los nodos representarán paísesmientras los bordes indicarán la existencia de una frontera entre estos países. Si hay un borde entre dos nodos, el gráfico tendrá un borde que los conectará; de lo contrario, no habrá ventaja.
La función create_country_network procesa la información dentro del GeoDataFrame y construye un Graph Representando las fronteras del país.
Inicialmente, la función itera a través de cada fila del GeoDataFrame, donde cada fila corresponde a un país diferente. Luego, crea un nodo para el país y agrega latitud y longitud como atributos del nodo.
En el caso de que la geometría no sea válida la rectifica utilizando el buffer(0) método. Básicamente, este método corrige geometrías no válidas aplicando una pequeña operación de buffer con una distancia de cero. Esta acción resuelve problemas como autointersecciones u otras irregularidades geométricas en la representación multipolígono.
Después de crear los nodos, el siguiente paso es poblar la red con los bordes relevantes. Para hacer esto, iteramos a través de los diferentes países, y si hay una intersección entre los polígonos que representan a ambos países, implica que comparten una frontera común y, como resultado, se crea un borde entre sus nodos.
El siguiente paso consiste en visualizar la red creada, donde los nodos representan países de todo el mundo y los bordes significan la presencia de fronteras entre ellos.
La función plot_country_network_on_map es responsable de procesar los nodos y bordes del gráfico G y mostrarlos en un mapa.
Las posiciones de los nodos en el gráfico están determinadas por las coordenadas de latitud y longitud de los países.. Además, se ha colocado un mapa en segundo plano para proporcionar un contexto más claro para la red creada. Este mapa fue generado utilizando el boundary atributo de la GeoDataFrame. Este atributo proporciona información sobre los límites geométricos de los países representados, ayudando en la creación del mapa de fondo.
Es importante señalar un detalle: en el archivo GeoJSON utilizado hay islas que se consideran países independientes, aunque administrativamente pertenecen a un país específico. Por eso es posible que veas numerosos puntos en las zonas marítimas. Tenga en cuenta que el gráfico creado se basa en la información disponible en el archivo GeoJSON a partir del cual se generó. Si usáramos un archivo diferente, el gráfico resultante sería diferente.
La red fronteriza nacional que hemos creado puede ayudarnos rápidamente a abordar múltiples preguntas.. A continuación, describiremos tres conocimientos que se pueden obtener fácilmente procesando la información proporcionada por la red. Sin embargo, hay muchas otras preguntas que esta red puede ayudarnos a responder.
Insight 1: Examinando las fronteras de una nación elegida
En esta sección, evaluaremos visualmente a los vecinos de un país específico.
El plot_country_borders La función permite una visualización rápida de las fronteras de un país específico. Esta función genera un subgrafo del país proporcionado como entrada y sus países vecinos. Luego procede a visualizar estos países, lo que facilita la observación de los países vecinos de una nación específica. En este caso el país elegido es México, pero podemos adaptar fácilmente el input para visualizar cualquier otro país.
Como puedes ver en la imagen generada, México comparte su frontera con tres países: Estados Unidos, Belice y Guatemala.
Insight 2: Los 10 países con más fronteras
En esta sección, Analizaremos qué países tienen mayor número de países vecinos. y mostrar los resultados en la pantalla. Para lograrlo hemos implementado el calculate_top_border_countries función. Esta función evalúa la cantidad de vecinos para cada nodo de la red y muestra solo aquellos con la mayor cantidad de vecinos (los 10 principales).
Debemos reiterar que los resultados obtenidos dependen del archivo GeoJSON inicial. En este caso, el glaciar Siachen está codificado como un país separado, por lo que aparece como si compartiera frontera con China.
Insight 3: Explorando las rutas más cortas de un país a otro
Concluimos nuestro análisis con una evaluación de la ruta. En este caso, Evaluaremos el número mínimo de fronteras que se deben cruzar al viajar de un país de origen a un país de destino..
El find_shortest_path_between_countries La función calcula el camino más corto entre un país de origen y un país de destino. Sin embargo, es importante tener en cuenta que esta función proporciona sólo uno de los caminos más cortos posibles. Esta limitación surge de su uso de la shortest_path función de NetworkXque inherentemente encuentra un camino más corto debido a la naturaleza del algoritmo utilizado.
Para acceder a todos los caminos posibles entre dos puntos, incluidos varios caminos más cortos, existen alternativas disponibles. En el contexto de la find_shortest_path_between_countries función, se podrían explorar opciones como all_shortest_paths o all_simple_paths. Estas alternativas son capaces de devolver múltiples caminos más cortos en lugar de solo uno, según los requisitos específicos del análisis.
Empleamos la función para encontrar el camino más corto entre España y Polonia, y el análisis reveló que el número mínimo de cruces fronterizos necesarios para viajar de España a Polonia es 3.
Python ofrece una gran cantidad de bibliotecas que abarcan diversos dominios del conocimiento, que pueden integrarse perfectamente en cualquier proyecto de ciencia de datos. En este caso, hemos utilizado bibliotecas dedicadas tanto al análisis de datos geométricos como al análisis de gráficos para crear un gráfico que represente las fronteras del mundo. Posteriormente, hemos demostrado casos de uso de este gráfico para responder preguntas rápidamente, lo que nos permite realizar análisis geográficos sin esfuerzo.
Gracias por leer.
Amanda Iglesias