Para ayudar a iniciar la Vista Pública previa de ArcGIS GeoAnalytics for Microsoft Fabric, tenemos una serie de publicaciones en el blog que exploran la funcionalidad de GeoAnalytics for Fabric. En esta publicación, exploraremos las capacidades de análisis para explorar grandes conjuntos de datos puntuales con el fin de calcular tendencias y puntos críticos con GeoAnalytics for Fabric.

Importar GeoAnalytics for Fabric
Comenzaremos con un repaso sobre cómo importar GeoAnalytics for Fabric y comenzar a trabajar con él. Para importar GeoAnalytics for Fabric solo necesitas agregar import geoanalytics_fabric a una celda en tu notebook. Para más información sobre cómo habilitar la biblioteca, consulta la documentación para comenzar. También hay ejemplos en las publicaciones anteriores del blog en nuestra serie introductoria.
Datos
Para esta publicación, trabajaremos con un conjunto de datos públicos de seguridad de la ciudad de Boston, MA de los conjuntos de datos abiertos de Azure. Este conjunto contiene coordenadas de latitud y longitud para solicitudes de servicios de seguridad pública en Boston.
# https://learn.microsoft.com/en-us/azure/open-datasets/dataset-boston-safety?tabs=pyspark
# Información de acceso al almacenamiento Azure
blob_account_name = "azureopendatastorage"
blob_container_name = "citydatacontainer"
blob_relative_path = "Safety/Release/city=Boston"
blob_sas_token = r""
# Permitir que SPARK lea desde Blob remotamente
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('Ruta remota del blob: ' + wasbs_path)
# Lectura parquet con SPARK
# usar la función ST_Point de GeoAnalytics for Fabric para crear una geometría
df = spark.read.parquet(wasbs_path)\
.withColumn("geometry", ST.point("longitude", "latitude", 4326))
df.persist().count()
Este conjunto es bastante grande - ¡más de 24 millones de registros! Con conjuntos grandes, a menudo es difícil identificar visualmente patrones en los datos solo mirando los datos.

GeoAnalytics for Fabric puede facilitar la exploración de estos patrones mediante agregación y otras técnicas analíticas que exploraremos en esta publicación. No solo facilita ver los patrones dentro de tu experiencia en el notebook, sino que la agregación de datos es a menudo un paso importante para preparar datos para exploración en herramientas comunes de inteligencia empresarial, como Power BI.
Comencemos con la agregación.
Agrupamiento espacial para descubrir patrones y simplificar la visualización
Es común que con conjuntos puntuales haya suficientes datos que los puntos en el mapa se superpongan y oculten patrones en la distribución. Esto sucede porque los puntos se superponen tanto que no puedes identificar visualmente la densidad - si todo el mapa está completamente cubierto con marcadores, no hay patrón más que un mapa completamente cubierto.
La agregación espacial puede ser útil en estos casos para facilitar la identificación de patrones espaciales generales en conjuntos puntuales. La agregación espacial permite contar el número de puntos que caen dentro de regiones geográficas discretas (por ejemplo, cuadrados, hexágonos, distritos escolares, sectores censales, etc.) y luego mapear los conteos de puntos u otros agregados de atributos dentro de cada uno de estos polígonos.
Además de identificar patrones espaciales agregando los datos, esto también ayuda a crear conjuntos para herramientas BI, como Power BI para visualizar más fácilmente los datos en paneles.
Como vimos en el gráfico de nuestro conjunto arriba, realmente hay demasiados datos para poder ver claramente un patrón. Incluso si hacemos zoom bastante cerca, aún podríamos tener problemas para ver patrones en este conjunto denso. Así que exploremos cómo el agrupamiento espacial y la agregación pueden ayudar.

Para ayudar a entender la distribución, agregaremos usando la herramienta Aggregate Points en GeoAnalytics for Fabric. Aggregate Points resume puntos en polígonos provenientes de otros conjuntos o bins (cuadrados, hexagonales o H3). Los límites de los polígonos o bins se usan para recolectar los puntos dentro de cada área y calcular estadísticas. El resultado siempre contiene el conteo de puntos dentro del área.
Tenga en cuenta que el análisis con bins hexagonales o cuadrados requiere que su geometría tenga un sistema coordenado proyectado. Para análisis con bins H3, se espera que su geometría esté en el sistema World Geodetic System 1984 (SRID 4326). Más información sobre proyecciones y sistemas coordenados puede encontrarse en el concepto central sobre Sistemas coordenados y transformaciones.
Si sus datos no están en un sistema adecuado, la herramienta Aggregate Points transformará su entrada al sistema requerido o puede transformar sus datos usted mismo usando ST_Transform.
Creando bins
Con ese contexto claro, creemos algunos bins cuadrados. El ejemplo siguiente usa la herramienta Aggregate Points para dividir nuestros datos en bins espaciales cuadrados con lados de 0.1 millas.
# agrupar los datos
from geoanalytics_fabric.tools import AggregatePoints
# agregar puntos en bins cuadrados
result_agg = AggregatePoints() \
.setBins(bin_size=0.1, bin_size_unit="Miles", bin_type="Square") \
.run(df)
Esto resulta en un nuevo DataFrame con geometrías bin y conteos para las características dentro del bin. También puedes agregar otros campos resumen agregados al crear los bins (por ejemplo, valor mínimo, máximo, suma, etc.).
Graficar los resultados muestra un nuevo patrón donde podemos ver y entender más fácilmente la distribución.
Mapas comparando el conjunto original y los datos agrupados en bins cuadrados de 0.1 millas
Al agregar datos usando Aggregate Points también puedes segmentar los datos basándote en tiempos en lugar de agrupar todos juntos. Esto permite comparaciones más fáciles a lo largo del tiempo para observar patrones de cambio.
Agrupar por pasos temporales requiere que el tiempo esté habilitado en el DataFrame (por ejemplo, tener una columna timestamp).
Por defecto, el segmentado temporal se alinea automáticamente al 1° de enero de 1970 y los pasos se calculan desde ese punto. Esto puede ajustarse si deseas especificar un tiempo para que comiencen los pasos temporales (en lugar del predeterminado enero 1, 1970). Esto se hace usando un <\/SPAN>reference time<\/EM>. Un reference time puede ser una fecha (por ejemplo, 1 de enero de 2016) o una hora y fecha (por ejemplo, 1 de enero de 2016, a las 9:30 a.m.). Más detalles sobre time stepping se pueden encontrar en la documentación del concepto central para <\/SPAN>time stepping<\/A>.<\/P>Aquí hay un ejemplo de cómo crear un conjunto separado de bins para cada year<\/EM> en los datos de entrada. Esto nos permitirá observar los años individuales o el cambio a lo largo del tiempo (por ejemplo, aumento absoluto o porcentual o disminución durante el último year). <\/P> <\/P># aggregate points into square bins - for every 1 year in the data. By default the yearly interval starts at January 1
# this can be adjusted with the reference_time parameter 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> Como resultado, podemos observar years individuales y hacer comparaciones. Para especificar el year al realizar análisis o graficar filtramos usando las columnas step_start<\/FONT> o step_end<\/FONT>.<\/P> <\/P># plot results from aggregating points into square bins for _one_ year (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> Aquí hay un ejemplo de dos de los years en el resultado:<\/P>
Comparing binned data for two different years<\/span><\/span><\/P>También podemos usar estos resultados para calcular el cambio a lo largo del tiempo para resultados como este:<\/P>
<\/span> <\/P>
Conclusión<\/H3>Esperamos que esta breve introducción sobre cómo explorar tendencias y hotspots haya sido útil. Publicaremos contenido adicional para ayudarte a comenzar, así que vuelve a consultar en la Comunidad para más información! Y por favor háganos saber qué tipo de cosas le gustaría aprender más!<\/P>