前回の記事でNeo4jの起動までできました。今回はデータを操作してみます。
Neo4jのデータを操作するにはCypherというクエリ言語を使います。これを実行する方法としては次のようなものがあるようです。
今回はドライバを使う方法でPythonからNeo4jを操作してみます。ドライバには公式ドライバとコミュニティ版のドライバがありますが、公式版を使うことにします。
準備
Pythonの仮想環境venv
を使って環境を構築していきます。次のコマンドで仮想環境を作成して有効化します。
$ python3 -m venv .venv $ . .venv/bin/activate
次にNeo4jのPythonドライバをインストールします。
$ pip install neo4j
Neo4jにアクセスする際に必要となるユーザー名やパスワードは環境変数に設定しておくことにします。
python-dotenv
モジュールを使ってスクリプト実行時に環境変数を設定します。
$ pip install python-dotenv
次の内容の.env
ファイルを作成します。「XXXX」の部分とNEO4J_URI
の値は環境に合わせて読み替えます。
NEO4J_USER = XXXX NEO4J_PASSWORD = XXXX NEO4J_URI = bolt://localhost:7687
交信局と交信の関係をグラフにする
アマチュア無線に関連があるデータをグラフで表現してみます。次のスクリプトは交信局と交信の関係をグラフにします。
import os from dotenv import load_dotenv from neo4j import GraphDatabase def sample(user, passwd, uri): driver = GraphDatabase.driver(uri, auth=(user, passwd)) with driver.session() as session: session.write_transaction(write) driver.close() def write(tx): tx.run('CREATE (s0:Station {name: "JA1QRS"})' 'CREATE (c0:Contact {name: "Contact"})' 'CREATE (s1:Station {name: "JA8QRP"})' 'CREATE (c1:Contact {name: "Contact"})' 'CREATE (s0)-[:MADE]->(c0)-[:WITH]->(s1)' 'CREATE (s1)-[:MADE]->(c1)-[:WITH]->(s0)' 'CREATE (c0)-[:MATCHED]->(c1)' 'CREATE (c1)-[:MATCHED]->(c0)') if __name__ == "__main__": load_dotenv() user = os.getenv('NEO4J_USER') passwd = os.getenv('NEO4J_PASS') uri = os.getenv('NEO4J_URI') sample(user, passwd, uri)
これを実行後、ブラウザからNeo4jのコンソールを起動して、次のCypherクエリを実行します。
MATCH (n) RETURN n;
コンソールには次のグラフが表示されます。コンソールからグラフのイメージをエクスポートすることもできます。