Pour lancer l'aperçu public de ArcGIS GeoAnalytics for Microsoft Fabric, nous avons une série d'articles de blog explorant les fonctionnalités de GeoAnalytics for Fabric. Dans cet article, nous allons explorer les capacités d'analyse pour explorer de grands ensembles de points afin de calculer des tendances et des points chauds avec GeoAnalytics for Fabric.

Importer GeoAnalytics for Fabric
Nous commencerons par un rappel sur la façon d'importer GeoAnalytics for Fabric et de commencer à travailler avec. Pour importer GeoAnalytics for Fabric, il vous suffit d'ajouter import geoanalytics_fabric dans une cellule de votre notebook. Pour plus d'informations sur l'activation de la bibliothèque, consultez la documentation de démarrage. Il y a aussi des exemples dans les articles de blog précédents de notre série d'introduction.
Données
Pour cet article, nous travaillerons avec un jeu de données de sécurité publique de la ville de Boston, MA provenant des ensembles de données ouverts Azure. Ce jeu de données contient des coordonnées latitude et longitude pour les demandes de service de sécurité publique à Boston.
# https://learn.microsoft.com/en-us/azure/open-datasets/dataset-boston-safety?tabs=pyspark
# Informations d'accès au stockage Azure
blob_account_name = "azureopendatastorage"
blob_container_name = "citydatacontainer"
blob_relative_path = "Safety/Release/city=Boston"
blob_sas_token = r""
# Permettre à SPARK de lire à distance depuis Blob
wasbs_path = 'wasbs://%s@%s.blob.core.windows.net/%s' % (blob_container_name, blob_account_name, blob_relative_path)
spark.conf.set(
'fs.azure.sas.%s.%s.blob.core.windows.net' % (blob_container_name, blob_account_name),
blob_sas_token)
print('Chemin distant du blob : ' + wasbs_path)
# Lecture parquet SPARK
# utiliser la fonction ST_Point de GeoAnalytics for Fabric pour créer une géométrie
df = spark.read.parquet(wasbs_path)\
.withColumn("geometry", ST.point("longitude", "latitude", 4326))
df.persist().count()
Ce jeu de données est assez volumineux - plus de 24 millions d'enregistrements ! Avec de grands ensembles de données, il est souvent difficile d'identifier visuellement des motifs dans les données en les regardant simplement.

GeoAnalytics for Fabric peut faciliter l'exploration de ces motifs grâce à l'agrégation et à d'autres techniques analytiques que nous explorerons dans cet article. Non seulement cela facilite la visualisation des motifs dans votre expérience notebook, mais l'agrégation des données est souvent une étape importante dans la préparation des données pour l'exploration dans des outils courants d'intelligence économique, comme Power BI.
Commençons par l'agrégation.
Regroupement spatial pour découvrir des motifs & simplifier la visualisation
Il est courant avec les ensembles de points d'avoir suffisamment de données pour que les points sur la carte se chevauchent et cachent les motifs dans la distribution. Cela se produit parce que les points se chevauchent suffisamment pour que vous ne puissiez pas identifier visuellement la densité - si toute la carte est entièrement couverte par des marqueurs de données, il n'y a pas d'autre motif qu'une carte entièrement couverte.
L'agrégation spatiale peut être utile dans ces cas pour faciliter l'identification des motifs spatiaux généraux dans les ensembles de points. L'agrégation spatiale vous permet de compter le nombre de points qui tombent dans des régions géographiques discrètes (par exemple, carrés, hexagones, districts scolaires, secteurs du recensement, etc.) puis de cartographier le nombre de points ou d'autres agrégats des attributs dans chacun de ces polygones.
En plus d'identifier les motifs spatiaux en agrégeant les données, cela aide également à créer des ensembles de données pour les outils BI, comme Power BI pour visualiser plus facilement les données dans les tableaux de bord.
Comme nous l'avons vu dans le graphique de notre ensemble de données ci-dessus, il y a vraiment trop de données pour pouvoir voir clairement un motif. Même si nous zoomons assez près, nous pouvons toujours avoir du mal à voir des motifs dans cet ensemble dense. Alors, explorons comment le regroupement spatial et l'agrégation peuvent aider.

Pour aider à comprendre la distribution, nous allons agréger en utilisant l' outil Aggregate Points dans GeoAnalytics for Fabric. Aggregate Points résume les points en polygones provenant d'autres ensembles ou bacs (carré, hexagonal ou H3). Les limites des polygones ou bacs sont utilisées pour collecter les points dans chaque zone et calculer des statistiques. Le résultat contient toujours le nombre de points dans chaque zone.
Notez que l'analyse avec des bacs hexagonaux ou carrés nécessite que votre géométrie d'entrée ait un système de coordonnées projeté. Pour l'analyse avec des bacs H3, il est attendu que votre géométrie d'entrée soit dans le système World Geodetic System 1984 (SRID 4326). Plus d'informations sur les projections et systèmes de coordonnées peuvent être trouvées dans le concept fondamental sur Systèmes et transformations de coordonnées.
Si vos données ne sont pas dans un système approprié, l'outil Aggregate Points transformera votre entrée vers le système requis, ou vous pouvez transformer vos données vous-même en utilisant ST_Transform.
Création des bacs
Avec ce contexte posé, créons quelques bacs carrés. L'exemple ci-dessous utilise l' outil Aggregate Points pour diviser nos données en bacs spatiaux carrés avec un côté long de 0.1 mile.
# regrouper les données
from geoanalytics_fabric.tools import AggregatePoints
# agréger les points en bacs carrés
result_agg = AggregatePoints() \
.setBins(bin_size=0.1, bin_size_unit="Miles", bin_type="Square") \
.run(df)
Cela donne un nouveau DataFrame avec les géométries des bacs et le nombre d'entités à l'intérieur du bac. Vous pouvez aussi ajouter d'autres champs sommaires agrégés lors de la création des bacs (par exemple minimum, maximum, somme, etc.).
Tracer les résultats de notre agrégation montre un nouveau motif où nous pouvons plus facilement voir et comprendre la distribution de nos données.
Cartes comparant le jeu original et les données regroupées en bacs carrés 0.1 mile
Lorsqu'on agrège des données avec l'outil Aggregate Points, on peut aussi découper les données selon le temps au lieu d'agréger toutes les données ensemble. Cela permet des comparaisons plus faciles au fil du temps pour observer les motifs d'évolution.
Le regroupement par pas temporel nécessite que le temps soit activé sur le DataFrame d'entrée (par exemple vous avez une colonne timestamp).
Par défaut, le découpage temporel est automatiquement aligné au 1er janvier 1970 et les pas sont calculés à partir de ce point. Cela peut être ajusté si vous souhaitez spécifier un temps pour que les pas temporels commencent (au lieu du défaut janvier 1, 1970). Cela se fait en utilisant un <\/SPAN>temps de référence<\/EM>. Un temps de référence peut être une date (par exemple, le 1er janvier 2016) ou une heure et une date (par exemple, le 1er janvier 2016 à 9h30). Plus de détails sur le pas de temps peuvent être trouvés dans la documentation du concept de base pour <\/SPAN>le pas de temps<\/A>.<\/P>Voici un exemple de création d'un ensemble séparé de bacs pour chaque année<\/EM> dans les données d'entrée. Cela nous permettra d'examiner les années individuelles ou l'évolution dans le temps (par exemple, augmentation ou diminution absolue ou en pourcentage au cours de l'année passée). <\/P> <\/P># agréger les points en bacs carrés - pour chaque année dans les données. Par défaut, l'intervalle annuel commence le 1er janvier
# cela peut être ajusté avec le paramètre reference_time input
result_agg_yearly = AggregatePoints() \
.setBins(bin_size=0.1, bin_size_unit="Miles", bin_type="Square") \
.setTimeStep(interval_duration=1, interval_unit="years") \
.run(df)<\/code><\/pre> <\/P> En conséquence, nous pouvons examiner les années individuelles et faire des comparaisons. Pour spécifier l'année lors de l'analyse ou du tracé, nous filtrons en utilisant les colonnes step_start<\/FONT> ou step_end<\/FONT>.<\/P> <\/P># tracer les résultats de l'agrégation des points en bacs carrés pour _une_ année (2013)
result_plot = result_agg_yearly\
.filter(F.year("step_start") == 2013)\
.st.plot(cmap_values="COUNT",
basemap="dark",
cmap="YlGnBu",
vmax=1000,
figsize=(10,10))<\/code><\/pre> <\/P> Voici un exemple de deux des années dans le résultat:<\/P>
Comparaison des données regroupées par bacs pour deux années différentes<\/span><\/span><\/P>Nous pouvons également utiliser ces résultats pour calculer l'évolution dans le temps pour des résultats comme celui-ci :<\/P>
<\/span> <\/P>
Conclusion<\/H3>Nous espérons que cette introduction rapide à l'exploration des tendances et des points chauds vous a été utile. Nous publierons du contenu supplémentaire pour vous aider à démarrer, alors revenez sur la Communauté pour plus ! Et s'il vous plaît faites-nous savoir quel type de choses vous aimeriez apprendre davantage !<\/P>