LoginSignup
3
0

More than 5 years have passed since last update.

PGXからGraphMLで出力しCytoscapeで描画する

Last updated at Posted at 2019-02-01

はじめに

本記事について

PGX (グラフ分析エンジン、Parallel Graph AnalytiXの略)は、単体では描画機能を持ちませんが、グラフの可視化には特徴を掴みやすくなったり、他者との認識を共有しやすくなったりと多くの利点があります。そこで、PGXでグラフデータを分析した結果も含めてGraphMLとしてエクスポートし、そのファイルをCytoscapeで描画する手順を記載します。

動作環境について

PGXでグラフ分析してCytoscapeで描画する

CSVファイルをPGXにロードし分析

Oracle Labs発! Parallel Graph Analytics (PGX)に記載の手順と"ほぼ"同じです。差分は後述します。PGXのセットアップ方法についてもそちらをご参照ください。

以下ファイルを用意します。

hero-network.csv.json
{
  "uri": "hero-network.csv"
, "format": "edge_list"
, "node_id_type": "string"
, "separator": ","
}

「hero-network.csv」は以下のようにコミックで協演したことのあるキャラクター同士をCSVで記載してあるだけのファイルです。

hero-network.csvイメージ
"キャラクターA","キャラクターB"
"キャラクターA","キャラクターC"
"キャラクターB","キャラクターC"

この"edge_list"フォーマットも含めたPGXにロードできるファイルフォーマットはPGX Documentのこちらに記載があるので分析対象データのフォーマット検討時に適宜ご参照ください。

PGXを起動し対象データをロードします。

$ pgx
(略)
variables instance, session and analyst ready to use
pgx>
pgx> G = session.readGraphWithProperties("/home/oracle/work/hero/hero-network.csv.json")
※有向グラフです(上述の参考スライド上では無向グラフとなっています)

  // 前処理を施します
pgx> G.simplify( \
      MultiEdges.REMOVE_MULTI_EDGES \
    , SelfEdges.REMOVE_SELF_EDGES \
    , TrivialVertices.REMOVE_TRIVIAL_VERTICES \
    , Mode.CREATE_COPY \
    , null \
    )

  // PGQLを実行しPGXにロードできていることを確認します。
pgx> G.queryPgql(" SELECT x WHERE (x) ").print(10)
+------------------------------------+
| x                                  |
+------------------------------------+
| PgxVertex[ID=MELTER/BRUNO HORGAN]  |
| PgxVertex[ID=KALA]                 |
(略)

  // PGXのK-coreアルゴリズムを例として実行します
pgx> analyst.kcore(G)
==> (Scalar[name=scalar_long_9,type=long,graph=hero-network3_2],VertexProperty[name=vertex_prop_long_8,type=long,graph=hero-network3_2])
  //↑ノードのプロパティに"vertex_prop_long_8"というプロパティで値が格納されました

  //プロパティが追加されているか確認します
pgx> G.queryPgql("SELECT x, x.vertex_prop_long_8 WHERE (x)").print(10)
+---------------------------------------------------+
| x                          | x.vertex_prop_long_8 |
+---------------------------------------------------+
| PgxVertex[ID=PREYY]        | 16                   |
| PgxVertex[ID=RAMONDA]      | 12                   |
(略)

GraphMLにエクスポートします。

pgx> config = G.store(Format.GRAPHML, "/tmp/hero.graphml")

 ※無向グラフはエクスポートできませんでした

GraphMLをCytoscapeにインポート

Cytoscapeを起動し、"File"タブからたどり"File..."を選択します。
image.png

表示されるダイアログにはそのまま"OK"を選択します。
image.png

対象のGraphMLを選択すると、以下のように描画されます。画面下部の"Table Panel"欄より、先ほどノードに付与されたプロパティもCytoscapeにインポートされていることが分かります。
image.png

このままではグラフやノードの特徴を把握しにくいため、適宜"Control Panel"で描画Styleを変更します。
プロパティのデータ型が数字で連続データの場合、"Continuous Mapping"で値の大小に応じたグラデーションの設定ができます。個人的に好きな描画Styleです。
image.png

以下のようにプロパティ値に応じてノードの濃淡が表現されるため、目的に応じたノードが見つけやすくなったり、グラフの特徴を感覚的に把握しやすくなると思います。
image.png

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