SpoilerEste blog descreve a funcionalidade do Pro 2.9 (não lançado na data da escrita) - pergunte ao seu representante Esri sobre ArcGIS Knowledge!
Algumas coisas em tecnologia da informação parecem ser exemplos perenes de entregar dados, não informação, e se você vai ser orientado por dados, é informação que você quer. Meu exemplo aqui é visualizar e analisar relacionamentos entre conjuntos de dados georelacionais, um espaço chave que o ArcGIS habita e algo com que sempre tive dificuldades além do básico. Você pode aplicar joins e relates a camadas de mapa, mas eles parecem perder força rapidamente em termos de poder e usabilidade, como visualizar cardinalidade e como fazer consultas performáticas. Além disso, se seus conjuntos de dados são de fontes diferentes, fica ainda mais difícil. Eu fiz desvios para abordagens codificadas, mas aprendi que elas não escalam.
ArcGIS Data Interoperability e ArcGIS Knowledge para o resgate!
Por que essa combinação? Bem, Data Interoperability no Pro 2.8+ inclui a versão Tech Preview do Esri Knowledge graph database reader/writer e resolve o problema 'todas as fontes' para construir e manter bancos de dados Knowledge graph. Não só o reader/writer é flexível, como também é rápido. No momento da escrita, Knowledge ainda está em construção e estou usando o software alpha Pro 2.9, mas o tema é tão adequado para ser orientado por dados que não pude resistir.
Aqui estão alguns gráficos do meu trabalho ETL para popular um grafo, os workspaces estão no download do post. O grafo que estou construindo é de dados de propriedade, os nós são centróides de títulos cadastrais mais outras entidades para proprietários e ônus (geralmente arrendamentos e hipotecas), com relacionamentos como 'possui' e 'ônus'.
Carregando Entidades (Nós)
Carregando Relacionamentos
Nós de Propriedade Fonte
Existem mais de 10 milhões de entidades e mais de 10 milhões de relacionamentos no grafo. Simplifiquei meu modelo de dados um pouco para ignorar alguns detalhes legais (existe algo chamado estate que permite relacionamentos mais complexos entre títulos e proprietários) para me dar um grafo onde pontos de título de propriedade (os pontos azuis) têm uma ou mais participações acionárias sobre eles e as participações acionárias têm zero ou mais ônus. Pontos de título são obviamente espaciais, proprietários e ônus são tabulares. Aqui estão algumas contagens de feições:
Modelo de Dados
Você verá que a carga dos dados foi em duas partes, primeiro entidades depois relacionamentos. Isso porque os relacionamentos das entidades são feitos usando campos GlobalID gerados automaticamente, então as entidades precisam ser criadas primeiro, você entenderá pelos workspaces. Os GlobalIDs das entidades tornam-se GlobalIDs origem e destino dos relacionamentos.
Grafos vivem em um Enterprise Portal, estou usando Enterprise 10.9.1/Pro 2.9 como meu portal e cliente.
Existem inúmeras consultas que você pode fazer no seu grafo, isso é facilitado interativamente usando algo chamado Link Chart ou usando a linguagem de consulta Cypher .
Primeiro um link chart simples. Meus dados não são realmente do tipo onde conexões serão descobertas interativamente via exploração do link chart, todos os relacionamentos já são conhecidos, mas você pode selecionar e adicionar entidades a um link chart para investigar seus dados. Esta é minha primeira incursão no Knowledge então estou mantendo simples. Aqui está quem possui alguns títulos em algum lugar:
Link Chart Básico
Eu não usei as ferramentas interativas para construir as entidades do gráfico, usei uma consulta Cypher:
match (ee:Encumbrancee {name:'Her Majesty The Queen'})-[oe:owns_encumbrance]-(e:Encumbrance)-[he:has_encumbrance]-(t:Title {land_district:'Otago'}) return ee,oe,e,he,t limit 5
Isto encontrou 5 títulos em um distrito fundiário específico onerados por um único encumbrancee. Vou deixar os link charts para trás neste ponto, mas eles vêm com ferramentas para populá-los e são uma ótima maneira de explorar conexões.
Existem padrões maiores para descobrir! Por exemplo, onde os títulos estão muito onerados?
Títulos Não Onerados (verde) e Onerados (vermelho)
Se eu estivesse fazendo isso a sério, poderia juntar variáveis demográficas aos meus pontos de título antes de carregá-los no meu grafo, o que me permitiria analisar segmentos populacionais.
Há coisas interessantes para aprender sem estudar demografia. Uma vantagem dos bancos de dados grafo é que eles são rápidos para consultar estatísticas agregadas comparado a declarações SQL equivalentes; por exemplo, vamos olhar a distribuição da participação no mercado dos encumbrancees (instituição financeira ou locador).
Participações em Ônus por Instituição
Este resultado saiu do meu grafo em alguns segundos usando a consulta que você pode ver no controle:
match (e:Encumbrance) where e.name is not null return e.name, count(*) as book order by book desc
Os dados dos detentores dos ônus têm uma longa cauda; digamos que estamos interessados nos grandes credores comerciais que direi terem 10.000 ou mais ônus e são empresas.
Grandes Credores
Esse resumo é sobre todo o conjunto de dados; você notará que três instituições estão empatadas no mercado, depois a participação cai rapidamente e há 12 que passam no meu critério. Há algo diferente na minha área de estudo? Fiz uma consulta para descobrir:
match (e:Encumbrance)
with e.name as lender , count(*) as book where book > 10000 and lender contains 'Limited'
with collect(lender) as biglenders
match (t:Title {land_district:'Otago'})-[:has_encumbrance]-(e:Encumbrance) where e.name in biglenders
return t, e
Aqui está o mapa e um gráfico:
O Panorama dos Empréstimos
Pode ser que eu consiga apresentar um caso para pontos críticos onde algumas instituições estão se saindo melhor que outras, mas é o gráfico que é interessante, as participações das quatro principais instituições não estão seguindo a distribuição nacional.<\/P>
Podemos analisar participações oneradas em uma área de estudo:<\/P>
match (o:Owner)-[:has_owner]-(t:Title {land_district:'Otago'})-[:has_encumbrance]-(e:Encumbrance) where e.name contains 'Limited'<\/STRONG>
with o.prime_other_names + ' ' + o.prime_surname as owner, o.corporate_name as company, count(*) as holdings<\/STRONG>
return owner, company,holdings order by holdings desc<\/STRONG><\/P> <\/P>
Participações<\/span><\/span><\/P> <\/P>Ou uma consulta relacionada, quais títulos não agrícolas estão onerados pelos grandes credores?<\/P>match (e:Encumbrance)<\/STRONG>
with e.name as lender , count(*) as book where book > 10000 and lender contains 'Limited'<\/STRONG>
with collect(lender) as biglenders<\/STRONG>
match (t:Title {land_district:'Otago'})-[:has_encumbrance]-(e:Encumbrance)<\/STRONG>
where e.name in biglenders<\/STRONG>
with t,e<\/STRONG>
match (o:Owner)-[:has_owner]-(t)-[:has_encumbrance]-(e)<\/STRONG>
where not (o.corporate_name contains 'Farm' or o.corporate_name contains 'Pasture')<\/STRONG>
return o,t,e<\/STRONG><\/P>Apressadamente adiciono que isso ainda capturou muitas fazendas pois o modelo de dados realmente não suporta consultas de classificação de uso da terra, mas claro que se eu tiver áreas de uso da terra eu poderia fazer uma sobreposição dos pontos dos títulos antes e fazer isso de verdade.<\/P> <\/P>
Onerações não agrícolas por Banco<\/span><\/span><\/P>Então, enquanto escrevo estou adiantado em relação ao lançamento do software necessário, espero que isso lhe dê uma ideia da arte do possível com ArcGIS Knowledge<\/STRONG> para tornar a consulta de relacionamentos complexos em big data simples e rápida. Esta foi minha primeira incursão no Knowledge e aprendi muito, incluindo o básico da linguagem de consulta de grafos OpenCypher<\/STRONG> que você vê acima. Como digo no alerta de spoiler, entre em contato com seu representante Esri sobre os planos de lançamento (Pro 2.9) e se estiver realmente interessado na Early Adopter Community no Pro 2.8.<\/P> <\/P> <\/P>