Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

posted at

updated at

networkx2neo4j

前書き

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

これは上智大学エレクトロニクス研究部のアドベントカレンダー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日目に書いてしまったので辛かったです.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?