Python offre un’ampia gamma di librerie che ci consentono di affrontare facilmente e rapidamente problemi in vari ambiti di ricerca. L’analisi dei dati geospaziali e la teoria dei grafi sono due aree di ricerca in cui Python fornisce un potente set di librerie utili. In questo articolo, condurremo una semplice analisi dei confini del mondoesplorando specificamente quali paesi condividono i confini con altri. Inizieremo utilizzando le 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 eseguire più analisi.
I file GeoJSON consentono la rappresentazione di varie aree geografiche e sono ampiamente utilizzati nell’analisi e nelle visualizzazioni geografiche. La fase iniziale della nostra analisi prevede la lettura del countries.geojson
file e convertendolo in un file GeoDataFrame
utilizzando GeoPandas
. Questo file proviene dal seguente repository GitHub e contiene poligoni che rappresentano diversi paesi in tutto il mondo.
Come mostrato sopra, il GeoDataFrame
contiene le seguenti colonne:
ADMIN
: Rappresenta il nome amministrativo dell’area geografica, ad esempio il nome del paese o della regione.ISO_A3
: sta per il codice paese ISO 3166–1 alpha-3, un codice di tre lettere che identifica in modo univoco i paesi.ISO_A2
: indica il codice paese ISO 3166–1 alpha-2, un codice di due lettere utilizzato anche per l’identificazione del paese.geometry
: Questa colonna contiene le informazioni geometriche che definiscono la forma dell’area geografica, rappresentata comeMULTIPOLYGON
dati.
Puoi visualizzare tutti i multi poligoni che compongono il GeoDataFrame
usando ilplot
metodo, come illustrato di seguito.
I multi poligoni all’interno del file geometry
appartengono alla classe shapely.geometry.multipolygon.MultiPolygon
. Questi oggetti contengono vari attributi, uno dei quali è the centroid
attributo. IL centroid
l’attributo fornisce il centro geometrico del MULTIPOLYGON
e restituisce a POINT
che rappresenta questo centro.
Successivamente, possiamo usarlo POINT
per estrarre la latitudine e la longitudine di ciascuno MULTIPOLYGON
e memorizzare i risultati in due colonne all’interno del file GeoDataFrame
. Eseguiamo questo calcolo perché utilizzeremo successivamente questi valori di latitudine e longitudine per visualizzare i nodi sul grafico in base alle loro reali posizioni geografiche.
Ora è il momento di procedere la costruzione del grafico che rappresenterà i confini tra i diversi paesi del mondo. In questo grafico, IL i nodi rappresenteranno i paesiMentre i bordi indicheranno l’esistenza di un confine tra questi paesi. Se c’è un confine tra due nodi, il grafico avrà un bordo che li collega; in caso contrario, non ci sarà alcun vantaggio.
La funzione create_country_network
elabora le informazioni all’interno del GeoDataFrame
e costruisce a Graph
che rappresentano i confini nazionali.
Inizialmente, la funzione scorre ciascuna riga del file GeoDataFrame
dove ogni riga corrisponde a un paese diverso. Quindi, crea un nodo per il paese aggiungendo latitudine e longitudine come attributi al nodo.
Nel caso in cui la geometria non sia valida, la rettifica utilizzando il file buffer(0)
metodo. Questo metodo essenzialmente corregge le geometrie non valide applicando una piccola operazione buffer con una distanza pari a zero. Questa azione risolve problemi come autointersezioni o altre irregolarità geometriche nella rappresentazione multipoligono.
Dopo aver creato i nodi, il passo successivo è popolare la rete con i relativi bordi. Per fare ciò, iteriamo attraverso i diversi paesi e, se c’è un’intersezione tra i poligoni che rappresentano entrambi i paesi, ciò implica che condividono un confine comune e, di conseguenza, viene creato un bordo tra i loro nodi.
Il passo successivo prevede la visualizzazione della rete creata, dove i nodi rappresentano i paesi di tutto il mondo e i bordi indicano la presenza di confini tra di loro.
La funzione plot_country_network_on_map
è responsabile dell’elaborazione dei nodi e degli spigoli del grafico G
e visualizzandoli su una mappa.
Le posizioni dei nodi sul grafico sono determinate dalle coordinate di latitudine e longitudine dei paesi. Inoltre, una mappa è stata posizionata sullo sfondo per fornire un contesto più chiaro per la rete creata. Questa mappa è stata generata utilizzando il file boundary
attributo da GeoDataFrame
. Questo attributo fornisce informazioni sui confini geometrici dei paesi rappresentati, aiutando nella creazione della mappa di sfondo.
È importante notare un dettaglio: nel file GeoJSON utilizzato ci sono isole che sono considerate paesi indipendenti, anche se amministrativamente appartengono a un paese specifico. Questo è il motivo per cui potresti vedere numerosi punti nelle zone marittime. Tieni presente che il grafico creato si basa sulle informazioni disponibili nel file GeoJSON da cui è stato generato. Se dovessimo utilizzare un file diverso, il grafico risultante sarebbe diverso.
La rete di confini nazionali che abbiamo creato può aiutarci rapidamente ad affrontare molteplici domande. Di seguito, delineeremo tre approfondimenti che possono essere facilmente ricavati elaborando le informazioni fornite dalla rete. Tuttavia, ci sono molte altre domande a cui questa rete può aiutarci a rispondere.
Approfondimento 1: esaminare i confini di una nazione scelta
In questa sezione, valuteremo visivamente i vicini di un paese specifico.
IL plot_country_borders
la funzione consente la visualizzazione rapida dei confini di un paese specifico. Questa funzione genera un sottografo del paese fornito come input e dei paesi limitrofi. Si procede quindi a visualizzare questi paesi, facilitando l’osservazione dei 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.
Come puoi vedere nell’immagine generata, il Messico confina con tre paesi: Stati Uniti, Belize e Guatemala.
Approfondimento 2: I 10 Paesi con il maggior numero di confini
In questa sezione, analizzeremo quali paesi hanno il maggior numero di paesi confinanti e visualizzare i risultati sullo schermo. Per raggiungere questo obiettivo, abbiamo implementato il calculate_top_border_countries
funzione. Questa funzione valuta il numero di vicini per ciascun nodo della rete e visualizza solo quelli con il numero più alto di vicini (i primi 10).
Dobbiamo ribadire che i risultati ottenuti dipendono dal file GeoJSON iniziale. In questo caso, il ghiacciaio Siachen è codificato come un paese separato, motivo per cui sembra condividere un confine con la Cina.
Approfondimento 3: Esplorare i percorsi più brevi da paese a paese
Concludiamo la nostra analisi con una valutazione del percorso. In questo caso, valuteremo il numero minimo di frontiere da attraversare quando si viaggia da un paese di origine a un paese di destinazione.
IL find_shortest_path_between_countries
la funzione calcola il percorso più breve tra un paese di origine e un paese di destinazione. È importante però notare che questa funzione fornisce solo uno dei possibili percorsi più brevi. Questa limitazione deriva dall’uso del file shortest_path
funzione da NetworkX
che trova intrinsecamente un unico percorso più breve a causa della natura dell’algoritmo utilizzato.
Per accedere a tutti i possibili percorsi tra due punti, inclusi più percorsi più brevi, sono disponibili alternative. Nel contesto del find_shortest_path_between_countries
funzione, si potrebbero esplorare opzioni come all_shortest_paths
O all_simple_paths
. Queste alternative sono in grado di restituire più percorsi minimi anziché uno solo, a seconda dei requisiti specifici dell’analisi.
Abbiamo utilizzato la funzione per trovare il percorso più breve tra Spagna e Polonia e l’analisi ha rivelato che il numero minimo di valichi di frontiera richiesti per viaggiare dalla Spagna alla Polonia è 3.
Python offre una vasta gamma di librerie che abbracciano vari domini della conoscenza, che possono essere perfettamente integrate in qualsiasi progetto di data science. In questo caso, abbiamo utilizzato librerie dedicate sia all’analisi dei dati geometrici che all’analisi dei grafici per creare un grafico che rappresenta i confini del mondo. Successivamente, abbiamo dimostrato casi d’uso di questo grafico per rispondere rapidamente alle domande, consentendoci di condurre analisi geografiche senza sforzo.
Grazie per aver letto.
Amanda Iglesias
Fonte: towardsdatascience.com