Om de Public Preview van ArcGIS GeoAnalytics for Microsoft Fabric te lanceren, hebben we een reeks blogposts die de functionaliteit van GeoAnalytics for Fabric verkennen. In deze post zullen we analysemogelijkheden onderzoeken voor het verkennen van grote puntdatasets om trends en hotspots te berekenen met GeoAnalytics for Fabric.

Importeer GeoAnalytics for Fabric
We beginnen met een opfrisser over hoe je GeoAnalytics for Fabric importeert en ermee aan de slag gaat. Om GeoAnalytics for Fabric te importeren hoef je alleen maar import geoanalytics_fabric toe te voegen aan een cel in je notebook. Voor meer informatie over het inschakelen van de bibliotheek, zie de Getting started documentatie. Er zijn ook voorbeelden in de eerste blogposts in onze introductiereeks.
Data
Voor deze post werken we met een openbare veiligheidsdata van de stad Boston, MA van de Azure open datasets. Deze dataset bevat breedte- en lengtegraadcoördinaten voor openbare veiligheidsserviceverzoeken uit Boston.
# https://learn.microsoft.com/en-us/azure/open-datasets/dataset-boston-safety?tabs=pyspark
# Azure opslag toegang info
blob_account_name = "azureopendatastorage"
blob_container_name = "citydatacontainer"
blob_relative_path = "Safety/Release/city=Boston"
blob_sas_token = r""
# Sta SPARK toe om op afstand te lezen van 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('Remote blob path: ' + wasbs_path)
# SPARK lees parquet
# gebruik de GeoAnalytics for Fabric ST_Point functie om een geometrie te maken
df = spark.read.parquet(wasbs_path)\
.withColumn("geometry", ST.point("longitude", "latitude", 4326))
df.persist().count()
Deze dataset is vrij groot - meer dan 24 miljoen records! Bij grote datasets is het vaak moeilijk om visueel patronen in de data te herkennen door alleen naar de data te kijken.

GeoAnalytics for Fabric kan het gemakkelijker maken om deze patronen te verkennen door aggregatie en andere analytische technieken die we in deze post zullen onderzoeken. Het maakt het niet alleen makkelijker om de patronen binnen je notebook ervaring te zien, data-aggregatie is vaak een belangrijke stap bij het voorbereiden van data voor verkenning in gangbare business intelligence tools, zoals Power BI.
Laten we beginnen met aggregatie.
Ruimtelijke binning om patronen te ontdekken & vereenvoudigen voor visualisatie
Het komt vaak voor bij puntdatasets dat er genoeg data is waardoor de punten op de kaart overlappen en patronen in de verdeling verbergen. Dit gebeurt omdat de punten zo overlappen dat je visueel de dichtheid niet kunt herkennen - als de hele kaart volledig bedekt is met datapunten, is er geen patroon anders dan een volledig bedekte kaart.
Ruimtelijke aggregatie kan nuttig zijn in deze gevallen om het gemakkelijker te maken algemene ruimtelijke patronen in puntdatasets te identificeren. Ruimtelijke aggregatie stelt je in staat het aantal punten te tellen dat binnen discrete geografische regio's valt (bijv. vierkanten, hexagonen, schooldistricten, volkstellingsgebieden, enz.) en vervolgens het aantal punten of andere aggregaten van de attributen in elk van deze polygonen in kaart te brengen.
Naast het identificeren van ruimtelijke patronen door data te aggregeren, helpt dit ook bij het creëren van datasets voor BI-tools, zoals Power BI om de data gemakkelijker te visualiseren in dashboards.
Zoals we zagen in de plot van onze dataset hierboven, is er echt te veel data om duidelijk een patroon te kunnen zien. Zelfs als we redelijk dicht inzoomen, kunnen we nog steeds moeite hebben met het zien van patronen in deze dichte dataset. Dus laten we onderzoeken hoe ruimtelijke binning en aggregatie kunnen helpen.

Om inzicht te krijgen in de verdeling zullen we aggregeren met behulp van het Aggregate Points gereedschap in GeoAnalytics for Fabric. Aggregate Points vat punten samen in polygonen uit andere datasets of bins (vierkant, hexagonaal of H3). De grenzen van de polygonen of bins worden gebruikt om de punten binnen elk gebied te verzamelen en statistieken te berekenen. Het resultaat bevat altijd het aantal punten binnen elk gebied.
Let op dat analyse met hexagonale of vierkante bins vereist dat je invoergeometrie een geprojecteerd coördinatensysteem heeft. Voor analyse met H3-bins wordt verwacht dat je invoergeometrie zich bevindt in het World Geodetic System 1984 coördinatensysteem (SRID 4326). Meer informatie over projecties en coördinatensystemen is te vinden in het kernconcept over Coördinatensystemen en transformaties.
Als je data niet in een geschikt coördinatensysteem staat, zal het Aggregate Points gereedschap je invoer transformeren naar het vereiste coördinatensysteem, of je kunt je data zelf transformeren met behulp van ST_Transform.
Bins maken
Met die achtergrond gaan we wat vierkante bins maken. Het onderstaande voorbeeld gebruikt het Aggregate Points gereedschap om onze data op te delen in vierkante ruimtelijke bins met een zijde van 0.1 mijl lang.
# bin de data
from geoanalytics_fabric.tools import AggregatePoints
# aggregeer punten in vierkante bins
result_agg = AggregatePoints() \
.setBins(bin_size=0.1, bin_size_unit="Miles", bin_type="Square") \
.run(df)
Dit resulteert in een nieuwe DataFrame met bin-geometrieën en tellingen voor de features binnen de bin. Je kunt ook andere geaggregeerde samenvattingsvelden toevoegen wanneer je de bins maakt (bijv. minimumwaarde, maximumwaarde, som, enz.).
Het plotten van de resultaten van onze aggregatie toont een nieuw patroon waarbij we gemakkelijker de verdeling van onze data kunnen zien en begrijpen.
Kaarten die de originele dataset vergelijken met data gebinned in vierkante bins van 0.1 mijl
Bij het aggregeren van data met behulp van het Aggregate Points gereedschap kun je ook tijdgebaseerde segmentering toepassen in plaats van alle data samen te binned. Dit maakt gemakkelijkere vergelijkingen over tijd mogelijk om patronen van verandering te bekijken.
Binning met een tijdstap vereist dat tijd is ingeschakeld op het invoer DataFrame (bijv. je hebt een timestamp-kolom).
Standaard wordt tijdsegmentering automatisch uitgelijnd op 1 januari 1970 en worden stappen vanaf dat punt berekend. Dit kan worden aangepast als je wilt specificeren wanneer de tijdstappen moeten beginnen (in plaats van standaard januari 1, 1970). Dit wordt gedaan met behulp van een <\/SPAN>referentietijdstip<\/EM>. Een referentietijdstip kan een datum zijn (bijv. 1 januari 2016) of een tijd en datum (bijv. 1 januari 2016 om 9:30 uur). Meer details over tijdstappen zijn te vinden in de kernconceptdocumentatie voor <\/SPAN>tijdstappen<\/A>.<\/P>Hier is een voorbeeld van het maken van een aparte set bakken voor elk jaar<\/EM> in de invoergegevens. Dit stelt ons in staat om naar de afzonderlijke jaren te kijken of veranderingen in de tijd (bijv. absolute of procentuele toename\/afname over het afgelopen jaar). <\/P> <\/P># punten aggregeren in vierkante bakken - voor elk 1 jaar in de gegevens. Standaard begint het jaarlijkse interval op 1 januari
# dit kan worden aangepast met de parameter 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> Als resultaat kunnen we naar afzonderlijke jaren kijken en vergelijkingen maken. Om het jaar op te geven bij het uitvoeren van analyse of plotten filteren we met behulp van de step_start<\/FONT> of step_end<\/FONT> kolommen.<\/P> <\/P># resultaten plotten van het aggregeren van punten in vierkante bakken voor _één_ jaar (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> Hier is een voorbeeld van twee van de jaren in het resultaat:<\/P>
Vergelijking van gebinneerde gegevens voor twee verschillende jaren<\/span><\/span><\/P>We kunnen deze resultaten ook gebruiken om veranderingen in de tijd te berekenen voor resultaten zoals deze:<\/P>
<\/span> <\/P>
Conclusie<\/H3>Hopelijk is deze korte introductie over het verkennen van trends en hotspots nuttig geweest. We zullen aanvullende inhoud plaatsen om je op weg te helpen, dus kom terug op de Community voor meer! En laat ons weten welke onderwerpen je graag meer zou willen leren!<\/P>