
In genere, quando vogliamo visualizzare una variabile in un territorio utilizzando mappe coropletiche, utilizziamo geometrie amministrative comunemente note. Ad esempio, se volessimo vedere i tassi di disoccupazione in tutta Europa, potremmo visualizzarli in base ai rispettivi stati all’interno di ciascun paese.
Tuttavia, le regioni amministrative sono spesso irregolari e di dimensioni diverse le une dalle altre. Per questa ragione, un’alternativa utile per visualizzare qualsiasi variabile in un territorio è utilizzare esagoni per dividerlo. I vantaggi includono la geometria bilanciata per migliori confronti regionali e una migliore copertura territoriale. Inoltre, le mappe esagonali offrono il vantaggio di ridurre al minimo i pregiudizi visivi, poiché forniscono un’equa rappresentazione delle aree, a differenza dei tradizionali confini amministrativi, che a volte possono distorcere la percezione dei dati a causa delle loro forme e dimensioni irregolari.
In questo articolo, forniremo una spiegazione passo passo su come creare mappe esagonali in Python. Per raggiungere questo obiettivo, utilizzeremo due librerie che semplificano il processo di creazione della mappa: H3 e Plotly.
Il set di dati utilizzato in questo articolo è disponibile sul portale open data della città di Barcellona. Questo portale di dati aperti ospita dati demografici, economici e sociologici sulla città di Barcellona, tutti liberamente accessibili. Il set di dati che stiamo utilizzando contiene informazioni su tutti gli hotel di Barcellona, inclusa la loro ubicazione. È possibile scaricare il file dal seguente collegamento.
Il numero di hotel sarà la variabile che visualizzeremo sulla mappa esagonale. Le seguenti sezioni dell’articolo spiegheranno passo dopo passo come creare questa visualizzazione.
Il primo passo della nostra analisi, dopo aver scaricato il file, è procedere con la lettura e la pulizia dei dati. In questo caso, il set di dati contiene molte colonne che non sono rilevanti per la nostra analisi e non le esamineremo. Selezioneremo specificatamente il nome dell’hotel, la sua posizione geografica (latitudine e longitudine) ed eventualmente un attributo relativo alla sua posizione (anche se non li utilizzeremo in questo caso particolare). Una volta selezionate queste colonne, le rinomineremo con nomi più semplici e quindi il nostro set di dati sarà pronto per la visualizzazione.
Per visualizzare i dati utilizzando una mappa esagonale, il nostro primo passo è creare la griglia. Per raggiungere questo obiettivo, utilizzeremo il Biblioteca H3sviluppato da Uber. IL get_hexagon_grid
la funzione è responsabile della creazione della griglia esagonale sotto forma di a GeoDataFrame
. Si inizia creando un esagono in una posizione specifica (latitude
E longitude
), in questo caso, il centro di Barcellona. La dimensione di questo esagono è definita da resolution
parametro. Successivamente, vengono generati ulteriori esagoni della stessa dimensione concentricamente attorno all’esagono centrale. Il numero di anelli concentrici da creare è determinato da ring_size
parametro. Infine, questa raccolta di esagoni viene convertita in a GeoDataFrame
dove a ogni esagono viene assegnato un ID univoco corrispondente all’ID fornito dalla libreria H3.
Anche se in questo articolo non approfondiremo le specifiche di ciascuna funzione utilizzata per costruire la griglia esagonale, i lettori interessati possono fare riferimento alla documentazione della libreria per una comprensione dettagliata di come l’abbiamo applicata.
Il grafico seguente illustra come funzionano i parametri resolution
E ring_size
influenzare la griglia creata. Resolution
controlla la dimensione degli esagoni, il che significa che risoluzioni più elevate producono esagoni più piccoli. D’altra parte, il ring_size
Il parametro governa il numero di anelli concentrici di esagoni creati attorno all’esagono centrale. In altre parole, un più grande ring_size
porta ad un maggior numero di anelli concentrici. Nel grafico seguente, tutti i grafici hanno gli stessi limiti dell’asse. Come potete osservare, per coprire la stessa area, utilizzare una risoluzione maggiore richiede più anelli perché, come accennato in precedenza, tutti gli esagoni creati hanno la stessa dimensione dell’esagono centrale.
Il prescelto resolution
dipenderà dalle variazioni della variabile che vogliamo rappresentare in un’area specifica. Se c’è una variazione significativa, un valore più alto resolution
sarà considerato. In questo caso particolare, una risoluzione di 9
è stato selezionato. Inoltre, il ring_size
dipenderà dalla regione che intendiamo coprire e dal resolution
precedentemente scelto. In questo caso specifico, a ring_size
Di 45
è sufficiente a coprire l’intera area della città di Barcellona. Non entreremo nei dettagli di come siamo arrivati a questa conclusione. In termini generali, abbiamo ottenuto il riquadro di delimitazione del poligono della città di Barcellona e determinato il numero di anelli necessari per coprire quell’area.
Di seguito troverai la creazione della rete esagonale sotto forma di a GeoDataFrame
utilizzando i parametri precedentemente descritti e il get_hexagon_grid
funzione.
Come puoi vedere sopra, il get_hexagon_grid
la funzione fornisce a GeoDataFrame
con due colonne: la prima colonna serve come ID univoco assegnato a ciascun poligono dalla libreria H3, mentre la seconda colonna contiene il poligono vero e proprio ed è denominata geometry
.
Dopo aver creato la griglia esagonale è necessario assegnare ciascun albergo all’esagono di appartenenza. IL calculate_hexagon_ids
La funzione calcola l’esagono a cui appartiene ogni hotel e crea una nuova colonna chiamata Hexagon_ID
per memorizzare queste informazioni.
Ora, il dataset di tutti gli hotel comprende anche informazioni sull’esagono in cui è situato ciascun hotel. Questa informazione si trova nel Hexagon_ID
colonna come identificatore alfanumerico.
Una volta assegnato l’ID dell’esagono, procediamo al calcolo dei dati che desideriamo visualizzare. In questo caso particolare, miriamo a visualizzare il numero di hotel in ciascun esagono. Per raggiungere questo obiettivo, eseguiamo un raggruppamento per Hexagon_ID
e un count
operazione. Inoltre, vogliamo implementare una funzionalità al passaggio del mouse che ci permetta di visualizzare i nomi degli hotel situati in ciascun esagono. Per raggiungere questo obiettivo, eseguiamo un’operazione di unione per tutti i nomi di hotel nel raggruppamento. Usiamo l’HTML <br>
tag per indicare un’interruzione di riga nel join, poiché Plotly utilizza HTML per definire i suoi testi al passaggio del mouse.
Come visto sopra, il dataframe raggruppato ha tre colonne: (1) Hexagon_ID
che contiene l’identificatore esagonale univoco, (2) Count
che contiene il numero di hotel in quell’esagono, e (3) Hotels
che contiene un elenco dei nomi degli hotel all’interno dell’esagono.
Una volta raggruppati i dati, possiamo procedere allo step finale, ovvero la creazione della mappa esagonale utilizzando Plotly.
IL create_choropleth_map
la funzione è responsabile dell’elaborazione del set di dati raggruppati e del set di dati contenente le geometrie di ciascun esagono per generare la mappa esagonale. Questa mappa ci permette di visualizzare quali zone della città hanno una maggiore concentrazione di hotel.
Per creare la mappa, utilizzeremo il file choropleth_mapbox
funzione disponibile in Plotly Express. Questa funzione genera una mappa con la geometria definita (in questo caso, l’insieme di esagoni creati) e la colora in base al numero di hotel rilevati in ciascun esagono, utilizzando la scala di colori continua selezionata dall’utente. Quando passi il mouse su uno degli esagoni, puoi visualizzare l’elenco degli hotel situati all’interno di quell’esagono.
In questo caso, la mappa di sfondo utilizzata è carto-positron
ma questo parametro può essere facilmente regolato per utilizzare uno stile di mappa diverso che fornisca una migliore identificazione delle strade cittadine e dei punti di interesse, come ad esempio open-street-map
. Inoltre, possiamo anche utilizzare una scala di colori diversa. Nel caso precedente abbiamo utilizzato il file Viridis
scala di colori, mentre in questo caso stiamo utilizzando la scala di colori Reds
scala di colori.
La mappa è interattiva e ci permette di ingrandire l’area di interesse.
Come risulta evidente ingrandendo l’area dai toni rossastri, la maggior parte degli hotel di Barcellona si trovano intorno a Plaça de Catalunya.
Le mappe coropletiche con regioni amministrative sono un mezzo prezioso per visualizzare la distribuzione di una variabile all’interno di un’area geografica. Presentano però lo svantaggio di fornire una visualizzazione distorta della distribuzione della variabile a causa della forma irregolare e delle dimensioni variabili delle regioni amministrative. Per questa ragione, l’uso di mappe esagonali con forme geometriche regolari costituisce un’alternativa molto utile per analizzare le distribuzioni su un territorio. In questo articolo, abbiamo fornito una spiegazione dettagliata di come creare una griglia esagonale utilizzando la libreria Uber H3 e di come questa griglia è stata utilizzata in una visualizzazione Plotly per rappresentare la distribuzione degli hotel a Barcellona.
Fonte: towardsdatascience.com