Le guide avancé pour obtenir des informations géospatiales dans Snowflake

Au cours des trois derniers articles centrés sur les données géospatiales, nous avons abordé les fondamentaux des données géospatiales, leur fonctionnement dans le monde des données et leur fonctionnement spécifique dans Snowflake grâce à notre prise en charge native de GEOGRAPHY, GEOMETRY et H3. Ces articles sont parfaits pour plonger vos orteils, sentir l'eau et peut-être même patauger dans l'extrémité peu profonde de la piscine. Mais vous pouvez faire tellement plus avec les données géospatiales de votre compte Snowflake ! Mais nous comprenons : il peut être difficile de passer de « Je comprends maintenant les concepts » à « Comment puis-je aborder mes premiers cas d’usage ? ».
Le monde du traitement des données géospatiales est vaste et complexe, et nous sommes là pour le simplifier pour vous. C’est pourquoi nous avons créé un guide Snowflake quickstart qui vous présente divers exemples de capacités géospatiales dans des contextes réels. Bien que ces exemples utilisent des données représentatives de la Marketplace Snowflake ou des données que nous avons mises gratuitement à votre disposition sur Amazon S3, ils peuvent être appliqués à votre compte Snowflake, vos données et vos cas d'usage afin de fournir des informations précieuses à votre communauté d'utilisateurs. Cet article de blog explique comment procéder, mais reportez-vous au quickstart lui-même si vous voulez voir le code même.
Transformer des données de localisation en types de données géospatiales
Mais commençons par un bref résumé : les données de localisation sont partout. Tout comme votre compte Snowflake contient presque certainement des données basées sur le temps, votre compte Snowflake contient presque certainement également des données basées sur la localisation, car la plupart des données transactionnelles contiennent des éléments sur qui, quoi, quand et où.
Dans leur forme la plus simple, les données de localisation sont généralement connues sous la forme d’une variété de champs textuels et numériques qui comprennent ce que nous appelons des « adresses » et incluent des éléments tels que les rues, les villes, les États, les comtés, les codes postaux et les pays. Les humains peuvent lire et comprendre ces chaînes assez facilement, mais dans leur forme textuelle, ce sont en grande partie des valeurs informatives que nous cherchons quand nous avons besoin de les connaître et rien de plus. Parfois, ces champs de texte peuvent aussi être accompagnés de champs de latitude et de longitude. Ces champs sont excellents parce que maintenant nous pouvons faire plus avec les données de localisation — nous pouvons les placer sur la Terre comme un point. Ceci est utile car nous pouvons intégrer tous ces points dans la capacité de mappage d’un outil de BI pour montrer à quel pays ou territoire le point appartient, ou nous pouvons intégrer ces points dans une grille spatiale telle que H3. Alors que divers partenaires BI Snowflake prennent en charge l’utilisation des données de latitude et de longitude, Snowflake a intégré une prise en charge pour transformer vos données de longitude et de latitude en une grille spatiale H3 pour un calcul et une visualisation rapides (comme nous le verrons plus loin).
Mais nous pouvons aller encore plus loin et transformer ces données de latitude et de longitude en un type de données GEOGRAPHY ou GEOMETRY. Nous pouvons utiliser le premier lorsque nous avons besoin d’une représentation ellipsoïdale de la Terre, et le second lorsque nous avons besoin d’une représentation plane d’un emplacement plus localisé. Et nous pouvons construire ces types de données avec une variété de fonctions.
Cela peut sembler peu de chose, mais avec ces deux types de données, nous pouvons commencer à construire une série de points dans une ligne, connecter plusieurs lignes dans un polygone et représenter des emplacements complexes comme une série de lignes et de polygones. Nous pouvons effectuer des calculs complexes et des associations de relations entre ces objets et commencer à exploiter des informations dont nous ne savions pas qu’elles étaient à notre disposition avec un simple champ « adresse ». Vous pouvez vous demander : « Mais si tout ce que j’ai c’est le champ d’adresse textuel ? ». Ah, bienvenue, honorable voyageur, à notre première aventure : le géocodage. « Geo-quoi ? »
Géocodage et géocodage inversé
Le géocodage est le fait de prendre vos données d’adresse textuelles et de les transformer en un type géospatial pour débloquer d’autres cas d’usage que vous n’auriez pas pu livrer autrement. Et bien sûr, il est également possible d’aller dans l’autre sens : transformer votre type de données géospatiales moins lisibles en un ensemble de champs de localisation plus lisibles par l’homme. Ces deux transformations peuvent être effectuées avec des partenaires Snowflake spécialisés tels que Mapbox et TravelTime, qui sont tous deux des Snowflake Native Apps disponibles via la Marketplace Snowflake. Nous recommandons ces fournisseurs pour le géocodage et le géocodage inversé les plus précis. Mais parfois, il faut trouver un équilibre entre précision et coût ou démontrer le retour sur investissement avant de pouvoir dépenser de l’argent. Parlons donc de la façon dont vous pouvez vous lancer dans le géocodage et la géocodage inversé directement dans Snowflake.
Dans ce cas d’usage, nous utiliserons deux jeux de données de la Marketplace Snowflake : Worldwide Address Data, une collecte de données d’adresses mondiales gratuite et ouverte, et un tutoriel de notre partenaire CARTO, qui dispose d’une table restaurant avec une seule colonne street_address. Si vous deviez suivre cet exemple pour vos données, vous remplaceriez la table restaurant du tutoriel par votre table. Vous allez préparer les données sur ces deux tables, que vous pouvez voir dans le quickstart.
Le géocodage Snowflake comporte trois étapes :
1. Utilisez un LLM pour transformer une chaîne d'adresse complète en table JSON avec ses parties comme attributs. Vous utiliserez la fonction SNOWFLAKE.CORTEX.COMPLETE à cette étape, qui utilise un modèle Mixtral-8x7B hébergé par Snowflake pour effectuer la conversion en utilisant un ensemble détaillé d’instructions que vous fournissez dans le cadre de l’appel de fonction. Consultez les notes du quickstart pour choisir la taille d'entrepôt appropriée pour exécuter cela à grande échelle.
2. Créez une colonne géospatiale simple sur la latitude et la longitude dans Worldwide Address Data.
- ST_POINT est utilisé pour créer la colonne géospatiale à partir de la latitude et de la longitude.
- Les données inutiles sont supprimées de la table des données d’adresses mondiales sur la base de valeurs de latitude et de longitude non valides.
3. Utilisez JAROWINKLER_SIMILARITY pour faire correspondre les adresses. Vous allez joindre les deux tables sur quelques colonnes, en enveloppant la colonne des noms de rue dans une fonction JAROWINKLER_SIMILARITY, car il n’est pas rare que les noms de rue aient des différences subtiles entre les sources, d’où le « 95 » comme seuil de similarité dans l’appel de fonction.
Il est important de noter ici que cette méthode n’est pas d’une précision irréprochable. Le quickstart montre plus en détail le niveau de précision atteint et certaines des raisons pour lesquelles cette méthode est imparfaite, mais il est important de noter la différence de coût entre cette méthode et un service de géocodage dédié. Cette méthode est un excellent moyen de réaliser des exigences plus simples ou de prototyper la justification de services de géocodage plus dédiés avec des exigences plus compliquées.
Pour effectuer un géocodage inversé, ou produire une adresse à partir d’un type de données géospatiales, nous allons créer une procédure stockée qui fait trois choses : créer une table de résultats, sélectionner les lignes qui n’ont pas été traitées et trouver la correspondance d’adresse la plus proche à l’aide d’une boucle avec une recherche de rayon croissant jusqu’à ce qu’un résultat soit trouvé. Vous pouvez appeler cette procédure comme toutes les procédures dans Snowflake, en analysant les arguments appropriés définis en haut du code de procédure, que vous pouvez voir dans le quickstart.
Géocoder vos données d’adresse libère plus de potentiel pour utiliser ces données d’adresses de manière plus instructive. Cherchons une façon d’utiliser ces données géocodées.
Prévisions à l’aide de données géospatiales
La prévision est une activité courante avec les données temporelles, car il existe des modèles de ML solides conçus pour saisir des données historiques et prédire une fenêtre de données futures en fonction des tendances historiques. Snowflake inclut un modèle de prévision de ML intégré appelé SNOWFLAKE.ML.FORECAST que vous pouvez facilement utiliser pour cette activité. Alors que vous pouvez effectuer des prévisions temporelles pour n’importe quelles données temporelles, l’enrichissement de ces prévisions avec des données de localisation fournit une autre dimension de valeur dans le processus de prévision.
Deux jeux de données sont utilisés dans le quickstart : des données sur les courses de taxi à New York fournies par CARTO et des événements fournis par PredictHQ. Vous pouvez considérer les deux jeux de données comme ceci : les données sur les courses de taxi sont comme toutes les données basées sur des séries temporelles que vous avez sur quelque chose qui se passe à une certaine heure et à un certain endroit. Vous avez probablement ce genre de données dans votre entreprise. Les données d’événement ajoutent plus de contexte à un élément temporel de vos données. Dans cet exemple, les données de l’événement peuvent orienter toute augmentation ou diminution prévue des courses de taxi à New York. Parmi les autres types de données contextuelles, vous pouvez avoir des périodes ouvertes ou fermées, des périodes promotionnelles récurrentes, des événements publics et plus encore. Quelles qu’elles soient, les données contextuelles peuvent aider à fournir une plus grande précision aux prévisions en améliorant n’importe quel jour/heure avec une attente croissante ou décroissante.
L’activité de prévision comporte quatre étapes :
1. Utilisez une grille spatiale pour calculer une série temporelle de prises de taxi pour chaque cellule de la grille.
Vous utiliserez la grille spatiale H3 pour diviser New York en cellules en fonction du lieu de prise en charge.
Vous pouvez repérer une prise en charge dans une cellule en prenant la latitude et la longitude et en le convertissant en cellule H3.
Vous pouvez ensuite agréger le nombre de prises en charge dans chaque cellule New York par heures de la journée en utilisant les fonctions TIME_SLICE et H3_POINT_TO_CELL_STRING de Snowflake.
Enfin, vous devrez “combler” les lacunes horaires dans un emplacement avec 0 (zéro) enregistrement de prise en charge. Ceci est nécessaire pour les prévisions temporelles.
2. Enrichissez les données temporelles horaires avec des données d’événements.
Cela ajoute des colonnes « feature » aux données ci-dessus en signalant chaque ligne comme un jour de vacances scolaires, un jour férié ou un événement sportif en fonction de l’intégration de nos données d’événement.
Notez que vous pouvez ajouter toutes les « features » pertinentes pour vos données d’événement. Les vacances scolaires, les jours fériés et les événements sportifs ne sont que des exemples réalistes pour ce scénario.
3. Créez un modèle, un jeu de données d’entraînement et un jeu de données de prédiction.
Le modèle SNOWFLAKE.ML.FORECAST nécessite une étape d’entraînement avant d’émettre des prédictions. Vos données de l’étape 2 doivent donc être divisées en deux tables par période : une pour l’entraînement et une pour les prédictions.
À partir de là, vous allez créer un modèle, dont l’une des entrées est la table de données d’entraînement que vous avez établie ci-dessus. Vous identifierez également les colonnes clés, comme la colonne temporelle, les indicateurs à prévoir et, dans ce cas, les données d’emplacement pour les prévisions.
4. Exécutez le modèle et visualisez la précision des prédictions.
Une fois le modèle entraîné, il peut être appelé, pointant vers un autre jeu de données à utiliser pour la prédiction.
La prédiction peut être extraite vers une table, puis comparée aux données réelles pour évaluer la précision. Il existe plusieurs façons de le faire, mais le quickstart suggère d’utiliser une SMAPE (symmetric mean absolute percentage error).
Le graphique ci-dessous montre à quoi peut ressembler le résultat de cette comparaison pour une cellule H3, le modèle de prévision ayant un taux de précision assez élevé :

La prévision temporelle dans Snowflake peut être un outil puissant, qui peut être encore amélioré par votre capacité à regrouper des emplacements dans une cellule donnée dans une grille spatiale et à prévoir cette cellule, au lieu d’essayer de prévoir chaque emplacement individuellement, ce qui est trop granulaire.
Utiliser H3 pour visualiser les opinions par emplacement
Vous avez utilisé un LLM dans l’exemple de géocodage ci-dessus pour vous aider à transformer les données dans un format différent, mais vous pouvez également l’utiliser pour évaluer les données textuelles en fonction de la positivité ou de la négativité du langage utilisé dans le texte. Ceci est précieux pour évaluer l’opinion des personnes dans une situation donnée, qu'il s'agisse des commentaires qu'elles fournissent sur les produits ou les services ou de l'opinion favorable qu'elles ont de votre marque. La clé ici est que vous pouvez transformer un texte brut en mesure ordinale et ensuite analyser si l'emplacement est pris en compte dans cette mesure. Voyons comment nous pouvons le faire dans Snowflake.
En ce qui concerne les données, il vous faut trois composants :
Un événement ou une transaction quelconque
Un commentaire de texte brut sur cet événement
Le lieu de cet événement
Tout cela peut se faire dans un seul système (par exemple, les clients passent une commande dans une application et commentent ensuite leur niveau de satisfaction à l’égard du processus de commande), ou dans des systèmes différents (par exemple, un client passe une commande d’un produit mais publie ensuite sur les réseaux sociaux son avis sur les articles qu’il a reçus). Le quickstart s’appuie sur des données de livraison synthétiques, qui incluent les commentaires des clients sur le déroulement de l’expérience de livraison.
La visualisation de ces commentaires par emplacement comporte deux étapes :
1. Notez l’opinion qui ressort des commentaires pour chaque livraison.
Tout d’abord, vous allez utiliser SNOWFLAKE.CORTEXT.COMPLETE comme précédemment, mais cette fois, la consigne que vous donnez au LLM est d’évaluer le texte et de lui attribuer une étiquette de catégorie textuelle, comme « Très positif ».
Ensuite, vous convertirez ces étiquettes textuelles en chiffres que vous pourrez agréger pour un certain nombre de livraisons dans une zone commune.
2. Visualisez l’opinion globale par emplacement avec H3.
Au lieu de précalculer les scores d’emplacement comme nous l’avons fait dans les prévisions temporelles, nous allons créer une application qui regroupera les scores d’opinion en cellules H3 à la volée.
L’application Streamlit utilisera ST.PYDECK_CHART pour tracer et colorer les cellules H3 en fonction des quantiles d’opinion.
Voici un exemple de visualisation de l’analyse des opinions par emplacement du magasin :

Mais surtout, l’application vous permet d’explorer les données plus librement car nous calculons tout à la volée. Comment fonctionne la plateforme ? Considérez ce zoom ci-dessous :

Et si nous voulions obtenir une vue plus fine de la péninsule de San Francisco ? L’utilisation du curseur dans l’application pour faire passer la résolution H3 de 7 à 8 nous permet d’y voir plus clair :

Nous pouvons désormais voir plus clairement les lacunes, les points forts et les sujets de préoccupation. Cette capacité à la volée d’obtenir une meilleure résolution d’emplacement est comme passer d’un téléviseur SD à un téléviseur HD, puis à un téléviseur 4K et à un téléviseur 8K – une image plus nette de ce que nous essayons d’examiner.
H3 est un moyen puissant et rapide d’obtenir plus de clarté sur la localisation des indicateurs. Et en le combinant avec un LLM, nous pouvons transformer un texte non additif en un résultat mesurable. Il s’agit d’une fonctionnalité extrêmement puissante, que vous pouvez appliquer de différentes manières au sein de votre entreprise !
Analyse du voisin le plus proche avec raster et shapefiles
Alors que de nombreuses entreprises obtiennent leurs données de localisation à partir de sources de données standard dont le reste de leurs données provient également, celles qui travaillent profondément sur les données géospatiales savent que les données peuvent également provenir de formats et de fichiers spécialisés. Pour les non-initiés, un bref aperçu est que la plupart des données géospatiales couvertes dans cet article et d’autres articles de blog jusqu’à présent sont des données vectorielles – points, lignes et polygones. Un format courant utilisé pour stocker des données vectorielles dans un fichier est un fichier de forme, ou shapefile, mais les shapefiles sont généralement ouverts avec des applications SIG dédiées, et non lus par les bases de données. Les données matricielles (raster) diffèrent des données vectorielles par le fait que les données sont représentées sous la forme d’une grille de cellules, comme une image pixelisée. Les données raster sont généralement stockées dans des fichiers GeoTIFF, qui ne sont, là encore, généralement pas lus par les bases de données. Les données vectorielles et raster ont leur cas d’usage, et parfois vous avez besoin d’accéder aux deux ; le quickstart aborde cela.
Dans ce scénario, nous utiliserons deux sources de données – une carte d’altitude stockée sous forme de GeoTIFF raster et des données de température/précipitations stockées dans un shapefile – pour utiliser les deux jeux de données afin de prédire la présence d’eaux souterraines. Mais en réalité, ce ne sont que des fichiers représentatifs pour montrer comment nous pouvons accéder à ces types de fichiers dans Snowflake et, en fin de compte, les utiliser dans une analyse spécifique. Si vous avez des GeoTIFF ou des shapefiles dans votre organisation, vous pouvez utiliser ces méthodes pour introduire leurs données dans Snowflake.
La combinaison de ces deux sources de données pour effectuer une analyse du voisin le plus proche comporte trois étapes :
1. Chargez le fichier GeoTIFF.
Vous allez utiliser la bibliothèque Rasterio Python pour créer des fonctions qui extraient les métadonnées GeoTIFF, évaluent les bandes présentes dans le GeoTIFF et, en fin de compte, lisent et convertissent le centroïde de chaque pixel en données vectorielles (points).
Évaluez ensuite les métadonnées et convertissez les points en un type de données dans le SRID approprié.
Enfin, vous allez réduire le nombre volumineux de pixels dans une taille plus facile à gérer en convertissant les points en cellules H3.
2. Chargez le fichier shapefile.
Vous utiliserez la bibliothèque Fiona Python et la capacité Dynamic File Access de Snowflake pour créer des fonctions qui lisent les métadonnées et les données des shapefiles.
À partir de là, vous évaluerez la nature des données des shapefiles et comment elles sont représentées afin de pouvoir concevoir une requête pour les charger dans une table avec les colonnes et les types de données appropriés.
Comme à l’étape 1, vous allez réduire le nombre de lignes à une taille plus facile à gérer en convertissant les points en cellules H3.
Le quickstart montre également une autre façon de visualiser ces données, mais il s’agit d’une étape optionnelle.
3. Calculez le point météorologique le plus proche pour chaque point d'altitude, en utilisant l'une des deux méthodes décrites par le quickstart.
À noter : chaque méthode implique de filtrer les deux tables en fonction de la zone de concentration, comme détaillé dans le quickstart.
La première méthode est autonome dans Snowflake et vous demande d’utiliser une requête qui combine ST_DWITHIN et une fonction de fenêtre QUALIFY. Cependant, cette méthode peut être gourmande en calcul.
La deuxième méthode consiste à utiliser la Snowflake Native App SedonaSnow, qui vous donne accès à la fonction ST_VORONOIPOLYGONS. Les polygones de Voronoï peuvent être un moyen plus efficace de regrouper les points les plus proches d’un autre point, mais pour accéder à une telle fonction, vous devrez installer l’application SedonaSnow.
Il n’est pas rare dans le monde des données géospatiales d’avoir besoin d’accéder à des données issues de fichiers non traditionnels. Heureusement, la flexibilité de Snowflake vous permet de travailler avec ces fichiers tout en accédant à ces données précieuses pour vos analyses.
Cartes interactives
Il est également courant dans le monde des SIG d’interagir avec des interfaces utilisateur conçues pour les données de localisation. Ces applications vont au-delà de ce qui est généralement possible dans un outil de BI pour présenter plus de données avec des capacités de couche sophistiquées et d'autres interactions spécifiques à la localisation. Un outil open source s’appelle Kepler.gl.. Mais au lieu d’implémenter vous-même Kepler.gl, vous pouvez simplement installer Dekart depuis la Marketplace Snowflake et avoir un accès immédiat à Kepler.gl et à ses fonctionnalités plus avancées de visualisation de localisation. L’exécution de Kepler.gl dans une Snowflake Native App à l’aide de Snowpark Container Services garantit également que vos données ne quittent jamais Snowflake. Voyons un exemple du quickstart.
Dans ce cas d’usage, nous allons créer une carte interactive pour visualiser la densité des bornes de recharge de VE, ce qui identifiera les zones où il pourrait être intéressant d’ajouter d’autres bornes. Cet exemple vous oblige à superposer trois jeux de données : limites du pays, itinéraires de transport et emplacements (chargeurs de VE dans cet exemple), mais vous pouvez facilement remplacer les itinéraires de transport et les emplacements des chargeurs de VE par deux autres jeux de données de localisation dans votre organisation. Après avoir suivi la configuration dans le quickstart, vous allez faire les trois choses suivantes.
Utilisez une requête pour définir une couche de limites :

Utilisez une deuxième requête pour saisir les itinéraires de transport comme deuxième couche :

Remarquez ci-dessus comment « uk_roads » a été ajouté comme couche sur le côté gauche de l’interface utilisateur de Kepler.gl.
Ensuite, utilisez une troisième requête pour tracer les stations de recharge de VE comme une couche supplémentaire :

Remarquez dans les deuxième et troisième requêtes comment vous référencez la requête pour la première couche par son nom dans la clause FROM comme un moyen de filtrer les deuxième et troisième requêtes en sélectionnant uniquement les routes et les chargeurs contenus dans les limites de la première couche.
Enfin, vous pouvez ajouter une quatrième requête qui calculera la densité des emplacements des chargeurs de VE en comptant le nombre de chargeurs de VE dans un rayon de 50 kilomètres pour chaque segment de route :

Bien que nous ne montrons pas tout ce que vous pouvez faire avec Kepler.gl dans cet exemple, j’espère qu’il illustre la difficulté que vous pourriez avoir à le faire dans un outil de BI traditionnel. En accédant à une interface plus sophistiquée pour créer des visualisations de localisation, facilement installable depuis la Marketplace Snowflake, vous pouvez améliorer vos capacités d’analyse de localisation d’une manière plus simple que vous ne le pensez.
Conclusion
Dans cet article de blog, nous avons abordé les différentes façons dont vous pouvez tirer des informations des données géospatiales dans Snowflake. Nous avons abordé six fonctionnalités principales, qui vous permettent de :
Transformer les données de localisation en types de données GEOMETRY et GEOGRAPHY pour permettre une analyse plus poussée et ouvrir des cas d’usage, tels que le géocodage et le géocodage inversé
Enrichir vos données avec des jeux de données temporelles et événementielles
Appliquer des modèles de machine learning et des fonctions SQL de machine learning natives pour la prévision sur des données géospatiales
Appliquer des LLM pour l’analyse des opinions en fonction des lieux
Calculer également les distances et effectuer des analyses de proximité avec des fonctions natives
Visualiser des cartes interactives en étendant les capacités natives de Snowflake avec Snowpark Container Services et notre vaste écosystème de partenaires
Suivez ce quickstart pour acquérir une expérience pratique avec ces scénarios. Il vous aidera à apprendre à appliquer ces cas d'usage plus sophistiqués et à tirer davantage de valeur de vos données de localisation dans Snowflake. En vous souhaitant de trouver les points que vous cherchez !