Een graaf visualiseren in Power BI met Python, Cosmos DB & Gremlin Query’s

Sinds kort is het mogelijk om netwerkgrafen vanuit Azure Cosmos DB te visualiseren in Power BI. Voorheen waren complexere en minder toegankelijke tools als Gephi nodig om netwerk analyses te kunnen doen. Deze wijze van visualisatie geeft netwerkrelaties duidelijk weer en biedt handige filter en zoekmogelijkheden. Hoewel zo’n netwerk eigenlijk pas interessant wordt bij een significante grootte, zal deze blog vooral de techniek toelichten en focussen op een eerste mini graaf.

In deze blog maken we gebruik van de volgende componenten/technieken.

Azure Cosmos DB

azure-cosmos-db-icon

Azure Cosmos DB is de multimodel-databaseservice van Microsoft. Dit wil zeggen dat er naast standaard database modellen ook gebruik gemaakt kan worden van o.a. document- of tabelopslag, of zoals in dit geval, het opslaan van grafen.

Gremlin API

gremlin-running

De Gremlin API wordt gebruikt om gebruikt om query’s uit te voeren naar de graafdatabase in Cosmos DB. Met deze query taal kunnen zowel gegevens worden opgeslagen als opgevraagd uit de database.

Power BI

Power BI 3

Power BI is de interactieve visualisatietool van Microsoft, waaraan in snel tempo nieuwe functie’s worden toegevoegd. Zo ook de connectie naar Cosmos DB en de netwerkvisualisatie welke gebruikt worden in deze blog.

Let’s start

Allereerst is er een database nodig om de graaf in op te slaan. Zoals beschreven is er gekozen voor een Cosmos DB in Azure. Hiervoor is vanzelfsprekend een Azure account nodig, welke hier gratis aangemaakt kan worden. Kies bij het maken van de database voor “Gremlin” als API, zodat de graaf opgebouwd kan worden middels Gremlin Query’s.

20170630_Create_Account_zpst0nwkker

Vervolgens kan er in deze Cosmos database een nieuwe graaf worden aangemaakt.

20170630_Database_Collection01_zpsqloeqhad

Nu er een lege graaf is, kan er via een Python script een connectie worden gemaakt naar de Cosmos DB. Door de juiste keys toe te voegen aan het onderstaande script, kunnen de eerste Gremlin query’s naar de API worden verstuurd. Hierbij wordt gebruikt gemaakt van de gremlin_python library.

from gremlin_python.driver import client, serializer
client = client.Client('wss://graph01.gremlin.cosmosdb.azure.com:443/', 'g',
username="/dbs/db01/colls/test01",
password={password},
message_serializer=serializer.GraphSONMessageSerializer()
)
querylist = ["g.addV('person').property('id', 'Sander').property('function', 'Young Professional')",
             "g.addV('person').property('id', 'Floris').property('function', 'Young Professional')",
             "g.addV('person').property('id', 'Berend').property('function', 'Young Professional')",
             "g.addV('person').property('id', 'Richard').property('function', 'Microsoft Practice Lead')",
             "g.addV('skill').property('id', 'Python')",
             "g.addV('skill').property('id', 'Azure')",
             "g.addV('skill').property('id', 'PowerBI')",
             "g.addV('skill').property('id', 'SQL')",
             "g.addV('skill').property('id', 'PHP')",
             "g.addV('skill').property('id', 'R')",
             "g.V('Berend').addE('beheerst').to(g.V('R'))",
             "g.V('Berend').addE('beheerst').to(g.V('Azure'))",
             "g.V('Floris').addE('beheerst').to(g.V('Azure'))",
             "g.V('Floris').addE('beheerst').to(g.V('PowerBI'))",
             "g.V('Sander').addE('beheerst').to(g.V('Python'))",
             "g.V('Sander').addE('beheerst').to(g.V('Azure'))",
             "g.V('Sander').addE('beheerst').to(g.V('SQL'))",
             "g.V('Richard').addE('beheerst').to(g.V('PHP'))",
             "g.V('Richard').addE('beheerst').to(g.V('Azure'))",
             "g.V('Richard').addE('beheerst').to(g.V('SQL'))"]

for query in querylist:
     client.submitAsync(query)

Indien alles goed is gegaan is nu een eerste mini graaf gecreëerd met twintig Gremlin Query’s. Nu zijn dit natuurlijk de meest basic query’s, meer over deze query taal is hier te vinden. De gemaakte graaf is nu terug te vinden in Data Explorer binnen Azure Cosmos DB.

mini graaf

Vervolgens kan er in Power BI een connectie worden gemaakt naar Azure Cosmos DB. De werking van deze connectie kan in de toekomst nog veranderen omdat het om een preview versie gaat. Dit is uiteraard iets om rekening mee te houden.

cosmos connection

In de Query editor van Power BI dienen vervolgens de de kolommen uitgeklapt te worden om te beschikken over de benodigde data.

power-bi-expand-data.png

Na dat deze veranderingen zijn toegepast, kan een netwerk visualisatie worden geselecteerd in Power BI. In de Power BI Visual Marketplace zijn verschillende netwerk visuals beschikbaar, waarvan voor een aantal een betaalde licentie benodigd is. De Network Navigator Chart biedt de meeste opties voor gratis visualisatie van netwerken.

power-bi-marketplace.png

Wanneer de juiste velden worden ingesteld voor de Source Nodes en Target Nodes, zal een eerste versie van de graaf verschijnen. De gekozen visual biedt verder opties om de grootte en kleur van zowel de nodes als relaties afhankelijk te maken van bepaalde waarden in de data. Verder is onder andere de gewenste afstand tussen nodes en de hoeveelheid clustervorming in te stellen.

KLIK HIER VOOR EEN VOORBEELD!

And that’s it! Een simpele graaf gevisualiseerd in Power BI. Binnen Inergy gebruiken we deze techniek om kennis binnen onze snel groeiende organisatie inzichtelijk te maken. Meer over deze Inergy Kennisgraaf binnenkort op deze blog!

Geef een reactie

Gelieve met een van deze methodes in te loggen om je reactie te plaatsen:

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit /  Bijwerken )

Google photo

Je reageert onder je Google account. Log uit /  Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit /  Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit /  Bijwerken )

Verbinden met %s