SpoilerEste blog describe la funcionalidad de Pro 2.9 (no lanzado al momento de escribir) - ¡pregunta a tu representante de Esri sobre ArcGIS Knowledge!
Algunas cosas en tecnología de la información parecen ser ejemplos perennes de entregar datos, no información, y si vas a ser impulsado por datos es información lo que quieres. Mi ejemplo aquí es visualizar y analizar relaciones entre conjuntos de datos georelacionales, un espacio clave que ArcGIS habita y con el que siempre he tenido dificultades más allá de lo básico. Puedes aplicar joins y relates a capas del mapa pero estos parecen agotarse bastante rápido en términos de potencia y usabilidad, como cómo visualizar cardinalidad y cómo hacer consultas eficientes. Además, si tus conjuntos de datos son de diferentes fuentes se vuelve aún más difícil. He tomado desvíos hacia enfoques codificados pero aprendí que no escalan.
ArcGIS Data Interoperability y ArcGIS Knowledge al rescate!
¿Por qué esa combinación? Bueno, Data Interoperability en Pro 2.8+ incluye la versión Tech Preview del lector/escritor de base de datos grafo Esri Knowledge y resuelve el problema 'de todas las fuentes' para construir y mantener bases de datos grafo Knowledge. No solo es flexible el lector/escritor, también es rápido. Al momento de escribir, Knowledge aún está en construcción y estoy usando software alfa Pro 2.9, pero el tema encaja tan bien con ser impulsado por datos que no pude resistir.
Aquí hay algunos gráficos de mi trabajo ETL para poblar un grafo, los espacios de trabajo están en la descarga del post. El grafo que estoy construyendo es datos de propiedad, los nodos son centroides de títulos catastrales más otras entidades para propietarios y gravámenes (usualmente arrendamientos e hipotecas), con relaciones como 'posee' y 'grava'.
Cargando Entidades (Nodos)
Cargando Relaciones
Nodos Fuente de Propiedad
Hay más de 10 millones de entidades y más de 10 millones de relaciones en el grafo. Simplifiqué un poco mi modelo de datos para ignorar algunos detalles legales (existe algo llamado estate que permite relaciones más complejas entre títulos y propietarios) para obtener un grafo donde los puntos del título de propiedad (los puntos azules) tienen una o más participaciones sobre ellos y las participaciones tienen cero o más gravámenes. Los puntos del título son obviamente espaciales, los propietarios y gravámenes son tabulares. Aquí hay algunos conteos de características:
Modelo de Datos
Verás que la carga de datos fue en dos partes, primero entidades luego relaciones. Esto se debe a que las relaciones entre entidades se hacen usando campos GlobalID generados automáticamente, así que las entidades deben crearse primero, te harás una idea con los espacios de trabajo. Los GlobalIDs de las entidades se convierten en GlobalIDs origen y destino para las relaciones.
Los grafos viven en un Enterprise Portal, estoy usando Enterprise 10.9.1/Pro 2.9 como mi portal y cliente.
Hay innumerables consultas que podrías hacer a tu grafo, esto se facilita interactivamente usando ya sea algo llamado Link Chart o usando el lenguaje de consulta Cypher .
Primero un link chart simple. Mis datos realmente no son del tipo donde las conexiones se descubrirán frescamente interactivamente mediante exploración con link chart, todas las relaciones ya son conocidas, pero puedes seleccionar y agregar entidades a un link chart para investigar tus datos. Esta es mi primera incursión en Knowledge así que lo mantengo simple. Aquí está quién posee algunos títulos en algún lugar:
Link Chart Básico
No usé las herramientas interactivas para construir las entidades del gráfico, usé una 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
Esto encontró 5 títulos en un distrito específico gravados por un solo encumbrancee. Dejaré los link charts aquí, pero vienen con herramientas para poblarlos y son una gran forma de explorar conexiones.
¡Hay patrones mayores por descubrir! Por ejemplo ¿dónde están muchos títulos gravados?
Títulos sin gravamen (verde) y con gravamen (rojo)
Si estuviera haciendo esto en serio podría unir variables demográficas a mis puntos del título antes de cargarlos en mi grafo, lo que me permitiría analizar segmentos poblacionales.
Hay cosas interesantes por aprender sin estudiar demografía. Una ventaja de las bases grafo es que son rápidas para consultar estadísticas agregadas comparado con sentencias SQL equivalentes, por ejemplo veamos la distribución del mercado del encumbrancee (institución financiera o arrendador).
Participaciones por Institución Encumbrancee
Este resultado salió de mi grafo en unos segundos usando la consulta que puedes ver en el control:
match (e:Encumbrance) where e.name is not null return e.name, count(*) as book order by book desc
Los datos del titular del gravamen tienen una larga cola, digamos que nos interesan los grandes prestamistas comerciales que diré tienen 10,000 o más gravámenes y son empresas.
Grandes Prestamistas
Ese resumen es sobre todo el conjunto de datos, notarás que tres instituciones están muy parejas en el mercado, luego la participación cae rápidamente y hay 12 que cumplen mi criterio. ¿Hay algo diferente sobre mi área de estudio? Hice una consulta para averiguarlo:
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
Aquí está el mapa y un gráfico:
El Panorama del Préstamo
Puedo ser capaz de argumentar para puntos calientes donde algunas instituciones están funcionando mejor que otras, pero es el gráfico lo que resulta interesante, las participaciones de las cuatro principales instituciones no siguen la distribución nacional.<\/P>
Podemos analizar las participaciones gravadas en un área de estudio:<\/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>
Participaciones<\/span><\/span><\/P> <\/P>O una consulta relacionada, ¿qué títulos no agrícolas están gravados por los grandes prestamistas?<\/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>Me apresuro a añadir que esto aún capturó muchas granjas ya que el modelo de datos realmente no soporta consultas de clasificación de uso del suelo, pero por supuesto si tuviera áreas de uso del suelo podría hacer una superposición de puntos de título de antemano y hacerlo de verdad.<\/P> <\/P>
Gravámenes no agrícolas por banco<\/span><\/span><\/P>Así que mientras escribo estoy adelantado a la versión requerida del software, espero que esto les dé una idea del arte de lo posible con ArcGIS Knowledge<\/STRONG> para hacer que consultar relaciones complejas en big data sea simple y rápido. Esta fue mi primera incursión en Knowledge y aprendí mucho, incluyendo los conceptos básicos del lenguaje de consulta gráfica OpenCypher<\/STRONG> que ven arriba. Como digo en la alerta de spoiler, contacten a su representante de Esri sobre los planes de lanzamiento (Pro 2.9) y si están realmente interesados la Comunidad Early Adopter en Pro 2.8.<\/P> <\/P> <\/P>