でたぁっ 感動と失敗の備忘録

データ解析を担当することになったサラリーマンの備忘録

cyREST API で R と Cytoscape の連携を試す

 cyREST APIを使うと、RとCytoscapeを連携させることが出来る。
Cytoscapeは機能を拡張することが出来るアプリ(プラグイン)が数多く提供されており、cyRESTもその中の1つ。

1.CytoscapeにcyRESTをインストールする

 Cytoscapeを起動、Apps→App ManagerでApp Managerを開く。アプリの一覧の中からcyRESTを選択し右下にあるInstallボタンをクリック。インストール済アプリは、Currently Installedタブで確認出来る。
f:id:deta:20141227152704j:plain
 正常に動作していれば、ブラウザに

http://localhost:1234/v1

を入力すると、結果(PCのコア数、メモリサイズなどのJSON)が表示されるはず。他にもJARファイルをダウンロードしてインストールなど、いくつかの方法かある。こちらのページが参考になる。(注意)Cytoscapeは3.1.1以降が対応しており、Java8は未検証のようなので7が望ましい。

2.Rで実行する為に開発された関数を準備する

 RのグラフオブジェクトからCytoscape用のJSONに変換する関数などが準備されている。こちらGitHubにあるtoCytoscape.Rがその関数。任意のフォルダに保存しておく。
 

3.シンプルなネットワーク図を描いてみる

 スタイルなどの設定を行わず簡単な図をRから描いてみる。

library(RJSONIO)
library(igraph)
library(httr)

# 基本設定
source('toCytoscape.R') # 必用な関数を読み込む
port.number = 1234 # デフォルトのポート
base.url = paste("http://localhost:", toString(port.number), "/v1", sep="") # v1はAPIのバージョン
print(base.url)

# グラフデータの準備
graph1 <- barabasi.game(200) # Barabasi-Albert model
cygraph <- toCytoscape(graph1) # Cytoscape用のJSONに変換

# Cytoscapeに送信
send2cy(cygraph=cygraph, style.name="", layout.name="force-directed")

表示された。
f:id:deta:20141227160956j:plain
動作確認というレベルだが、このように簡単に連携させることが出来る。

4.スタイルなどの設定

 任意のスタイルを適用する場合、スタイルを準備→JSON変換→APIでPOST、スタイル名を指定して描画、スタイルの適用といった流れになる感じ。次のように記述すると、CytoscapeのStyleに"MyStyle1"が登録され、そのスタイルを適用した図を描くことが出来る。

style.name = "MyStyle1"

# Defaults
def.background.color <- list(
  visualProperty = "NETWORK_BACKGROUND_PAINT",
  value = "#000000"
)

def.node.color <- list(
  visualProperty = "NODE_FILL_COLOR",
  value = "#ffffff"
)

def.edge.color <- list(
  visualProperty = "EDGE_STROKE_UNSELECTED_PAINT",
  value = "#ffffff"
)

defaults <- list(def.background.color, def.node.color, def.edge.color)

# Mappings
node.label = list(
  mappingType="passthrough",
  mappingColumn="name",
  mappingColumnType="String",
  visualProperty="NODE_LABEL"
)

mappings = list(node.label)

style <- list(title = style.name, defaults = defaults, mappings = mappings)
style.JSON <- toJSON(style)
style.url = paste(base.url, "styles", sep="/")
POST(url=style.url, body=style.JSON, encode = "json")

send2cy(cygraph=cygraph, style.name=style.name, layout.name="force-directed")

f:id:deta:20141227165643j:plain
MyStyle1が追加され、そのスタイルにあった図が表示された。

5.スタイル設定について

 スタイル設定についての詳細なドキュメントはまだない。APIを使い、スタイルの設定をGETして参考にするのが早いらしい。APIのドキュメントはこちらのページにある。APIは、おおまかにapply、networks、session、styleといった種類がある。スタイルのデフォルトは、

http://localhost:1234/v1/styles/{スタイル名}/defaults

で確認することが出来る。APIの実行や結果確認にはAdvanced REST client for Chromeが便利らしいので、これを使っている。デフォルトで登録されているスタイル名は、

http://localhost:1234/v1/styles

で確認出来る。


参考