Da GeoJSON a Network Graph Analisi dei confini dei paesi del mondo in Python

Dalla conversione di GeoJSON al grafo di rete analisi dei confini dei paesi del mondo in Python

Utilizzando NetworkX per l’Analisi dei Confini tra Paesi Basata su Grafici

Maksim Shutov su Unsplash

Python offre una vasta gamma di librerie che ci permettono di affrontare facilmente e rapidamente problemi in diversi settori di ricerca. L’analisi dei dati geospaziali e la teoria dei grafici sono due aree di ricerca in cui Python fornisce un potente set di utili librerie. In questo articolo, effettueremo un’analisi semplice dei confini tra paesi, esplorando specificamente quali paesi condividono confini con altri. Inizieremo utilizzando informazioni da un file GeoJSON contenente poligoni per tutti i paesi del mondo. L’obiettivo finale è creare un grafico che rappresenti i vari confini utilizzando NetworkX e utilizzare questo grafico per effettuare analisi multiple.

Acquisizione dei Dati GeoJSON: Lettura e Caricamento dei Dati Globali dei Paesi

I file GeoJSON consentono la rappresentazione di varie aree geografiche e sono ampiamente utilizzati nell’analisi e nella visualizzazione geografica. La fase iniziale della nostra analisi prevede la lettura del file countries.geojson e la sua conversione in un GeoDataFrame utilizzando GeoPandas. Questo file è stato ottenuto dal seguente repository di GitHub e contiene poligoni che rappresentano diversi paesi in tutto il mondo.

GitHub – datasets/geo-countries: Country polygons as GeoJSON in a datapackage

Country polygons as GeoJSON in a datapackage. Contribute to datasets/geo-countries development by creating an account…

github.com

GeoDataFrame con Informazioni Complete sui Paesi (Immagine creata dall'autore)

Come mostrato sopra, il GeoDataFrame contiene le seguenti colonne:

  1. ADMIN: Rappresenta il nome amministrativo dell’area geografica, come il nome del paese o della regione.
  2. ISO_A3: Stato per il codice alpha-3 ISO 3166-1, un codice di tre lettere che identifica univocamente i paesi.
  3. ISO_A2: Denota il codice alpha-2 ISO 3166-1, un codice di due lettere utilizzato anche per l’identificazione dei paesi.
  4. geometry: Questa colonna contiene le informazioni geometriche che definiscono la forma dell’area geografica, rappresentata come dati di tipo MULTIPOLYGON.

È possibile visualizzare tutti i multi poligoni che compongono il GeoDataFrame utilizzando il metodo plot, come dimostrato di seguito.

Rappresentazione Visuale del GeoDataFrame (Immagine creata dall'autore)

Calcolo delle Coordinate del MultiPolygon: Latitudine e Longitudine

I multi poligoni all’interno della colonna geometry appartengono alla classe shapely.geometry.multipolygon.MultiPolygon. Questi oggetti contengono vari attributi, uno dei quali è l’attributo centroid. L’attributo centroid fornisce il centro geometrico del MULTIPOLYGON e restituisce un POINT che rappresenta questo centro.

Successivamente, possiamo utilizzare questo POINT per estrarre la latitudine e la longitudine di ogni MULTIPOLYGON e memorizzare i risultati in due colonne all’interno del GeoDataFrame. Effettuiamo questo calcolo perché successivamente utilizzeremo questi valori di latitudine e longitudine per visualizzare i nodi sul grafico in base alle loro posizioni geografiche reali.

Creare un grafico di rete di confini nazionali

Ora è il momento di procedere con la costruzione del grafico che rappresenterà i confini tra i diversi paesi nel mondo. In questo grafico, i nodi rappresenteranno i paesi, mentre gli archi indicheranno l’esistenza di un confine tra questi paesi. Se esiste un confine tra due nodi, il grafico avrà un arco che li collega; in caso contrario, non ci sarà nessun arco.

La funzione create_country_network elabora le informazioni all’interno del GeoDataFrame e costruisce un Grafo che rappresenta i confini nazionali.

Inizialmente, la funzione itera attraverso ogni riga del GeoDataFrame, dove ogni riga corrisponde a un paese diverso. Poi, crea un nodo per il paese aggiungendo latitudine e longitudine come attributi al nodo.

Nel caso in cui la geometria non sia valida, la corregge utilizzando il metodo buffer(0). Questo metodo corregge essenzialmente le geometrie non valide applicando una piccola operazione di buffer con una distanza di zero. Questa azione risolve problemi come le auto-intersezioni o altre irregolarità geometriche nella rappresentazione del multipoligono.

Dopo aver creato i nodi, il passo successivo è popolare la rete con gli archi correlati. Per fare ciò, iteriamo attraverso i diversi paesi e se c’è un’intersezione tra i poligoni che rappresentano entrambi i paesi, implica che condividono un confine comune e, di conseguenza, viene creato un arco tra i loro nodi.

Visualizzare la rete creata dei confini nazionali

Il passo successivo consiste nel visualizzare la rete creata, dove i nodi rappresentano i paesi nel mondo e gli archi indicano la presenza di confini tra di essi.

La funzione plot_country_network_on_map è responsabile per l’elaborazione dei nodi e degli archi del grafo G e per la loro visualizzazione su una mappa.

Rete dei Confini Nazionali (Immagine creata dall'autore)

Le posizioni dei nodi sul grafico sono determinate dalle coordinate di latitudine e longitudine dei paesi. Inoltre, è stata posizionata una mappa sullo sfondo per fornire un contesto più chiaro alla rete creata. Questa mappa è stata generata utilizzando l’attributo boundary del GeoDataFrame. Questo attributo fornisce informazioni sui confini geometrici dei paesi rappresentati, facilitando la creazione della mappa di sfondo.

È importante notare un dettaglio: nel file GeoJSON utilizzato, ci sono isole che vengono considerate paesi indipendenti, anche se amministrativamente appartengono a un paese specifico. Ecco perché potresti vedere numerosi punti nelle aree marine. Tieni presente che il grafo creato si basa sulle informazioni disponibili nel file GeoJSON da cui è stato generato. Se usassimo un file diverso, il grafo risultante sarebbe diverso.

Esplorare Idee: Rispondere Domande con la Rete dei Confini Nazionali

La rete dei confini nazionali che abbiamo creato può velocemente aiutarci a rispondere a molte domande. Di seguito, illustreremo tre spunti che possono essere facilmente ottenuti elaborando le informazioni fornite dalla rete. Tuttavia, ci sono molte altre domande a cui questa rete può aiutarci a rispondere.

Spunto 1: Esaminare i Confini di una Nazione Scelta

In questa sezione, valuteremo visivamente i vicini di un paese specifico.

La funzione plot_country_borders consente una rapida visualizzazione dei confini di un paese specifico. Questa funzione genera un sottografo del paese fornito in input e dei paesi vicini. Procede poi a visualizzare questi paesi, rendendo facile osservare i paesi vicini di una nazione specifica. In questo caso, il paese scelto è il Messico, ma possiamo facilmente adattare l’input per visualizzare qualsiasi altro paese.

Rete dei Confini Nazionali in Messico (Immagine creata dall'autore)

Come puoi vedere nell’immagine generata, il Messico condivide il confine con tre paesi: gli Stati Uniti, il Belize e il Guatemala.

Insight 2: I 10 paesi con il maggior numero di confini

In questa sezione, analizzeremo quali paesi hanno il maggior numero di paesi confinanti e visualizzeremo i risultati sullo schermo. Per fare ciò, abbiamo implementato la funzione calculate_top_border_countries. Questa funzione valuta il numero di vicini per ogni nodo nella rete e visualizza solo quelli con il maggior numero di vicini (i primi 10).

Le 10 nazioni con il maggior numero di confini (Immagine creata dall'autore)

Dobbiamo ribadire che i risultati ottenuti dipendono dal file GeoJSON iniziale. In questo caso, il ghiacciaio di Siachen è codificato come un paese separato, motivo per cui appare condividere un confine con la Cina.

Insight 3: Esplorazione delle rotte più brevi tra paesi

Concludiamo la nostra analisi con una valutazione delle rotte. In questo caso, valuteremo il numero minimo di confini che è necessario attraversare per viaggiare da un paese di origine a un paese di destinazione.

La funzione find_shortest_path_between_countries calcola il percorso più breve tra un paese di origine e un paese di destinazione. Tuttavia, è importante notare che questa funzione fornisce solo uno dei possibili percorsi più brevi. Questa limitazione deriva dal suo utilizzo della funzione shortest_path di NetworkX, che trova automaticamente un singolo percorso più breve a causa della natura dell’algoritmo utilizzato.

Per accedere a tutti i possibili percorsi tra due punti, compresi i percorsi più brevi multipli, sono disponibili alternative. Nel contesto della funzione find_shortest_path_between_countries, si potrebbero esplorare opzioni come all_shortest_paths o all_simple_paths. Queste alternative sono in grado di restituire più percorsi più brevi anziché solo uno, a seconda delle specifiche necessità dell’analisi.

Abbiamo utilizzato la funzione per trovare il percorso più breve tra la Spagna e la Polonia e l’analisi ha rivelato che il numero minimo di attraversamenti di confine richiesti per viaggiare dalla Spagna alla Polonia è 3.

Ricerca del percorso ottimale dalla Spagna alla Polonia (Immagine creata dall'autore)

Sommario

Python offre una vasta gamma di librerie che spaziano in vari ambiti di conoscenza e possono essere integrate senza soluzione di continuità in qualsiasi progetto di data science. In questo caso, abbiamo utilizzato librerie dedicate all’analisi dei dati geometrici e all’analisi dei grafi per creare un grafo che rappresenta i confini del mondo. Successivamente, abbiamo mostrato casi d’uso per questo grafo al fine di rispondere rapidamente a domande, consentendoci di condurre analisi geografiche senza sforzo.

Grazie per la lettura.

Amanda Iglesias