vignettes/cyautoworkshop_ja.Rmd
cyautoworkshop_ja.Rmd
ワークショップの前に 次の手順を実行してください。
image
西田 孝三
GUIを直接使用できるのに、なぜCytoscapeを自動化するのですか?
端的には「再現性」「データ共有」「RかPythonの資源活用」のため。
image
REST APIでそれを可能にしています。ほとんどすべてのGUI 操作がREST APIで行えるようになっています。
昨今のCytoscapeはデスクトップアプリケーションであるだけでなく、RESTサーバーでもあります。
以下のコマンドで、Cytoscapeがサーバーとして機能しているかどうかを確認できます。
curl localhost:1234
RCy3 または py4cytoscape といったパッケージはそのREST APIのラッパーです。
py4cytoscape は RCy3 の Pythonクローンです。最近できました。py4cytoscape は RCy3 と同じ関数仕様を持っているため、片方使えると両方使えるようになったのと同じです。
バイオインフォマティクスにはテーブル操作が不可欠であるため、RやPythonでCytoscapeを操作できると便利です。dplyrやpandasがあるからです。そういったテーブル操作をCytoscapeのGUIで行うのは面倒です。
CyREST: Turbocharging Cytoscape Access for External Tools via a RESTful API. F1000Research 2015.
Cytoscape Automation: empowering workflow-based network analysis. Genome Biology 2019.
ネットワークは、生物学的データを表すための便利な方法を提供してくれます。 しかし、データをRからCytoscapeにシームレスに変換するにはどうすればよいでしょうか?
image
ここからいよいよハンズオンです。細かいことはおいておいてとにかくRとCytoscapeを接続しましょう。
以下のコードを実行する前に、ローカルのCytoscapeが完全に起動しきっていることを確認してください。 Cytoscapeが起動し、RESTサーバーが完全に起動するまでには少し時間がかかります。 (大体10秒くらい待ちます。)
library(RCy3)
browserClientJs <- getBrowserClientJs()
IRdisplay::display_javascript(browserClientJs)
cytoscapePing()
下記で何が起こったのかについての詳細な説明が必要ですね。
browserClientJs <- getBrowserClientJs()
IRdisplay::display_javascript(browserClientJs)
上記のコードでは、Jupyter Bridge と呼ばれるテクノロジーを使用しました。 Jupyter Bridgeは、リモートの REST クライアントからの HTTP リクエストをローカルリクエストのように見せかける JavaScript 実装です。
image
デスクトップ環境内のCytoscapeにリモート環境からアクセスするのは難しいため、Jupyter Bridgeを使用します。
そしてこのワークショップが他のワークショップと違って Orchestra で動かなかったのは この Jupyter Bridge のせいでもあります。
そのため私はローカルの Docker 環境内の Jupyter で Jupyter Bridge を使いました。 ローカルでなくても Orchestra でないリモートサーバーで私の Docker イメージを使うなら問題無く動作します。
いくつかの基本的なRオブジェクトからCytoscapeネットワークを作成します
nodes <- data.frame(id=c("node 0","node 1","node 2","node 3"),
group=c("A","A","B","B"), # categorical strings
score=as.integer(c(20,10,15,5)), # integers
stringsAsFactors=FALSE)
nodes
edges <- data.frame(source=c("node 0","node 0","node 0","node 2"),
target=c("node 1","node 2","node 3","node 3"),
interaction=c("inhibits","interacts","activates","interacts"), # optional
weight=c(5.1,3.0,5.2,9.9), # numeric
stringsAsFactors=FALSE)
edges
createNetworkFromDataFrames(nodes, edges, title="my first network", collection="DataFrame Example")
大部分の人の目的はCytoscapeの画を論文のFigureに使うことでしょう。 ですので画像を取得する方法が知りたいでしょう。
exportImage("my_first_network", type = "png")
入門編のシンプルなネットワーク
image
オミックスデータ - 私は ほげほげ (microarray, RNASeq, Metabolomics, Proteomics, ATACseq, MicroRNA, GWAS …) データを持っています。 データをそれを何らかの解析をしてスコアリングしました。 データを既存のインタラクションデータ(PPI, パスウェイ, その他何か)にオーバーレイするにはどうすればよいですか?
We downloaded gene expression data from the Ovarian Serous Cystadenocarcinoma project of The Cancer Genome Atlas (TCGA)(International Genome et al.), http://cancergenome.nih.gov via the Genomic Data Commons (GDC) portal(Grossman et al.) on 2017-06-14 using TCGABiolinks Bioconductor package(Colaprico et al.).
The Cancer Genome Atlas (TCGA)(International Genome et al.) の the Ovarian Serous Cystadenocarcinoma プロジェクトから遺伝子発現データをダウンロードしました。 http://cancergenome.nih.gov それには2017年6月14日に TCGABiolinks Bioconductor package(Colaprico et al.). を用いて the Genomic Data Commons (GDC) portal(Grossman et al.) 由来でデータを取得しました。
分析の結果として次の表を使用して、相互作用ネットワークに統合します:
library(RCurl)
matrix <- getURL("https://raw.githubusercontent.com/cytoscape/cytoscape-tutorials/gh-pages/presentations/modules/RCy3_ExampleData/data/TCGA_OV_RNAseq_All_edgeR_scores.txt")
RNASeq_gene_scores <- read.table(text=matrix, header = TRUE, sep = "\t", quote="\"", stringsAsFactors = FALSE)
RNASeq_gene_scores
相互作用データを格納しているデータベースは無限にあります。
image
STRINGデータベースにクエリを実行して、トップのMesenchymalの遺伝子のセットに対して見つかったすべての相互作用を取得します。
ありがたいことに、遺伝子それぞれを個別にクエリする必要はありません。
多くの特殊な(たとえば、特定の分子、相互作用の種類、または種の)相互作用データベースに加えて、これらのデータベースを照合して、より使いやすい幅広いリソースを作成するデータベースもあります。例えば:
この “App” のインストールもRで自動的に行えます。
installApp("stringApp")
次の方法で正常にインストールされたことを確認できます:
getAppStatus("stringApp")
Rの環境から個々のコマンドに関する情報を取得するには、commandsHelp関数を使用することでできます。 コマンドに名前を追加して、情報を取得するコマンドを指定するだけです。 たとえば “commandsHelp(”help string”)“ といったふうにです。
commandsHelp("help")
commandsHelp("help string")
commandsHelp("help string protein query")
mesen_string_interaction_cmd <- paste('string protein query taxonID=9606 limit=150 cutoff=0.9 query="',paste(top_mesenchymal_genes$Name, collapse=","),'"',sep="")
commandsGET(mesen_string_interaction_cmd)
詳細については、Cytoscapeメニューバーの “Help -> Automation -> CyREST Commands API” を参照してください。
exportImage("initial_string_network", type = "png")
initial_string_network
特定のレイアウトのパラメーターを取得する。
getLayoutPropertyNames(layout.name='force-directed')
force directed レイアウトを使用してネットワークを再レイアウトしますが、今度はいくつかのパラメーターを指定してみましょう。 このような「パラメーターを変えてまた試す」といった際に「自動化」は大いに役立つことがお分かりになるでしょう。
layoutNetwork('force-directed defaultSpringCoefficient=0.0000008 defaultSpringLength=70')
再レイアウトされたネットワークのスクリーンショットを取得する。
response <- exportImage("relayout_string_network", type = "png")
response
新しいレイアウトのSTRINGのネットワーク
relayout_string_network
これを行うには、RCy3のloadTableData関数を使用します。 IDの種類が一致していることを確認することが重要です。 ノード属性テーブルの列名を取得することで、STRINGが何を使用しているかを確認できます。
getTableColumnNames('node')
各列が何であるかわからず、使用する列をさらに確認したい場合は、ノード属性テーブル全体をプルすることもできます。
node_attribute_table_topmesen <- getTableColumns(table="node")
head(node_attribute_table_topmesen[,3:7])
image
“display name” の列には、Ovarian Cancerデータセットにも含まれている HGNC 遺伝子名が含まれています。
発現データをインポートするには、そのデータセットを “display name” ノード属性に一致させます。
loadTableData(RNASeq_gene_scores, table.key.column = "display name", data.key.column = "Name") #default data.frame key is row.names
ビジュアルスタイルを変更する独自の視覚スタイルを作成して、STRINGネットワーク上の発現データを可視化してみましょう。 まずはデフォルトのスタイルから始めます。
フォーマットされたSTRINGネットワーク
mesen_string_network
style.name = "MesenchymalStyle"
defaults.list <- list(NODE_SHAPE="ellipse",
NODE_SIZE=60,
NODE_FILL_COLOR="#AAAAAA",
EDGE_TRANSPARENCY=120)
# p for passthrough; nothing else needed
node.label.map <- mapVisualProperty('node label','display name','p')
createVisualStyle(style.name, defaults.list, list(node.label.map))
setVisualStyle(style.name=style.name)
MesenchymalのlogFCの発現に対するマッピングを使用して、作成したスタイルを更新します。 最初のステップは、Cytoscapeから列データを取得し(上記のnode_attributeテーブルの概念を再利用できますが、式データを追加したので、関数を再度呼び出す必要があります)、最小値と最大値を引き出して値の範囲に対するデータマッピングを定義します。
注:データセット全体、または現在Cytoscapeで表されているサブセットのみに基づいて最小値と最大値を定義できます。2つの方法では、異なる結果が得られます。 同じデータセットで作成された異なるネットワークを比較する場合は、サブセットではなく、データセット全体から最小値と最大値を計算するのが最善です。
次に、RColorBrewer パッケージを使用して、データ値と組み合わせるのに適した色を選択します。
library(RColorBrewer)
display.brewer.all(length(data.values), colorblindFriendly=TRUE, type="div")
node.colors <- c(rev(brewer.pal(length(data.values), "RdBu")))
色をデータ値にマッピングし、ビジュアルスタイルを更新します。
setNodeColorMapping("logFC.mesen", data.values, node.colors, style.name=style.name)
STRINGには、クエリタンパク質と、クエリタンパク質に関連する他のタンパク質(最初に最も強い接続を含む)が含まれることを忘れないでください。 このネットワークのすべてのタンパク質があなたのトップヒットであるわけではありません。どのタンパク質がトップMesenchymalヒットであるかをどのように可視化できますか?
別の(境界線の)色を追加するか、トップヒットのノードの形状を変更してみましょう。
getNodeShapes()
#select the Nodes of interest
#selectNode(nodes = top_mesenchymal_genes$Name, by.col="display name")
setNodeShapeBypass(node.names = top_mesenchymal_genes$Name, new.shapes = "TRIANGLE")
これで基本的なしくみだけでなく論文のような図を作る実践的な方法も学習できましたね。
役立つと思われる追加のリソースは次のとおりです: