SpoilerDeze blog beschrijft Pro 2.9 (nog niet uitgebracht op het moment van schrijven) functionaliteit - vraag uw Esri-vertegenwoordiger naar ArcGIS Knowledge!
Sommige dingen in informatietechnologie lijken eeuwige voorbeelden te zijn van data leveren, geen informatie, en als je data-gedreven wilt zijn, is het informatie dat je wilt. Mijn voorbeeld hier is visualiseren en analyseren van relaties tussen georelational datasets, een belangrijk gebied waarin ArcGIS actief is en iets waar ik altijd moeite mee heb gehad buiten de basis. Je kunt joins en relates toepassen op kaartlagen, maar deze lijken vrij snel hun kracht en bruikbaarheid te verliezen, zoals hoe je cardinaliteit visualiseert en hoe je performante queries uitvoert. Bovendien wordt het nog moeilijker als je datasets uit verschillende bronnen komen. Ik heb omwegen via gecodeerde benaderingen genomen, maar geleerd dat die niet schaalbaar zijn.
ArcGIS Data Interoperability en ArcGIS Knowledge komen te hulp!
Hoe komt die combinatie? Nou, Data Interoperability in Pro 2.8+ bevat de Tech Preview-versie van de Esri Knowledge graph database reader/writer en lost het 'all-source' probleem op voor het bouwen en onderhouden van Knowledge graph databases. Niet alleen is de reader/writer flexibel, hij is ook snel. Op het moment van schrijven is Knowledge nog in ontwikkeling en gebruik ik alpha Pro 2.9 software, maar het onderwerp past zo goed bij data-gedreven zijn dat ik het niet kon weerstaan.
Hier zijn enkele afbeeldingen van mijn ETL-werk om een grafiek te vullen, de werkruimtes staan in de post download. De grafiek die ik bouw is eigendomsdata, de knooppunten zijn centroiden van kadastrale titels plus andere entiteiten voor eigenaren en beperkingen (meestal huurcontracten en hypotheken), met relaties zoals 'owns' en 'encumbers'.
Entiteiten laden (Knooppunten)
Relaties laden
Bron Eigendom Knooppunten
Er zijn meer dan 10 miljoen entiteiten en meer dan 10 miljoen relaties in de grafiek. Ik heb mijn datamodel een beetje vereenvoudigd door sommige juridische details te negeren (er bestaat iets genaamd een estate dat complexere relaties tussen titels en eigenaren toestaat) om mij een grafiek te geven waarbij eigendomstitelpuntjes (de blauwe stippen) één of meer eigendomsbelangen over zich hebben en eigendomsbelangen nul of meer beperkingen hebben. Titelpunten zijn uiteraard ruimtelijk, eigenaren en beperkingen zijn tabulair. Hier zijn enkele feature-aantallen:
Datamodel
Je zult zien dat het laden van data in twee delen gebeurde, eerst entiteiten dan relaties. Dit komt omdat entiteitsrelaties worden gemaakt met automatisch gegenereerde GlobalID-velden, dus entiteiten moeten eerst worden aangemaakt, je krijgt een idee van de werkruimtes. Entiteit GlobalIDs worden relatie oorsprong- en bestemming GlobalIDs.
Grafieken leven in een Enterprise Portal, ik gebruik Enterprise 10.9.1/Pro 2.9 als mijn portal en client.
Er zijn ontelbare queries die je op je grafiek kunt uitvoeren, dit wordt interactief gefaciliteerd met behulp van ofwel iets genaamd een Link Chart of met de Cypher querytaal.
Eerst een eenvoudige link chart. Mijn data is niet echt het type waarbij verbindingen interactief via link chart exploratie nieuw ontdekt zullen worden, alle relaties zijn al bekend, maar je kunt entiteiten selecteren en toevoegen aan een link chart om je data te onderzoeken. Dit is mijn eerste verkenning in Knowledge dus ik houd het simpel. Hier is wie sommige titels ergens bezit:
Basis Link Chart
Ik heb de interactieve tools niet gebruikt om de chart-entiteiten te bouwen, ik gebruikte een Cypher-query:
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
Dit vond 5 titels in een specifiek landdistrict die bezwaard zijn door één enkele encumbrancee. Ik laat link charts hier achter me, maar ze worden geleverd met tools om ze te vullen en zijn een geweldige manier om verbindingen te verkennen.
Er zijn grotere patronen te ontdekken! Bijvoorbeeld waar titels veel bezwaard zijn?
Onbezwaarde (groen) en Bezwaarde (rood) titels
Als ik dit serieus zou doen zou ik demografische variabelen aan mijn titelpunten koppelen voordat ik ze in mijn grafiek laad, wat me zou laten bevolkingssegmenten analyseren.
Er zijn interessante dingen te leren zonder demografie te bestuderen. Een voordeel van graph databases is dat ze snel geaggregeerde statistieken kunnen opvragen vergeleken met equivalente SQL-statements, bijvoorbeeld laten we kijken naar de verdeling van encumbrancee (financiële instelling of verhuurder) marktaandeel.
Encumbrance Holdings per Instelling
Dit resultaat kwam binnen enkele seconden uit mijn grafiek met behulp van de query die je in de controle ziet:
match (e:Encumbrance) where e.name is not null return e.name, count(*) as book order by book desc
De encumbrance houder data heeft een lange staart, laten we zeggen dat we geïnteresseerd zijn in de grote commerciële kredietverstrekkers die ik zal zeggen minstens 10.000 encumbrances hebben en bedrijven zijn.
Grote Kredietverstrekkers
Die samenvatting geldt voor de gehele dataset, je zult merken dat drie instellingen nek-aan-nek liggen in de markt, daarna daalt het marktaandeel snel en er zijn er 12 die aan mijn criteria voldoen. Is er iets anders aan mijn studiegebied? Ik maakte een query om dat uit te zoeken:
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
Hier is de kaart en een diagram:
Het Kredietlandschap
Mogelijk kan ik een zaak maken voor hot spots waar sommige instellingen het beter doen dan andere, maar het is de grafiek die interessant is, de holdings van de top vier instellingen volgen niet de nationale verdeling.<\/P>
We kunnen kijken naar bezwaarde holdings in een studiegebied:<\/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>
Holdings<\/span><\/span><\/P> <\/P>Of een gerelateerde query, welke niet-landbouwtitels zijn bezwaard door de grote kredietverstrekkers?<\/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>Ik haast me toe te voegen dat dit nog steeds veel boerderijen heeft gevangen omdat het datamodel landgebruiksclassificatie-queries niet echt ondersteunt, maar natuurlijk als ik landgebruiksgebieden heb, kan ik vooraf een overlay van titelpunten maken en het echt doen.<\/P> <\/P>
Non-farm Encumbrances by Bank<\/span><\/span><\/P>Dus terwijl ik dit schrijf ben ik voor op de vereiste software-release hoop ik dat dit je een idee geeft van de kunst van het mogelijke met ArcGIS Knowledge<\/STRONG> om het opvragen van complexe relaties in big data eenvoudig en snel te maken. Dit was mijn eerste verkenning in Knowledge en ik heb veel geleerd, inclusief de basis van de OpenCypher<\/STRONG> graph query-taal die je hierboven ziet. Zoals ik zeg in de spoiler alert, neem contact op met je Esri-vertegenwoordiger over releaseplannen (Pro 2.9) en als je echt enthousiast bent met de Early Adopter Community bij Pro 2.8.<\/P> <\/P> <\/P>