cyREST API で R と Cytoscape の連携を試す
cyREST APIを使うと、RとCytoscapeを連携させることが出来る。
Cytoscapeは機能を拡張することが出来るアプリ(プラグイン)が数多く提供されており、cyRESTもその中の1つ。
1.CytoscapeにcyRESTをインストールする
Cytoscapeを起動、Apps→App ManagerでApp Managerを開く。アプリの一覧の中からcyRESTを選択し右下にあるInstallボタンをクリック。インストール済アプリは、Currently Installedタブで確認出来る。
正常に動作していれば、ブラウザに
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")
表示された。
動作確認というレベルだが、このように簡単に連携させることが出来る。
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")
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
で確認出来る。
参考