Memorandum über die Verwendung von Gremlin Python

Artikelinhalt

Ich habe versucht, Gremlin, eine GraphDB, in Python zu verwenden. Notieren Sie sich die Verwendung

Bibliotheksvorbereitung

Installieren Sie eine Bibliothek für Gremlin in Python

pip install gremlinpython

Implementierung

Bibliothek importieren

from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.process.strategies import *
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

Eine Verbindung herstellen

graph = Graph()

# Gremlin-Verbindung herstellen
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))

Übergeben Sie die Gremlin-Serverinformationen im ersten Argument von DriverRemoteConnection "G" wird im zweiten Argument übergeben, aber es ist nicht bekannt, worauf sich dieses "g" bezieht. Das folgende Protokoll wird ausgegeben, wenn der Server gestartet wird, und es scheint dieses "g" zu sein.

[INFO] ServerGremlinExecutor - A GraphTraversalSource is now bound to [g] with graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]

Ich habe das Gefühl, dass es mit einer Einstellungsdatei geändert werden kann, aber ich konnte es zu diesem Zeitpunkt noch nicht herausfinden.

Datenregistrierung

Registrieren Sie die Daten und versuchen Sie, die registrierten Daten zu erhalten

g.addV('tarouo').property('name', 'tarou').toSet()
g.addV('tarouo').property('name', 'kotarou').toSet()
name = g.V().has('name', 'tarou').valueMap().toList()
print(name)

Ergebnis

[{'name': ['tarou']}]

Das Akquisitionsergebnis wird als Diktat zurückgegeben. Der registrierte Name ist aus irgendeinem Grund im Listenformat Die Datenerfassung ist keine teilweise Übereinstimmung, sondern eine exakte Übereinstimmung

Eigenschaft hinzufügen

Fügen Sie den registrierten Daten Eigenschaften hinzu

1 Artikel hinzugefügt

tarou = g.V().has('name', 'tarou').toList()[0]
g.V(tarou).property('from', 'Tokyo').toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)

Ergebnis

{'name': ['tarou'], 'from': ['Tokyo']}

Fügen Sie mehrere Elemente hinzu

g.V(tarou).property('from', 'Tokyo').property('age', 20).toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)

Ergebnis

{'name': ['tarou'], 'from': ['Tokyo'], 'age': [20]}

Durch Verbinden von .property () können mehrere Elemente hinzugefügt werden.

aktualisieren

Es wird aktualisiert, wenn Sie eine Eigenschaft registrieren, die bereits mit einem anderen Wert registriert wurde.

g.V(tarou).property('from', 'Kanagawa').property('age', 30).toSet()
tarou = g.V(tarou).valueMap().toList()[0]
print(tarou)

Eigenschaft löschen

Ich habe das Gefühl, ich kann es schaffen, aber ich weiß nicht, wie ich es machen soll ... Ich werde es aktualisieren, wenn ich weiß, wie es geht.

Daten löschen

g.V().drop()
g.E().drop()
g.V().drop().iterate()
g.E().drop().iterate()

Ohne Iteration wird der erste gelöscht. Wenn Iteration vorhanden ist, werden alle gelöscht.

Kante hinzufügen

Fügen Sie Kanten zu Tarou und Kotarou hinzu

tarou = g.V().has('name', 'tarou').toList()[0]
kotarou = g.V().has('name', 'kotarou').toList()[0]
g.addE('follow').from_(tarou).to(kotarou).toSet()
edgeList = g.E().toList()
for edge in edgeList:
    print(edge)

Ergebnis

e[267][259-follow->261]

Ich konnte feststellen, dass ID259 und ID261 in einer folgenden Beziehung verbunden sind.

tarou = g.V().has('name', 'tarou').toList()[0]
kotarou = g.V().has('name', 'kotarou').toList()[0]
magotarou = g.V().has('name', 'magotarou').toList()[0]
g.addE('son').from_(tarou).to(kotarou).toSet()
g.addE('son').from_(kotarou).to(magotarou).toSet()
g.addE('grandchild').from_(tarou).to(magotarou).toSet()

Sie können eine Kante wie diese hinzufügen

e[298][288-son->290]
e[299][290-son->292]
e[300][288-grandchild->292]

Holen Sie sich Kanteninformationen

Holen Sie sich eine Liste (Wert) zu einem bestimmten Punkt

valueList = g.V(tarou).both().valueMap(True).toList()
for value in valueList:
    print(value)

Ergebnis

{<T.id: 1>: 498, <T.label: 4>: 'kotarou', 'name': ['kotarou']}
{<T.id: 1>: 500, <T.label: 4>: 'magotarou', 'name': ['magotarou']}

Ich konnte Informationen über Kotarou und Magotarou erhalten, die eine Beziehung zu Tarou haben.

Setzen Sie das Argument valueMap nicht

Wenn True nicht festgelegt ist, sind nur die Mindestdaten verfügbar.

{'name': ['kotarou']}
{'name': ['magotarou']}

Holen Sie sich eine Liste (Kante) zu einem bestimmten Punkt

g.V(tarou).bothE()
g.V(tarou).bothE().valueMap().toList()
g.V(tarou).bothE().valueMap(True).toList()

Ich werde versuchen, es auf drei Arten zu bekommen

 edge list 1..
e[597][587-son->589]
e[599][587-grandchild->591]
 edge list 2..
{}
{}
 edge list 3..
{<T.id: 1>: 597, <T.label: 4>: 'son'}
{<T.id: 1>: 599, <T.label: 4>: 'grandchild'}

Ich konnte es bekommen. Ich dachte, dass g.V () eine wertbezogene Operation ist, also fragte ich mich, ob g.E () kantenbezogene Daten erhalten könnte, aber ich konnte sie nicht gut erhalten.

abschließend

Ich habe eine Weile nachgeforscht, wie man Gremlin verwendet, und dachte, dass es für die Netzwerkanalyse verwendet werden könnte, aber ich hatte den Eindruck, dass es schwierig sein würde, ohne das Konzept von GraphDB zu verstehen. Ich werde den Artikel aktualisieren, wenn ich eine andere interessante Verwendung als den beschriebenen Inhalt finde.

Recommended Posts

Memorandum über die Verwendung von Gremlin Python
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
Ein Memorandum zur Verwendung von Keras 'keras.preprocessing.image
Verwendung von Django mit Google App Engine / Python
Python: So verwenden Sie Async mit
[Python] Verwendung der Pandas-Serie
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
Hinweise zur Verwendung von Pywinauto
Hinweise zur Verwendung von featuretools
Wie benutzt man Homebrew in Debian?
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
Verwendung der Python-API von OpenPose
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
Verwendung der Zip-Funktion von Python
[Python] Verwendung der Typetalk-API
Verwendung von MultiIndex (persönliches Memorandum)
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
[Python] Zusammenfassung der Verwendung von Pandas
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Wie man pydoc auf Python Interpreter liest
So installieren und verwenden Sie pandas_datareader [Python]
[Kivy] So installieren Sie Kivy unter Windows [Python]
Wie man Mecab, neologd-ipadic auf Colab verwendet
[Python] Verwendung von __command__, Funktionserklärung
[Python] Verwendung von import sys sys.argv
So verwenden Sie Google Assistant unter Windows 10
So löschen Sie Python 2.x auf einem Mac.
[Python] Organisieren der Verwendung für Anweisungen
[Python2.7] Zusammenfassung der Verwendung von unittest
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von __slots__ in der Python-Klasse
Installieren Sie Python auf xserver, um pip zu verwenden
Verwendung von "deque" für Python-Daten
Verwendung von Python zip und Aufzählung
[Python] Verstehen, wie rekursive Funktionen verwendet werden
Zusammenfassung der Verwendung der Python-Liste
Verwendung regulärer Ausdrücke in Python
[Python2.7] Zusammenfassung der Verwendung des Unterprozesses
Verwendung ist und == in Python
[Frage] Wie verwende ich plot_surface von Python?
So verwenden Sie Python in Pyenv unter MacOS mit PyCall
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data