Mémorandum sur l'utilisation du python gremlin

Contenu de l'article

J'ai essayé d'utiliser Gremlin, qui est un GraphDB, en Python. Notez comment utiliser

Préparation de la bibliothèque

Installer une bibliothèque pour gérer Gremlin en Python

pip install gremlinpython

la mise en oeuvre

Importer la bibliothèque

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

Créer une connexion

graph = Graph()

# Créer une connexion Gremlin
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))

Passez les informations du serveur Gremlin dans le premier argument de DriverRemoteConnection "G" est passé dans le deuxième argument, mais on ne sait pas à quoi se réfère ce "g". Le journal suivant est généré lorsque le serveur démarre, et il semble être ce "g".

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

Je pense que cela peut être changé avec un fichier de configuration, mais je n'ai pas été en mesure de le savoir jusqu'à présent à ce stade.

Enregistrement des données

Enregistrez les données et essayez d'obtenir les données enregistrées

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

résultat

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

Le résultat de l'acquisition est renvoyé sous forme de dict. Le nom enregistré est au format liste pour une raison quelconque L'acquisition de données n'est pas une correspondance partielle mais une correspondance exacte

Ajouter une propriété

Ajouter des propriétés aux données enregistrées

1 élément ajouté

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

résultat

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

Ajouter plusieurs éléments

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

résultat

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

Plusieurs éléments peuvent être ajoutés en connectant .property ()

mise à jour

Il sera mis à jour si vous enregistrez une propriété qui a déjà été enregistrée avec une valeur différente.

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

Supprimer la propriété

Je sens que je peux le faire, mais je ne sais pas comment le faire ... Je le mettrai à jour quand je saurai comment le faire.

Suprimmer les données

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

Sans itération, le premier sera supprimé. Si iterate est présent, tout sera supprimé.

Ajouter un bord

Ajouter des bords au tarou et au kotarou

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)

résultat

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

J'ai pu obtenir que ID259 et ID261 sont connectés dans une relation de suivi.

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()

Vous pouvez ajouter un bord comme celui-ci

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

Obtenir des informations sur les bords

Obtenir une liste (valeur) liée à un point spécifique

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

résultat

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

J'ai pu obtenir des informations sur les kotarou et magotarou qui ont une relation avec le tarou.

Ne définissez pas l'argument valueMap

Si True n'est pas défini, seules les données minimales seront disponibles.

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

Obtenir une liste (arête) liée à un point spécifique

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

J'essaierai de l'obtenir de trois manières

 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'}

J'ai pu l'obtenir. Je pensais que g.V () était une opération liée à la valeur, alors je me suis demandé si g.E () pouvait obtenir des données liées aux bords, mais je ne pouvais pas bien l'obtenir.

en conclusion

J'étais en train de rechercher comment utiliser Gremlin pendant un moment, pensant qu'il pouvait être utilisé pour l'analyse de réseau, mais j'ai eu l'impression que ce serait difficile sans comprendre le concept de GraphDB. Je mettrai à jour l'article si je trouve une utilisation intéressante autre que le contenu décrit.

Recommended Posts

Mémorandum sur l'utilisation du python gremlin
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Comment utiliser Django avec Google App Engine / Python
Python: comment utiliser async avec
[Python] Comment utiliser la série Pandas
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser SQLite en Python
Remarques sur l'utilisation de pywinauto
Remarques sur l'utilisation des featuretools
Comment utiliser l'homebrew dans Debian
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
Comment utiliser l'API Python d'OpenPose
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Comment utiliser la fonction zip de python
[Python] Comment utiliser l'API Typetalk
Comment utiliser MultiIndex (mémorandum personnel)
[Hyperledger Iroha] Remarques sur l'utilisation du SDK Python
[Python] Résumé de l'utilisation des pandas
[Introduction à Python] Comment utiliser la classe en Python?
Comment lire pydoc sur l'interpréteur python
Comment installer et utiliser pandas_datareader [Python]
[Kivy] Comment installer Kivy sur Windows [Python]
Comment utiliser mecab, neologd-ipadic sur colab
[python] Comment utiliser __command__, explication des fonctions
[Python] Comment utiliser import sys sys.argv
Comment utiliser l'Assistant Google sur Windows 10
Comment effacer Python 2.x sur Mac.
[Python] Organisation de l'utilisation des instructions
[Python2.7] Résumé de l'utilisation d'unittest
python: Comment utiliser les locals () et globals ()
Comment utiliser __slots__ dans la classe Python
Installez python sur xserver pour utiliser pip
Comment utiliser "deque" pour les données Python
Comment utiliser le zip Python et énumérer
[Python] Comprendre comment utiliser les fonctions récursives
Résumé de l'utilisation de la liste Python
Comment utiliser les expressions régulières en Python
[Python2.7] Résumé de l'utilisation du sous-processus
Comment utiliser is et == en Python
[Question] Comment utiliser plot_surface de python
Pour utiliser python, mettez pyenv sur macOS avec PyCall
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data