La guida avanzata per sbloccare insight geospaziali in Snowflake

Negli ultimi tre blog abbiamo parlato delle basi: che cos’è un dato geospaziale, come funziona nel mondo dei dati e come funziona specificamente in Snowflake grazie al supporto nativo per GEOGRAPHY, GEOMETRY e H3. Questi articoli sono ottimi per immergere il piede, sentire l'acqua e magari anche nuotare nella parte bassa della piscina. Ma puoi fare molto di più con i dati geospaziali nel tuo account Snowflake! Tuttavia, sappiamo che può essere difficile passare da “Ora capisco i concetti” a “Come posso affrontare i miei primi casi d’uso”?
Il mondo dell’elaborazione dei dati geospaziali è vasto e complesso e siamo qui per spiegarlo in modo semplice. Ecco perché abbiamo creato un quickstart Snowflake che ti guiderà attraverso vari esempi di funzionalità geospaziali all’interno di contesti reali. Anche se questi esempi utilizzano dati rappresentativi provenienti dal Marketplace Snowflake o da dati che ti abbiamo messo gratuitamente a disposizione su Amazon S3, possono essere applicati al tuo account Snowflake, ai tuoi dati e casi d’uso per fornire preziosi insight alla tua community di utenti. Questo articolo spiega come farlo, ma fai riferimento al quickstart vero e proprio se vuoi vedere il codice effettivo.
Trasformazione dei dati sulla posizione in tipi di dati geospaziali
Ma iniziamo con un breve riassunto: i dati sulla posizione sono ovunque. Proprio come il tuo account Snowflake ha quasi certamente dati basati sul tempo, quasi certamente anche il tuo account Snowflake ha dati basati sulla posizione, poiché la maggior parte dei dati transazionali contiene alcuni elementi su chi, cosa, quando e dove.
Nella sua forma più semplice, i dati sulla posizione sono generalmente noti come una varietà di campi di testo e numerici che comprendono ciò che chiamiamo "indirizzi" e includono strade, città, stati, contee, CAP e Paesi. Le persone sono in grado di leggere e comprendere queste stringhe abbastanza facilmente, ma nella loro forma di testo, sono in gran parte valori informativi che cerchiamo quando abbiamo bisogno di conoscerli e niente di più. A volte, questi campi di testo possono anche essere accompagnati da campi di latitudine e longitudine. Questi campi sono ottimi perché ora possiamo fare di più con i dati sulla posizione, possiamo posizionarli sulla Terra come punto. Questo è utile perché possiamo integrare tutti questi punti nella capacità di mappatura di uno strumento di BI per mostrare a quale Paese o territorio appartiene il punto, oppure possiamo integrare questi punti in una griglia spaziale come H3. Mentre vari partner BI Snowflake supportano il lavoro con i dati di latitudine e longitudine, Snowflake ha il supporto integrato per trasformare i dati di longitudine e latitudine in una griglia spaziale H3 per calcoli e visualizzazioni veloci (come vedremo più avanti).
Ma possiamo spingerci oltre e trasformare quei dati di latitudine e longitudine in un tipo di dati GEOGRAPHY o GEOMETRY. Possiamo utilizzare i dati geografici quando abbiamo bisogno di una rappresentazione ellissoidale “globale” della Terra, e i dati geometrici quando abbiamo bisogno di una rappresentazione planare su “mappa” di una posizione più localizzata. Possiamo costruire questi tipi di dati con una varietà di funzioni.
Potrebbe non sembrare molto, ma con questi due tipi di dati possiamo iniziare a costruire una serie di punti in una linea, collegare più linee in un poligono e rappresentare posizioni complesse come una serie di linee e poligoni. Possiamo eseguire calcoli complessi e associazioni di relazioni tra oggetti di questo tipo e iniziare a sbloccare insight che non sapevamo fossero a nostra disposizione con un semplice campo “indirizzo”. Potresti chiedere: “Ma se ho solo il campo dell’indirizzo testuale?” Benvenuti viaggiatori e viaggiatrici, alla nostra prima avventura: il geocoding. “Geo-cosa??”
Geocoding e reverse geocoding
Il geocoding, geocodifica in italiano, è l’atto di prendere i dati dell’indirizzo testuale e trasformarli in un tipo geospaziale per sbloccare altri casi d’uso che altrimenti non avresti potuto fornire. E, naturalmente, è anche possibile andare nella direzione opposta, ovvero trasformare il tipo di dati geospaziali meno leggibile in un set di campi di posizione più leggibili. Entrambe queste trasformazioni possono essere eseguite con partner Snowflake specializzati come Mapbox e TravelTime, che sono entrambi Snowflake Native App disponibili tramite il Marketplace Snowflake. Consigliamo questi provider per il geocoding e il reverse geocoding più accurati. A volte, però, è necessario bilanciare l’accuratezza con il costo o dimostrare il ROI prima di poter spendere denaro, quindi parliamo di come puoi iniziare a utilizzare il geocoding e il reverse geocoding direttamente in Snowflake.
In questo caso d’uso, utilizzeremo due data set del Marketplace Snowflake: Worldwide Address Data, una raccolta di dati di indirizzi globale gratuita e aperta, e un data set tutorial del nostro partner CARTO, che ha una tabella ristorante con una singola colonna street_address. Se dovessi seguire questo esempio per i dati, sostituiresti la tabella ristorante tutorial con la tua tabella. Eseguirai una preparazione dei dati su queste due tabelle, che puoi vedere nel quickstart.
La geocodifica Snowflake fai da te prevede tre fasi:
1. Utilizzare un LLM per trasformare una stringa di indirizzi completa in una matrice JSON con le relative parti come attributi. In questo passaggio utilizzerai la funzione SNOWFLAKE.CORTEX.COMPLETE, che utilizza un modello Mixtral-8x7B ospitato in Snowflake per eseguire la conversione utilizzando una serie dettagliata di istruzioni fornite come parte della chiamata funzionale. Consulta le note nel quickstart per la scelta delle dimensioni appropriate del warehouse su scala.
2. Creare una semplice colonna geospaziale sulla latitudine e la longitudine in Worldwide Address Data.
- ST_POINT viene utilizzato per creare la colonna geospaziale a partire dalla latitudine e dalla longitudine.
- I dati non necessari vengono rimossi dalla tabella Worldwide Address Data in base ai valori di latitudine e longitudine non validi.
3. Utilizzare JAROWINKLER_SIMILARITY per abbinare gli indirizzi. Unirai le due tabelle su alcune colonne, con la colonna del nome della strada in una funzione JAROWINKLER_SIMILARITY, perché non è raro che i nomi delle strade abbiano sottili differenze di stringa tra le fonti, ecco perché la soglia di somiglianza nella chiamata di funzione è 95 e non 100.
È importante notare che questo metodo non è impeccabile in termini di precisione. Il quickstart mostra più nel dettaglio il livello di precisione raggiunto e alcuni dei motivi per cui questo metodo è imperfetto, ma è importante notare la differenza di costo tra questo metodo e un servizio di geocodifica dedicato. Questo metodo è un ottimo modo per ottenere requisiti più semplici o prototipare la giustificazione per servizi di geocodifica più dedicati con requisiti più complessi.
Per eseguire la geocodifica inversa o produrre un indirizzo da un tipo di dati geospaziali, costruiremo una stored procedure che fa tre cose: crea una tabella dei risultati, seleziona le righe che non sono state elaborate e trova la corrispondenza dell’indirizzo più vicina utilizzando un ciclo con una ricerca a raggio crescente fino a trovare un risultato. Puoi chiamare questa procedura come tutte le procedure in Snowflake, passando gli argomenti appropriati come definito nella parte superiore del codice della procedura, che puoi vedere nel quickstart.
La geocodifica dei dati del tuo indirizzo sblocca un maggior potenziale per utilizzarli in modi più approfonditi. Vediamo in che modo è possibile utilizzare i dati geocodificati.
Previsioni con dati geospaziali
La previsione è un’attività comune con i dati delle serie temporali, poiché esistono modelli ML validi progettati per inserire dati storici e prevedere una finestra di dati futuri in base ai trend storici. Snowflake include un modello di previsione ML integrato chiamato SNOWFLAKE.ML.FORECAST che puoi utilizzare facilmente per questa attività. Anche se è possibile eseguire previsioni di serie temporali su qualsiasi dato temporale, arricchendo tali previsioni con dati sulla posizione si ottiene un’altra dimensione del valore nel processo di previsione.
Nel quickstart vengono utilizzati due data set: Dati sulle corse in taxi a New York City forniti da CARTO e dati sugli eventi forniti da PredictHQ. Possiamo immaginare i due data set in questo modo: I dati della corsa in taxi sono come tutti i dati basati su serie temporali su qualcosa che accade in un certo momento e luogo. Probabilmente avete questo tipo di dati nella tua organizzazione. I dati dell’evento aggiungono più contesto a un elemento temporale nei tuoi dati. In questo esempio, i dati dell’evento potrebbero indicare un aumento o una diminuzione delle corse in taxi previste a New York. Altri tipi di dati contestuali includono periodi aperti o chiusi, periodi promozionali ricorrenti, eventi pubblici e altro ancora. Qualunque siano, i dati contestuali possono contribuire a fornire maggiore precisione a una previsione migliorando ogni giorno/ora con aspettative crescenti o decrescenti.
L’attività previsionale prevede quattro fasi:
1. Utilizza una griglia spaziale per calcolare una serie temporale di ritiri dei taxi per ogni cella della griglia.
Userai la griglia spaziale H3 per dividere New York in celle in base alla posizione di inizio corsa.
È possibile individuare con precisione una corsa in taxi all’interno di una cella prendendo latitudine e longitudine e convertendolo in una cella H3.
È quindi possibile aggregare il numero di corse all’interno di ogni cella di New York City per ore del giorno utilizzando le funzioni TIME_SLICE e H3_POINT_TO_CELL_STRING di Snowflake.
Infine, dovrai “riempire” gli eventuali spazi orari in una località con zero record di ritiro. Questo è necessario per le previsioni delle serie temporali.
2. Arricchisci i dati delle serie temporali orarie con i dati degli eventi.
Questo aggiunge colonne di “funzionalità” ai dati di cui sopra contrassegnando ogni riga come vacanza scolastica, festa pubblica o evento sportivo in base all’unione dei nostri dati dell’evento.
Tieni presente che puoi aggiungere tutte le “funzionalità” che hanno senso per i dati dell’evento. Vacanze scolastiche, festività ed eventi sportivi sono solo esempi realistici di questo scenario.
3. Crea un modello, un data set di addestramento e un data set di previsione.
Il modello SNOWFLAKE.ML.FORECAST richiede una fase di addestramento prima di formulare previsioni, quindi i dati della fase 2 precedente devono essere suddivisi in due tabelle per volta: una per l’addestramento e una per la previsione.
Da qui creerai un modello, uno degli input sarà la tabella dei dati di addestramento che hai stabilito sopra. Dovrai anche identificare le colonne chiave, come la colonna tempo, la metrica da prevedere e, in questo caso, i dati sulla posizione che desideri usare.
4. Esegui il modello e visualizza l’accuratezza delle previsioni.
Una volta addestrato, il modello può essere richiamato, indicando un altro data set da utilizzare per la previsione.
La previsione può essere trasmessa a una tabella e poi confrontata con la realtà per valutare l’accuratezza. Ci sono diversi modi per farlo, ma il quickstart suggerisce di utilizzare un errore percentuale assoluto medio simmetrico (SMAPE).
Il grafico riportato di seguito mostra il risultato di questo confronto per una cella H3, con un tasso di precisione piuttosto elevato per il modello previsionale:

La previsione delle serie temporali in Snowflake può essere uno strumento potente e può essere ulteriormente migliorata grazie alla possibilità di raggruppare le posizioni in una determinata cella in una griglia spaziale e prevederla, invece di cercare di prevedere ogni posizione singolarmente, il che è troppo granulare.
Utilizzare H3 per visualizzare il sentiment in base alla posizione
Nell’esempio di geocodifica precedente hai utilizzato un LLM per trasformare i dati in un formato diverso, ma puoi anche utilizzarlo per valutare i dati testuali in base alla positività o negatività del linguaggio utilizzato nel testo. Questo è prezioso per valutare il sentiment delle persone in una determinata situazione, sia che si tratti di feedback che forniscono su prodotti o servizi o di quanto favorevolmente vedono il tuo marchio. La chiave qui è trasformare il testo grezzo in una misurazione ordinaria e quindi analizzare se fattori di posizione in tale misurazione. Vediamo come farlo in Snowflake.
Dal punto di vista dei dati, sono necessarie tre cose:
Un evento o una transazione di qualche tipo
Commento di testo grezzo su quell’evento
La posizione dell’evento
Tutto questo può avvenire in un unico sistema (ad esempio, i clienti effettuano un ordine in un’app e poi forniscono commenti sul loro livello di soddisfazione del processo di ordinazione), oppure in sistemi diversi (ad esempio, un cliente effettua un ordine per un prodotto ma poi pubblica sui social media la quantità di gradimento del prodotto ricevuto). Il quickstart utilizza dati di consegna sintetici, che includono il feedback dei clienti su come è andata la consegna.
La visualizzazione di questo feedback per posizione comporta due passaggi:
1. Ottenere il sentiment del feedback per ogni consegna.
Per prima cosa utilizzerai SNOWFLAKE.CORTEXT.COMPLETE come prima, ma questa volta l’istruzione che darai al LLM è valutare il testo e assegnargli un’etichetta di categoria testuale, come “Molto positivo”.
Quindi convertirai queste etichette di categoria testuali in numeri che potrai aggregare in un numero di consegne in un’area comune.
2. Visualizza il sentiment aggregato per posizione utilizzando H3.
Invece di precalcolare i punteggi sulla posizione come abbiamo fatto nelle previsioni delle serie temporali, costruiremo un’app che aggregherà i punteggi del sentiment in celle H3 al volo.
L’app Streamlit utilizzerà ST.PYDECK_CHART per tracciare e colorare le celle H3 in base ai quantili del sentiment.
Ecco un esempio di visualizzazione dell’analisi del sentiment in base alla posizione del negozio:

Ma soprattutto, l’app consente di esplorare i dati più liberamente perché calcoliamo tutto al volo. Come funziona? Consideriamo lo zoom in basso:

E se volessimo avere una visione più granulare della penisola di San Francisco? Utilizzando il cursore nell’app per modificare la risoluzione H3 da 7 a 8 si ottiene un’immagine più chiara:

Ora possiamo vedere più chiaramente dove ci sono lacune, punti forti e punti deboli. Questa capacità immediata di ottenere una maggiore risoluzione della posizione è come passare da una TV a definizione standard a una TV HD a una TV 4K a una TV 8K: un’immagine più nitida di ciò che stiamo cercando di guardare.
H3 è un modo potente e veloce per ottenere chiarezza sulla posizione delle metriche. Combinandolo con un LLM, possiamo trasformare il testo non additivo in un output misurabile. Questa è una capacità estremamente potente e puoi applicarla in molti modi diversi all’interno della tua organizzazione!
Analisi del vicino più prossimo con raster e shapefile
Se da un lato molte aziende ricavano i dati sulla posizione da fonti di dati standard da cui provengono anche gli altri dati, dall’altro chi lavora approfonditamente con i dati geospaziali sa che i dati possono provenire anche da formati e file specializzati. Per i non addetti ai lavori, in sintesi la maggior parte dei dati geospaziali trattati in questo e altri blog sono dati vettoriali: punti, linee e poligoni. Un formato comune utilizzato per archiviare dati vettoriali in un file è uno shapefile, ma gli shapefile generalmente vengono aperti con applicazioni GIS dedicate, non lette dai database. I dati raster differiscono dai dati vettoriali in quanto sono rappresentati come una griglia di celle (si pensi a un’immagine con pixel). I dati raster sono comunemente archiviati nei file GeoTIFF, che, anche in questo caso, non sono tipicamente letti dai database. Vector e raster hanno ciascuno i propri casi d’uso, e talvolta è necessario accedervi; il quickstart affronta questo problema.
In questo scenario, sfrutteremo due fonti di dati, una mappa di elevazione memorizzata come GeoTIFF raster e dati di temperatura/precipitazioni memorizzati in uno shapefile, per utilizzare entrambi i data set per prevedere la presenza di acque sotterranee. In realtà, questi sono solo file rappresentativi che mostrano come possiamo accedere a questi tipi di file in Snowflake e infine utilizzarli in un’analisi specifica. Se nella tua organizzazione sono presenti GeoTIFF o shapefile, puoi utilizzare questi metodi per caricare i dati in Snowflake.
La combinazione di queste due fonti di dati per eseguire un’analisi del vicino più prossimo comporta tre passaggi:
1. Caricare il file GeoTIFF.
Userai la libreria Python Rasterio per creare funzioni che estraggono i metadati GeoTIFF, valutare le bande presenti in GeoTIFF e infine leggere e convertire il centroide di ogni pixel in dati vettoriali (punti).
Quindi valutare i metadati e convertire i punti in un tipo di dati nell’SRID appropriato.
Infine, ridurrete il numero voluminoso di pixel in una dimensione più gestibile convertendo i punti in celle H3.
2. Caricare lo shapefile.
Userai la libreria Python di Fiona e la funzionalità di accesso dinamico ai file di Snowflake per creare funzioni che leggono i metadati e i dati dello shapefile.
Da qui valuterai la natura dei dati shapefile e come vengono rappresentati, in modo da poter progettare una query per caricarli in una tabella con le colonne e i tipi di dati appropriati.
Analogamente al passaggio 1, è possibile ridurre il numero di righe a una dimensione più gestibile convertendo i punti in celle H3.
Il quickstart mostra anche un modo alternativo per visualizzare questi dati, ma questo è un passaggio opzionale.
3. Calcolare il punto meteo più vicino per ogni punto di elevazione, utilizzando uno dei due metodi descritti dal quickstart.
Nota: ogni metodo prevede il filtraggio di entrambe le tabelle fino all’area di attenzione, come descritto nel quickstart.
Il primo metodo è autonomo in Snowflake e prevede l’uso di una query che combina ST_DWITHIN e una funzione finestra QUALIFY. Tuttavia, questo metodo può essere ad alta intensità di calcolo.
Il secondo metodo prevede l’utilizzo della Snowflake Native App SedonaSnow, che consente di accedere alla funzione ST_VORONOIPOLYGONS. I poligoni di Voronoi possono essere un modo più efficiente per raggruppare i punti più vicini a un altro punto, ma per accedere a tale funzione dovrai installare l’app SedonaSnow.
Nel mondo dei dati geospaziali non è raro dover accedere a dati provenienti da file non tradizionali. Fortunatamente, la flessibilità di Snowflake consente di lavorare con questi file e accedere comunque a questi dati preziosi per le analisi.
Mappe interattive
È inoltre comune nel mondo dei GIS interagire con interfacce utente progettate per i dati sulla posizione. Queste applicazioni vanno oltre ciò che è tipicamente possibile in uno strumento di BI per presentare più dati con sofisticate funzionalità di layer e altre interazioni specifiche per la posizione. Uno strumento open source si chiama Kepler.gl., ma invece di dover implementare direttamente Kepler.gl, è sufficiente installare Dekart dal Marketplace Snowflake e accedere immediatamente a Kepler.gl e alle sue funzionalità di visualizzazione della posizione più avanzate. L’esecuzione di Kepler.gl in una Snowflake Native App utilizzando Snowpark Container Services garantisce inoltre che i dati non escano mai da Snowflake. Vediamo un esempio tratto dal quickstart.
In questo caso d’uso, costruiremo una mappa interattiva per visualizzare la densità delle colonnine di ricarica per veicoli elettrici, che identificherà le aree in cui potrebbe essere utile aggiungere più stazioni. In questo esempio è necessario sovrapporre tre set di dati: confini dei Paesi, percorsi di trasporto e posizioni (in questo esempio colonnine di ricarica per veicoli elettrici), ma è possibile sostituire facilmente i percorsi di trasporto e le posizioni delle colonnine di ricarica con altri due set di dati sulla posizione nell’organizzazione. Dopo aver seguito la configurazione nel quickstart, esegui le tre operazioni seguenti.
Utilizza una query per definire un livello limite:

Utilizza una seconda query per acquisire i percorsi di trasporto come secondo livello:

Nota come “uk_roads” è stato aggiunto come layer sul lato sinistro dell’interfaccia utente di Kepler.gl.
Quindi utilizza una terza query per tracciare le colonnine di ricarica per veicoli elettrici come un altro livello:

Nota nella seconda e terza query come si fa riferimento alla query per il primo livello per nome nella clausola FROM come metodo per filtrare la seconda e la terza query selezionando solo le strade e le colonnine contenute entro il perimetro del primo livello.
Infine, è possibile aggiungere una quarta query che calcolerà la densità delle posizioni delle colonnine di ricarica per veicoli elettrici contando il numero di colonnine di ricarica entro un raggio di 50 chilometri per ogni segmento stradale:

Anche se in questo esempio non mostriamo tutto ciò che puoi fare con Kepler.gl, speriamo di riuscire a illustrare difficoltà che potresti incontrare in uno strumento di business intelligence tradizionale. Grazie all’accesso a un’interfaccia più sofisticata per la creazione di visualizzazioni delle posizioni, e facilmente installabile dal Marketplace Snowflake, puoi migliorare le tue funzionalità di analisi della posizione in modi più semplici di quanto tu possa immaginare.
Conclusione
In questo articolo abbiamo parlato dei vari modi in cui è possibile ottenere insight dai dati geospaziali in Snowflake. Abbiamo trattato sei funzionalità principali, che consentono di:
Trasformare i dati sulla posizione in dati GEOMETRY e GEOGRAPHY per consentire ulteriori analisi e aprire nuovi casi d’uso, come geocoding e reverse geocoding
Arricchire con data set temporali ed eventi
Applicare modelli di machine learning e funzioni SQL native di machine learning per le previsioni su dati geospaziali
Applicare LLM per analisi del sentiment in base alle posizioni
Calcolare anche le distanze ed eseguire l’analisi del vicino più prossimo con le funzioni native
Visualizzare mappe interattive estendendo le funzionalità native di Snowflake con Snowpark Container Services e il nostro vasto ecosistema di partner
Segui questo quickstart per sperimentare direttamente questi scenari. Ti aiuterà ad applicare questi casi d’uso più sofisticati e a ottenere più valore dai dati sulla posizione in Snowflake. E ora un augurio: che tu possa trovare i punti che stai cercando!