LoginSignup
5
0

More than 3 years have passed since last update.

networkx2neo4j

Last updated at Posted at 2020-12-01

前書き

記事のタイトルだけ見て来てしまった人は,この前書きを読む必要が一切ありません

これは上智大学エレクトロニクス研究部のアドベントカレンダー2日目ですが,この記事の内容は上智大学エレクトロニクス研究部とは1ミリも関係ないです.

動機

生成コストの高いクソデカグラフを生成する必要があったので,それを保存したいな~~~と思ったのが事の発端です.しかしneo4jを利用する必要があったのでしょうか?

neonx

networkxからneo4jへグラフをコンバートするためのモジュールですが,リポジトリを見る限り2014年で開発が途絶えてて怖いので,ここでは使わないことにします.

neo4j

グラフデータベースの一つです.
エンタープライズ版はお金がかかるのでコミュニティ版を利用します.

構築

いろいろ出されていますが,今回はDockerを利用します.

プラグイン

標準モジュールだけでは今回やりたいことは出来なさそうなので,apoc.import.graphmlを使えるようにします.
ここからjarファイルをダウンロードしたら./plugins に配置してください.

docker-compose

docker-comose up -dすればlocalhost:7474にアクセスして使えるようになります.うれし~~~.

docker-compose.yml

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

実行

手順は以下の通り

  1. グラフを生成
  2. pythonからwrite_graphmlを呼んでエクスポート
  3. neo4jからcall apoc.import.grahmlを呼んでインポート

実際のコードは以下

sample.py
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にアクセスして接続設定をしたのちに,以下を打ち込みます.

neo4j
CALL apoc.import.graphml("./import/example.graphml", {})

これでインポートして完了.

まとめ

単にnetworkxのグラフを保存したい人はgraphmlでもgmlでも好きな形式で保存すればよいと思います.neo4jを利用する必要はたぶんないです.

あとがき

上智大学エレクトロニクス研究部について

人の家でコンデンサ爆破して楽しむ人の集まりです.めちゃくちゃ臭かったし絶対許さないからな.

小学生並みの感想

顔も知らないハチャメチャに優秀なメンバーが気合の入った記事を1日目に書いてしまったので辛かったです.

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0