LoginSignup
7
0

More than 3 years have passed since last update.

JanusgraphのグラフをGephiで可視化する

Last updated at Posted at 2020-11-26

概要

現在関わっているプロダクトがJanusgraphを用いている。開発を進める中で、グラフ構造を可視化したいというニーズがあったため、Gephiを用いてグラフの可視化をしました。本記事内では、チュートリアル用のグラフデータを用いて試しているので、実際のユースケースに合わせて、その辺はうまくやって下さい。:pray:

やったこと

  • Janusgraphをdocker-composeで立ち上げる
  • Janusgraphサーバー(gremlin-server)とGephiを接続して、グラフを可視化する

説明しないこと

  • 今回の記事では、gremlinコマンドについての説明ができていません。:pray:
    gremlinについて学習したい方は、参考資料に記載しているPRACTICAL GREMLINを参考にしてください。

    動作環境

  • maacOS Catalina ver.10.15.3

  • Gephi 0.9.2

  • Janusgraph 0.5.2

Janusgraphとは

  • オープンソースのグラフDBです。
  • Apache TinkerPopというグラフDB(OLTP)とグラフ分析(OLAP)のためのグラフコンピューティングフレームワークの、グラフDB部分としても使うことができます。
    スクリーンショット 2020-11-25 21.47.39.png

  • グラフトラバーサル言語にはGremlinを用います。グラフトラバーサル言語とは、RDBでいうSQLです。

  • データの永続化に用いるバックエンドのデータベースとしては、以下のデータベースを使うことができます。(2020/11/25)

公式ホームページ

Gephiとは

正確な表現は、公式にお願いするとして、ざっくりGephiとは、グラフやネットワークを可視化するオープンソースのソフトウェアです。

公式サイトの引用はこちら。

Gephi is the leading visualization and exploration software for all kinds of graphs and networks. Gephi is open-source and free.
https://gephi.org/

手順

  1. Gephiをインストール
  2. Gephiに必要なPluginをインストール
  3. Gephiでの設定
  4. Janusgraphサーバーを起動
  5. 4の中でgremlinコンソールを起動する
  6. gremlinコンソールとGephiを接続する
  7. トラバーサルを流して可視化する
  8. Gephiで可視化結果を確認する

1. Gephiをインストール

以下ダウンロードページからGephiのインストーラーをダウンロードする。
https://gephi.org/users/download/

2. Gephiに必要なPluginをインストール

この項では、Graph Streaming APIというプラグインをインストールします。これは、Gephiで作成したワークスペースにHTTPで接続するためのプラグインです。

1.Gephiを起動したらNew Projectを選択する
2. その後、メニューバーのTools > Pluginsを選択する
3. 下記画像のようにGraph Streamingというプラグインを検索し、インストールする

スクリーンショット 2020-11-25 22.54.42.png
4. インストールできたらGephiの再起動を促されるので、従順に再起動してください。

3. Gephiでの設定

この項では、ポートを開いて、外部からのリクエストを待つための設定をします。

  1. メニューバーのWorkspace > renameを選択し、workspace1とかに設定してください。ここで設定したワークスペースの名前が、Janusgraphから接続する際のパスになります。
  2. Gephi上のどこかに下記画像のようなStreamingウィンドウが表示されているはずなので見つけてください。(なければ、メニューバーのWindow > Streamingを選択して表示させる。) スクリーンショット 2020-11-26 8.10.31.png
  3. 次に、StreamingウィンドウのSettings...をクリックします。すると、接続する際に用いる設定情報の確認・変更ができます。初期設定は以下のようになっています。 スクリーンショット 2020-11-26 8.16.14.png
  4. 設定を終えたら、StreamingウィンドウのMasterを選択し、Master Serverを右クリックします。すると、Startが表示されるため、それも選択します。
  5. その後、Master Server左側のランプが:red_circle:から:large_blue_circle:に変われば、Gephi側の設定は終了です。

4. Janusgraphサーバーを起動

この項では、docker-composeを用いて、Janusgraphサーバーを立ち上げます。立ち上げ方は、各々のユースケースに沿った方法で立ち上げてください。

1.下記githubレポジトリを手元にcloneしてきて、使ってみるのも良いと思います。
https://github.com/JanusGraph/janusgraph-docker

5. 4の中でgremlinコンソールを起動する

この項では、gremlinコンソールを起動します。gremlinコンソールとは、gremlinコマンドを実行するための対話型シェルです。

  1. 4で立ち上げたJanusgraphサーバー上で、bin/gremlin.shを実行する
  2. すると、下記のグレムリンみたいなやつが標準出力に現れ、gremlinコンソールを立ち上げてくれます。
         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
  1. gremlin>と表示され、コマンドを入力できる状態になっていればOKです。

6. gremlinコンソールとGephiを接続する

ようやく、この項でこの記事の主目的であるGephiとの接続設定をします。ここからの操作は全てgremlinコンソール上で実行します。

参考資料はこちらです。

Gephiのプラグインをインストールします。

gremlin> :plugin use tinkerpop.gephi

Gephiに接続します。

gremlin> :remote connect tinkerpop.gephi
==>Connection to Gephi - http://localhost:8080/workspace1 with stepDelay:1000, startRGBColor:[0.0, 1.0, 0.5], colorToFade:g, colorFadeRate:0.7, startSize:10.0,sizeDecrementRate:0.33

dockerでJanusgraphを立ち上げた場合、ホストPCのlocalhostを指定する場合は、host.docker.internalになるため、接続情報を更新します。

gremlin> :remote config host host.docker.internal
==>Connection to Gephi - http://host.docker.internal:8080/workspace1 with stepDelay:1000, startRGBColor:[0.0, 1.0, 0.5], colorToFade:g, colorFadeRate:0.7, startSize:10.0,sizeDecrementRate:0.33

今回は、TinkerPopで用意されているチュートリアル用のグラフデータを用います。(その他のチュートリアル用グラフデータ)

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> :> graph
==>tinkergraph[vertices:6 edges:6]
==>false

7. トラバーサルを流して可視化する

Gephiで可視化したいグラフ構造を作るためのトラバーサルを作成します。

Gephiでトラバーサルが実行されていくのを可視化するために、以下の設定を追加します。graph部分は、Graphインスタンスじゃないとダメです。

:remote config visualTraversal graph

上記コマンドにより、vgという可視化用のTraversalSourceが生成されますので、それを使用してトラバーサルを定義していきます。
;[]を行末につけることで、トラバーサルの繰り返しを防止します。

gremlin> traversal = vg.V().in().out("knows").has("age",gt(30)).outE("created").has("weight", gt(0.5d)).inV();[]

Gephiにトラバーサルを流します。

gremlin> :> traversal

8. Gephiで可視化結果を確認する

この段階では、まだ下記の画像のような状態かと思います。(おそらく。)
スクリーンショット 2020-11-26 9.48.57.png

この状態だと、何が何だかわからないため、見た目を整えます。以下画像を参考に色々いじってみてください。
スクリーンショット 2020-11-26 9.46.20.png

その他

お役立ちgremlinコマンド

  • gremlinコンソールを抜ける
gremlin> :exit
  • Gephiで可視化しているグラフを消去する
gremlin> :> clear

参考資料

7
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
7
0