Esplorazione dei dati sulla posizione utilizzando una griglia esagonale |  di Sara Tähtinen |  Marzo 2024

 | Intelligenza-Artificiale

Ogni giorno e ogni minuto, Uber riceve molteplici richieste nel proprio mercato. Ogni evento avviene in una località specifica, ad esempio un ciclista chiede un passaggio in una località e un conducente accetta il viaggio in una località vicina. Per ricavare informazioni e approfondimenti dai dati, ad esempio impostando prezzi dinamici basati sulla domanda, è necessario analizzare i dati di un'intera città. Ma poiché le città sono geograficamente molto diverse, questa analisi deve avvenire con granularità fine. Con il sistema a griglia esagonale H3, ciascun punto dati può essere raggruppato in un'area o cella esagonale, quindi un Uber può calcolare l'offerta e la domanda per l'aumento dei prezzi su ciascun esagono in tutte le città in cui offrono servizi. Gli esagoni sono disponibili in diverse dimensioni, quindi è necessario scegliere la risoluzione che meglio si adatta allo scopo dell'analisi.

Le figure mostrano come la griglia esagonale ricopra l'intera Terra e le aree urbane con piastrellature ripetitive. L'utente può suddividere le aree in esagoni sempre più piccoli e l'area di ciascun esagono a risoluzione più fine è circa un settimo dell'esagono più grossolano. Tieni presente che per coprire l'intera Terra con la piastrellatura esagonale, sono necessari anche alcuni pentagoni (forme con 5 lati) (ne parleremo più avanti in questo articolo). Se si guarda attentamente l'immagine, si possono vedere anche un paio di pentagoni nell'immagine, ad esempio sopra la Svezia e la Norvegia. Immagine da https://github.com/seanhandley/h3_ruby.

Tecnicamente si potrebbe costruire un sistema di griglia globale utilizzando qualsiasi tipo di elemento costitutivo che faciliti una piastrellatura completa in tutto il globo 3D. Ad esempio si potrebbero usare triangoli (3 lati) o quadrati (4 lati) invece di esagoni (6 lati) per coprire l'intera Terra. Tuttavia, l’uso degli esagoni presenta molti vantaggi. Ad esempio, il punto centrale di un triangolo ne ha tre e un quadrato ha due distanze diverse dai centri dei suoi vicini mentre il punto centrale di un esagono ha la stessa distanza da tutti i suoi vicini, il che lo rende un sistema conveniente per approssimare i raggi (vedi immagine sotto).

La distanza del centro punta ai loro vicini. Di questi, gli esagoni sono i migliori per approssimare i raggi. Immagine dell'autore.

Tuttavia, il mondo non può essere diviso completamente in esagoni, quindi sono necessari anche pochi pentagoni (cinque lati) (12 per l'esattezza, per ciascuna risoluzione). I pentagoni introducono discontinuità nella rete ma spesso sono posizionati lontano dalla terra e questo causa problemi soprattutto per l'analisi dei dati marini. Nonostante la presenza di alcuni pentagoni, la griglia esagonale offre il vantaggio di fornire elementi costitutivi di dimensioni relativamente uniformi sulla superficie sferica 3D. Nel caso in cui si voglia saperne di più sulla geometria di una griglia esagonale, ecco una buona fonte per questo. Si noti che la definizione delle regioni esagonali è altamente arbitraria e non seguono alcuna caratteristica naturale come laghi, fiumi, montagne o confini nazionali.

La lunghezza del bordo di un esagono (L) può essere utilizzata per stimare il raggio del blocco costitutivo. Un esagono contiene sei triangoli equilateri (tutti i lati del triangolo hanno la stessa lunghezza) e la distanza massima di due punti all'interno di un esagono è due volte la lunghezza del bordo dell'esagono. H3 supporta sedici diverse risoluzioni esagonali. Ogni esagono a risoluzione più fine è circa un settimo dell'esagono a risoluzione più grossolana. Si noti che gli esagoni non possono essere suddivisi perfettamente in sette esagoni più piccoli, quindi le celle più fini contengono solo approssimativamente la loro cella madre. Poiché le aree non si sovrappongono perfettamente, il conteggio degli eventi nella cella madre potrebbe non essere uguale al conteggio degli eventi nelle celle figlie. Immagini per autore.

La libreria H3 è open source, disponibile su GitHub e scritta in C. Ha collegamenti disponibili su più linguaggi, ad esempio su Python, C, Java e Javascript. H3 è dotato di un sistema di indicizzazione gerarchico che lo rende molto efficiente. È possibile esaminare ulteriormente gli esagoni utilizzando un online Visualizzatore dati esagonale H3. La tabella seguente riassume le proprietà delle 16 diverse risoluzioni fornite da H3.

Tabella: area esagonale media e lunghezza media del bordo da https://h3geo.org/docs/core-library/restable/. L'autore ha utilizzato Chat-GPT per ottenere esempi di aree di diverse dimensioni.

Successivamente, introdurremo alcune delle funzionalità più importanti della libreria H3.

In questo articolo utilizzeremo il sistema esagonale H3 per raggruppare i dati sulla posizione in esagoni. È possibile trovare la documentazione della libreria H3 Qui. Esistono due versioni principali di questa libreria, le versioni 3 e 4, e nei nostri quaderni utilizzeremo la versione 3.7.6. Tieni presente che esistono differenze significative nei nomi delle funzioni tra la versione 3.x e 4.x, come elencato in Qui.

Il pacchetto H3 Python è facile da installare, ad esempio con pip:

pip install h3

Se vuoi specificare quale versione vuoi utilizzare, aggiungi lì il numero di versione, ad esempio h3==3.7.6. Quindi importa H3 sul tuo notebook Python con

import h3

Successivamente, introdurremo alcune delle funzioni più importanti della libreria H3.

Indice esagonale

H3 utilizza un sistema di indicizzazione gerarchico, che trasforma le coppie di latitudine e longitudine in un indice H3 a 64 bit che identifica ciascuna cella della griglia. Date le coordinate (latitudine e longitudine) e con la risoluzione selezionata, otteniamo l'indice esagonale:

# Version 3.X:
hexagon_index = h3.geo_to_h3(lat, lng, resolution)

# Version 4.X:
hexagon_index = h3.latlng_to_cell(lat, lng, resolution)

Per esempio

h3.geo_to_h3(60.169833, 24.938163, 6)

restituisce l'indice '861126d37ffffff'. Se vuoi, puoi usare an visualizzatore di dati esagonali H3 online per verificare dove si trova questo esagono.

Pertanto, quando conosciamo le coordinate precise di un punto dati, possiamo determinarne l'indice esagonale a varie risoluzioni e associarlo ad esagoni di diverse dimensioni.

Confini dell'esagono

Per utilizzare gli esagoni nei nostri grafici, dobbiamo determinare i confini dell'esagono dall'indice esagonale. Tieni presente che le coordinate in alcuni sistemi sono presentate come (lng, lat), mentre in altri seguono il formato (lat, lng). L'opzione geo_json=True/False ti consente di scambiare queste coordinate.

# Version 3.X:
boundary = h3.h3_to_geo_boundary(hexagon_index, geo_json = False)

# Version 4.X:
boundary = h3.cell_to_boundary(hexagon_index, geo_json = False)

Per esempio

h3.h3_to_geo_boundary('861126d37ffffff', geo_json = False)

# Returns:
((60.15652369744344, 24.856525761155346),
(60.13498207546084, 24.895664284494664),
(60.14431977678549, 24.948769321085937),
(60.175221029708474, 24.962796993345798),
(60.19677983831024, 24.92362795620145),
(60.187420192445906, 24.870461733016352))

Queste sei coppie di coordinate corrispondono ai punti iniziale e finale dei bordi dell'esagono.

Esagoni vicini

A volte dobbiamo identificare i vicini di un esagono specifico, o “kring” attorno all'esagono. Con k=0 la funzione restituisce l'indice di origine, con k=1 restituisce l'indice di origine e tutti gli indici vicini, e con k=2 restituisce l'indice di origine, i suoi indici vicini e prossimi e così via .

# Version 3.X:
kring = h3.k_ring(hexagon_index, k)

# Version 4.X:
kring = h3.grid_disk(hexagon_index, k)

Inoltre esiste una funzione che può essere utilizzata per calcolare la distanza della griglia tra due celle:

# Version 3.X:
kring = h3.h3_distance(hexagon_index_a, hexagon_index_a)

# Version 4.X:
kring = h3.grid_distance(hexagon_index_a, hexagon_index_a)

Possiamo utilizzare queste funzioni nel modo seguente:

# Nearest neighbours of the hexagon:
h3.k_ring('861126d37ffffff', 1)

# Returns:
{'86089969fffffff',
'86089ba4fffffff',
'86089ba6fffffff',
'861126d07ffffff',
'861126d17ffffff',
'861126d27ffffff',
'861126d37ffffff'}

# Distance between two hexagons:
h3.h3_distance('861126d37ffffff', '86089ba4fffffff')

# Returns
1

Tracciare gli esagoni

Esistono diversi modi per tracciare gli esagoni su una mappa, ma alcuni di essi sono piuttosto rigidi, richiedono molto tempo e non sono ben documentati. Per semplicità, utilizziamo principalmente matplotlib per le visualizzazioni, ma sperimentiamo e acquisiamo anche screenshot delle visualizzazioni con mappe folium. Maggiori dettagli su questi metodi di tracciamento possono essere trovati nel repository GitHub.

Esempi di due diverse opzioni di tracciamento: a sinistra utilizziamo matplotlib per tracciare e a destra utilizziamo mappe folium.

A sinistra nella figura sopra usiamo matplotlib per tracciare gli esagoni. Utilizziamo la libreria GADM per recuperare il multipoligono che rappresenta la regione di Helsinki e tracciarlo con il colore verde. Usiamo il blu sullo sfondo per rappresentare gli specchi d'acqua. Inoltre, includiamo un indicatore che indica il centro di Helsinki sulla mappa. Gli esagoni possono essere facilmente renderizzati utilizzando la funzione plot_polygon dalla libreria Shapely e i punti dati possono essere aggiunti al grafico utilizzando il grafico a dispersione. Ciò rende la trama molto semplice e veloce.

Abbiamo anche sperimentato altri metodi di plottaggio, come l'utilizzo delle mappe folium che ci consentono di creare una mappa HTML interattiva che ci consente di ingrandire e rimpicciolire la mappa. A destra nella figura sopra mostriamo uno screenshot di tale mappa. Anche se il risultato è esteticamente gradevole, aggiungere nuove funzionalità (come barre di colore o mappe di calore) alla mappa richiede molto tempo, quindi non è lo strumento migliore per l'analisi esplorativa dei dati. Il taccuino per tracciare le mappe interattive del foglio può essere trovato qui.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *