前書き
記事のタイトルだけ見て来てしまった人は,この前書きを読む必要が一切ありません
これは上智大学エレクトロニクス研究部のアドベントカレンダー2日目ですが,この記事の内容は上智大学エレクトロニクス研究部とは1ミリも関係ないです.
動機
生成コストの高いクソデカグラフを生成する必要があったので,それを保存したいな~~~と思ったのが事の発端です.しかしneo4jを利用する必要があったのでしょうか?
neonx
networkxからneo4jへグラフをコンバートするためのモジュールですが,リポジトリを見る限り2014年で開発が途絶えてて怖いので,ここでは使わないことにします.
neo4j
グラフデータベースの一つです.
エンタープライズ版はお金がかかるのでコミュニティ版を利用します.
構築
いろいろ出されていますが,今回はDockerを利用します.
プラグイン
標準モジュールだけでは今回やりたいことは出来なさそうなので,apoc.import.graphml
を使えるようにします.
ここからjarファイルをダウンロードしたら./plugins
に配置してください.
docker-compose
docker-comose up -d
すればlocalhost:7474にアクセスして使えるようになります.うれし~~~.
version: '3'
services:
neo4j:
image: 'neo4j:4.1'
container_name: neo4j
ports:
- "7473:7473"
- "7474:7474"
- "7687:7687"
volumes:
- "./data:/data"
- "./logs:/logs"
- "./conf:/conf"
- "./import:/var/lib/neo4j/import"
- "./plugins:/plugins"
environment:
NEO4J_dbms_security_procedures_unrestricted: "apoc*,algo*"
NEO4J_AUTH: "user/password"
networkx
グラフをごにょごにょするためのPythonのモジュール.
構築
pipでインストールするだけ.
pip install networkx
実行
手順は以下の通り
- グラフを生成
- pythonから
write_graphml
を呼んでエクスポート - neo4jから
call apoc.import.grahml
を呼んでインポート
実際のコードは以下
import networkx as nx
#例として頂点数10の完全グラフを生成する
graph = nx.complete_graph( 10 )
#graphML形式で書き出し
nx.write_graphml( graph, './import/example.graphml' , named_key_ids=True )
次にneo4j.
localhost:7474にアクセスして接続設定をしたのちに,以下を打ち込みます.
CALL apoc.import.graphml("./import/example.graphml", {})
これでインポートして完了.
まとめ
単にnetworkxのグラフを保存したい人はgraphmlでもgmlでも好きな形式で保存すればよいと思います.neo4jを利用する必要はたぶんないです.
あとがき
上智大学エレクトロニクス研究部について
人の家でコンデンサ爆破して楽しむ人の集まりです.めちゃくちゃ臭かったし絶対許さないからな.
小学生並みの感想
顔も知らないハチャメチャに優秀なメンバーが気合の入った記事を1日目に書いてしまったので辛かったです.