Um den Public Preview von ArcGIS GeoAnalytics for Microsoft Fabric einzuläuten, haben wir eine Reihe von Blogbeiträgen, die die Funktionalität von GeoAnalytics for Fabric erkunden. In diesem Beitrag werden wir Analysefunktionen untersuchen, um große Punktdatensätze zu erforschen und Trends sowie Hotspots mit GeoAnalytics for Fabric zu berechnen.<\/SPAN><\/P>
<\/span><\/P>Importieren von GeoAnalytics for Fabric<\/H3>Wir beginnen mit einer Auffrischung, wie man GeoAnalytics for Fabric importiert und damit arbeitet. Um GeoAnalytics for Fabric zu importieren, müssen Sie nur <\/SPAN>import geoanalytics_fabric<\/FONT> <\/SPAN>in eine Zelle Ihres Notebooks einfügen. Für weitere Informationen zur Aktivierung der Bibliothek siehe die <\/SPAN>Getting started Dokumentation. Es gibt auch Beispiele in den früheren Blogbeiträgen unserer Einführungsserie.<\/P>Daten<\/H3>Für diesen Beitrag arbeiten wir mit einem öffentlichen Sicherheitsdatensatz der Stadt Boston, MA aus den <\/SPAN>Azure open datasets. Dieser Datensatz enthält Breiten- und Längengradkoordinaten für öffentliche Sicherheitsanfragen aus Boston. <\/SPAN><\/P> <\/P># https://learn.microsoft.com/en-us/azure/open-datasets/dataset-boston-safety?tabs=pyspark
# Azure Speicherzugriffsinfo
blob_account_name = "azureopendatastorage"
blob_container_name = "citydatacontainer"
blob_relative_path = "Safety/Release/city=Boston"
blob_sas_token = r""
# Erlaube SPARK das Lesen vom Blob remote
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('Remote Blob-Pfad: ' + wasbs_path)
# SPARK liest parquet
# benutze die GeoAnalytics for Fabric ST_Point Funktion zur Erstellung einer Geometrie
df = spark.read.parquet(wasbs_path)\
.withColumn("geometry", ST.point("longitude", "latitude", 4326))
df.persist().count()<\/code><\/pre> <\/P>Dieser Datensatz ist ziemlich groß - mehr als 24 Millionen Datensätze! Bei großen Datensätzen ist es oft schwierig, Muster visuell zu erkennen, wenn man sich nur die Daten ansieht. <\/P>
<\/span><\/P> GeoAnalytics for Fabric kann es erleichtern, diese Muster durch Aggregation und andere analytische Techniken zu erkunden, die wir in diesem Beitrag untersuchen werden. Es macht es nicht nur einfacher, die Muster innerhalb Ihrer Notebook-Erfahrung zu sehen, sondern Datenaggregation ist oft ein wichtiger Schritt bei der Vorbereitung von Daten für die Exploration in gängigen Business Intelligence Tools wie Power BI. <\/P>Lassen Sie uns mit der Aggregation beginnen.<\/P>Räumliche Binning zur Aufdeckung von Mustern & Vereinfachung für Visualisierung<\/H2>Es ist üblich bei Punktdatensätzen, dass genügend Daten vorhanden sind, sodass sich die Punkte auf der Karte überlappen und Muster in der Verteilung verdecken. Dies geschieht, weil sich die Punkte so stark überlappen, dass man die Dichte visuell nicht erkennen kann - wenn die ganze Karte vollständig mit Datenmarkierungen bedeckt ist, gibt es kein Muster außer einer vollständig bedeckten Karte.<\/P>Räumliche Aggregation kann in diesen Fällen nützlich sein, um allgemeine räumliche Muster in Punktdatensätzen leichter zu erkennen. Räumliche Aggregation ermöglicht es Ihnen, die Anzahl der Punkte zu zählen, die in diskrete geografische Regionen fallen (z.B. Quadrate, Hexagone, Schulbezirke, Volkszählungsbezirke usw.) und dann die Anzahl der Punkte oder andere Aggregate der Attribute in jede dieser Polygone zu kartieren.<\/P>Neben der Identifizierung räumlicher Muster durch Aggregation der Daten hilft dies auch bei der Erstellung von Datensätzen für BI-Tools wie <\/SPAN>Power BI , um die Daten in Dashboards leichter visualisieren zu können.<\/SPAN>
Wie wir im Diagramm unseres Datensatzes oben gesehen haben, gibt es wirklich zu viele Daten, um ein Muster klar erkennen zu können. Selbst wenn wir ziemlich nah heranzoomen, könnten wir immer noch Schwierigkeiten haben, Muster in diesem dichten Datensatz zu sehen. Also lassen Sie uns erkunden, wie räumliches Binning und Aggregation helfen können.<\/P>
<\/span><\/P>Um die Verteilung besser zu verstehen, aggregieren wir mit dem <\/SPAN>Aggregate Points Tool in GeoAnalytics for Fabric. Aggregate Points fasst Punkte in Polygonen aus anderen Datensätzen oder Bins (quadratisch, hexagonal oder H3) zusammen. Die Grenzen der Polygone oder Bins werden verwendet, um die Punkte innerhalb jedes Bereichs zu sammeln und Statistiken zu berechnen. Das Ergebnis enthält immer die Anzahl der Punkte innerhalb jedes Bereichs.<\/P>Beachten Sie, dass Analysen mit hexagonalen oder quadratischen Bins erfordern, dass Ihre Eingabegeometrie ein projiziertes Koordinatensystem hat. Für Analysen mit H3-Bins wird erwartet, dass Ihre Eingabegeometrie im World Geodetic System 1984 Koordinatensystem (SRID 4326) vorliegt. Weitere Informationen über Projektionen und Koordinatensysteme finden Sie im Kernkonzept zu Koordinatensysteme und Transformationen.<\/P><\/BLOCKQUOTE>Wenn Ihre Daten nicht in einem geeigneten Koordinatensystem vorliegen, transformiert das Aggregate Points Tool Ihre Eingabe automatisch in das erforderliche Koordinatensystem oder Sie können Ihre Daten selbst mit ST_Transform transformieren. <\/P>Erstellen von Bins<\/H4>Mit diesem Hintergrund erstellen wir einige quadratische Bins. Das folgende Beispiel verwendet das Aggregate Points Tool, um unsere Daten in quadratische räumliche Bins mit einer Seitenlänge von 0.1 Meilen aufzuteilen.<\/P> <\/P># Daten binnen
from geoanalytics_fabric.tools import AggregatePoints
# Punkte in quadratische Bins aggregieren
result_agg = AggregatePoints() \
.setBins(bin_size=0.1, bin_size_unit="Miles", bin_type="Square") \
.run(df)<\/code><\/pre> <\/P>Dies ergibt einen neuen DataFrame mit Bin-Geometrien und Zählungen für die Features innerhalb des Bins. Sie können auch andere aggregierte Zusammenfassungsfelder hinzufügen (z.B. Minimumwert, Maximumwert, Summe usw.). <\/P>Die Darstellung der Ergebnisse unserer Aggregation zeigt ein neues Muster, bei dem wir die Verteilung unserer Daten leichter sehen und verstehen können.<\/P>
Kartenvergleich des Originaldatensatzes und der Daten gebinnt in 0.1 Meilen quadratischen Bins<\/span><\/span><\/P>Beim Aggregieren von Daten mit dem Aggregate Points Tool können Sie die Daten auch zeitlich aufteilen anstatt alle Daten zusammenzubinnen. Dies ermöglicht einfachere Vergleiche über Zeiträume hinweg zur Betrachtung von Veränderungsmustern.<\/P>Binning mit einem Zeitschritt erfordert, dass Zeit auf dem Eingabe-DataFrame aktiviert ist (z.B. eine Zeitstempelspalte vorhanden ist).<\/P>Standardmäßig wird das Zeit-Slicing automatisch am 1. Januar 1970 ausgerichtet und Schritte werden ab diesem Zeitpunkt berechnet. Dies kann angepasst werden, wenn Sie einen Startzeitpunkt für die Zeitschritte angeben möchten (anstatt des Standarddatums Januar 1, 1970). Dies wird mit einer <\/SPAN>Referenzzeit<\/EM> durchgeführt. Eine Referenzzeit kann ein Datum sein (z. B. 1. Januar 2016) oder eine Zeit und ein Datum (z. B. 1. Januar 2016 um 9:30 Uhr). Weitere Details zum Time Stepping finden Sie in der Core Concept-Dokumentation für <\/SPAN>Time Stepping<\/A>.<\/P>Hier ist ein Beispiel, wie man für jedes Jahr<\/EM> in den Eingabedaten einen separaten Satz von Bins erstellt. Dies ermöglicht es uns, die einzelnen Jahre oder Veränderungen über die Zeit zu betrachten (z. B. absolute oder prozentuale Zunahme\/Abnahme im vergangenen Jahr). <\/P> <\/P># aggregiere Punkte in quadratische Bins - für jedes Jahr in den Daten. Standardmäßig beginnt das Jahresintervall am 1. Januar
# dies kann mit dem Parameter reference_time angepasst werden
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> Als Ergebnis können wir einzelne Jahre betrachten und Vergleiche anstellen. Um das Jahr bei der Analyse oder Darstellung anzugeben, filtern wir mit den Spalten step_start<\/FONT> oder step_end<\/FONT>.<\/P> <\/P># Ergebnisse aus der Aggregation von Punkten in quadratische Bins für _ein_ Jahr (2013) plotten
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> Hier ist ein Beispiel für zwei der Jahre im Ergebnis:<\/P>
Vergleich von gebinnten Daten für zwei verschiedene Jahre<\/span><\/span><\/P>Wir können diese Ergebnisse auch verwenden, um Veränderungen über die Zeit zu berechnen, z. B. so:<\/P>
<\/span> <\/P>
Fazit<\/H3>Wir hoffen, dass dieses kurze Einführungskapitel zum Erkunden von Trends und Hotspots hilfreich war. Wir werden weitere Inhalte veröffentlichen, um Ihnen den Einstieg zu erleichtern – schauen Sie also regelmäßig in der Community vorbei! Und bitte lassen Sie uns wissen, welche Themen Sie gerne vertiefen möchten!<\/P>