Para ajudar a iniciar a Visualização Pública do ArcGIS GeoAnalytics for Microsoft Fabric, temos uma série de postagens no blog explorando a funcionalidade do GeoAnalytics for Fabric. Nesta postagem, exploraremos as capacidades de análise para explorar grandes conjuntos de dados pontuais a fim de calcular tendências e hotspots com o GeoAnalytics for Fabric.

Importar GeoAnalytics for Fabric
Começaremos com uma revisão sobre como importar o GeoAnalytics for Fabric e começar a trabalhar com ele. Para importar o GeoAnalytics for Fabric, você só precisa adicionar import geoanalytics_fabric em uma célula do seu notebook. Para mais informações sobre como habilitar a biblioteca, veja a documentação de Introdução. Também há exemplos nas postagens anteriores do blog em nossa série introdutória.
Dados
Para esta postagem, trabalharemos com um conjunto de dados públicos de segurança da cidade de Boston, MA do Azure open datasets. Este conjunto contém coordenadas de latitude e longitude para solicitações de serviços públicos de segurança em Boston.
# https://learn.microsoft.com/en-us/azure/open-datasets/dataset-boston-safety?tabs=pyspark
# Informações de acesso ao armazenamento Azure
blob_account_name = "azureopendatastorage"
blob_container_name = "citydatacontainer"
blob_relative_path = "Safety/Release/city=Boston"
blob_sas_token = r""
# Permitir que SPARK leia do 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('Caminho remoto do blob: ' + wasbs_path)
# Leitura parquet pelo SPARK
# usar a função ST_Point do GeoAnalytics for Fabric para criar uma geometria
df = spark.read.parquet(wasbs_path)\
.withColumn("geometry", ST.point("longitude", "latitude", 4326))
df.persist().count()
Este conjunto é bastante grande - mais de 24 milhões de registros! Com grandes conjuntos de dados, muitas vezes é difícil identificar visualmente padrões nos dados apenas olhando para eles.

O GeoAnalytics for Fabric pode facilitar a exploração desses padrões por meio da agregação e outras técnicas analíticas que exploraremos nesta postagem. Não só facilita ver os padrões dentro da experiência do seu notebook, como a agregação de dados é frequentemente um passo importante na preparação dos dados para exploração em ferramentas comuns de inteligência empresarial, como o Power BI.
Vamos começar com a agregação.
Agrupamento espacial para descobrir padrões e simplificar para visualização
É comum em conjuntos de dados pontuais ter dados suficientes para que os pontos no mapa se sobreponham e escondam padrões na distribuição. Isso acontece porque os pontos se sobrepõem tanto que você não consegue identificar visualmente a densidade - se todo o mapa estiver totalmente coberto com marcadores de dados, não há padrão além do mapa totalmente coberto.
A agregação espacial pode ser útil nesses casos para facilitar a identificação de padrões espaciais gerais em conjuntos de dados pontuais. A agregação espacial permite contar o número de pontos que caem em regiões geográficas discretas (por exemplo, quadrados, hexágonos, distritos escolares, setores censitários etc.) e então mapear as contagens dos pontos ou outros agregados dos atributos em cada um desses polígonos.
Além de identificar padrões espaciais agregando os dados, isso também ajuda na criação de conjuntos de dados para ferramentas BI, como Power BI para visualizar os dados mais facilmente em dashboards.
Como vimos no gráfico do nosso conjunto acima, realmente há muitos dados para conseguir ver claramente um padrão. Mesmo se ampliarmos bastante, ainda podemos ter dificuldade em ver padrões neste conjunto denso. Então, vamos explorar como o agrupamento espacial e a agregação podem ajudar.

Para ajudar a entender a distribuição, vamos agregar usando a ferramenta Aggregate Points no GeoAnalytics for Fabric. Aggregate Points resume pontos em polígonos provenientes de outros conjuntos ou bins (quadrados, hexagonais ou H3). As fronteiras dos polígonos ou bins são usadas para coletar os pontos dentro de cada área e usá-los para calcular estatísticas. O resultado sempre contém a contagem dos pontos dentro de cada área.
Observe que análises com bins hexagonais ou quadrados exigem que sua geometria de entrada tenha um sistema de coordenadas projetado. Para análise com bins H3, espera-se que sua geometria esteja no sistema World Geodetic System 1984 (SRID 4326). Mais informações sobre projeções e sistemas coordenados podem ser encontradas no conceito principal sobre Sistemas coordenados e transformações.
Se seus dados não estiverem em um sistema coordenado apropriado, a ferramenta Aggregate Points transformará sua entrada para o sistema requerido ou você pode transformar seus dados manualmente usando ST_Transform.
Criando bins
Com esse contexto esclarecido, vamos criar alguns bins quadrados. O exemplo abaixo usa a ferramenta Aggregate Points para dividir nossos dados em bins espaciais quadrados com lado de 0.1 milha.
# agrupar os dados
from geoanalytics_fabric.tools import AggregatePoints
# agregar pontos em bins quadrados
result_agg = AggregatePoints() \
.setBins(bin_size=0.1, bin_size_unit="Miles", bin_type="Square") \
.run(df)
Isto resulta em um novo DataFrame com geometrias dos bins e contagens das feições dentro do bin. Você também pode adicionar outros campos resumidos agregados ao criar os bins (por exemplo, valor mínimo, valor máximo, soma etc.).
A plotagem dos resultados da nossa agregação mostra um novo padrão onde podemos ver e entender mais facilmente a distribuição dos nossos dados.
Mapas comparando o conjunto original e os dados agrupados em bins quadrados de 0.1 milha
Ao agregar dados usando a ferramenta Aggregate Points, você também pode fatiar os dados baseando-se em tempos ao invés de agrupar todos os dados juntos. Isso permite comparações mais fáceis ao longo do tempo para observar padrões de mudança.
A criação dos bins com passo temporal requer que o tempo esteja habilitado no DataFrame de entrada (por exemplo, você tem uma coluna timestamp).
Por padrão, o fatiamento temporal é automaticamente alinhado em 1º de janeiro de 1970 e os passos são calculados a partir desse ponto. Isso pode ser ajustado se você quiser especificar um tempo para o início dos passos temporais (ao invés do padrão janeiro 1, 1970). Isso é feito usando um <\/SPAN>reference time<\/EM>. Um reference time pode ser uma data (por exemplo, 1 de janeiro de 2016) ou uma hora e data (por exemplo, 1 de janeiro de 2016, às 9:30 da manhã). Mais detalhes sobre time stepping podem ser encontrados na documentação do conceito principal para <\/SPAN>time stepping<\/A>.<\/P>Aqui está um exemplo de criação de um conjunto separado de bins para cada year<\/EM> nos dados de entrada. Isso nos permitirá olhar para os anos individuais ou a mudança ao longo do tempo (por exemplo, aumento absoluto ou percentual \/ diminuição no último ano). <\/P> <\/P># agregue pontos em bins quadrados - para cada 1 year nos dados. Por padrão, o intervalo anual começa em 1º de janeiro
# isso pode ser ajustado com o parâmetro 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> Como resultado, podemos olhar para anos individuais e fazer comparações. Para especificar o year ao realizar análise ou plotagem, filtramos usando as colunas step_start<\/FONT> ou step_end<\/FONT>.<\/P> <\/P># plotar resultados da agregação de pontos em bins quadrados para _um_ 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> Aqui está um exemplo de dois dos years no resultado:<\/P>
Comparing binned data for two different years<\/span><\/span><\/P>Também podemos usar esses resultados para calcular a mudança ao longo do tempo para resultados como este:<\/P>
<\/span> <\/P>
Conclusão<\/H3>Esperamos que este rápido guia sobre exploração de tendências e hotspots tenha sido útil. Publicaremos conteúdo adicional para ajudá-lo a começar, então volte à Comunidade para mais! E por favor, nos informe que tipo de coisas você gostaria de aprender mais!<\/P>