いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【R】Cytoscapeで遊んでみたい②

・お題:バイオインフォマティクスなどのデータを可視化するOSSプラットフォームで、Cytoscapeというやつがあるらしい。Rでこれを弄ってみたい。

 

・今回は、前回の続きとして、以下のチュートリアルのVisualizing data on networks以降の内容を進めていく。正しいことは元サイトをご確認いただきたい。

rdrr.io

・ライブラリを読み込む。

> library(RCy3)#これがCytoscapeを操作するライブラリ
> library(tidyverse)
> library(RColorBrewer)

>installApp('STRINGapp')

・データをロードする。今回はBreast Cancerのデータセット

> load(system.file("extdata","tutorial-brc-expr-mean-dataset.robj", package="RCy3"))
> load(system.file("extdata","tutorial-brc-mut-dataset.robj", package="RCy3"))

 

・データセットの中身を見てみる。

> str(brc.expr)  # 行名の遺伝子名が入っている発現量のデータフレーム
'data.frame':    17508 obs. of  1 variable:
 $ expr.mean: num  -0.000167 -0.005408 0.018381 -0.065037 -0.074444 ...
> str(brc.mut)  # Hugo_Symbolに遺伝子名が入っている変異のデータフレーム
'data.frame':    12463 obs. of  3 variables:
 $ Hugo_Symbol       : Factor w/ 14130 levels "1-Dec","1-Sep",..: 16 17 18 19 20 22 23 24 25 26 ...
 $ mut_count         : int  2 3 3 4 1 2 1 3 2 1 ...
 $ missense_mut_count: num  2 3 2 4 0 2 1 2 1 1 ...

 

・データのロードに関するルールを設定しておく。

> loadTableData(brc.expr, table.key.column = "display name")  #default data.frame key is row.names
[1] "Success: Data loaded in defaultnode table"
> loadTableData(brc.mut, 'Hugo_Symbol', table.key.column = "display name")  #specify column name if not default
[1] "Success: Data loaded in defaultnode table"

・今回は、この情報をSTRINGの相互作用ネットワークにマッピングして可視化することになる。

・STRINGのbreast cancer関連の相互作用ネットワークを読み込む。

>string.cmd = 'string disease query disease = "breast cancer" cutoff = 0.9 species = "Homo sapiens" limit = 150'
>commandsRun(string.cmd)

> setCurrentNetwork(network = "STRING network - breast cancer")
> layoutNetwork('force-directed')

・STRINGっぽいスタイルのネットワークになっている。スタイルを変更してみる。

> style.name = "dataStyle"
> createVisualStyle(style.name)
> setVisualStyle(style.name)
                message 
"Visual Style applied." 

・さらに細かい表示設定を弄っていく。

> setNodeShapeDefault("ellipse",  style.name) #remember to specify your style.name!
> setNodeSizeDefault(60, style.name)
> setNodeColorDefault("#AAAAAA", style.name)
> setEdgeLineWidthDefault(2, style.name)
> setNodeLabelMapping('display name', style.name)
NULL

 

・次に、遺伝子発現量に応じて色を変えていく。遺伝子発現量の情報は、brc.exprにexpr.meanとして格納されている。

> brc.expr %>% head()

・データを読み込む。

> brc.expr.network = getTableColumns('node','expr.mean')  

・配色を設定するために、発現量の最大値と最小値の情報を抽出する。
> min.brc.expr = min(brc.expr.network[,1],na.rm=TRUE)
> max.brc.expr = max(brc.expr.network[,1],na.rm=TRUE)
> data.values = c(min.brc.expr,0,max.brc.expr)

・配色を設定する。

> display.brewer.all(length(data.values), colorblindFriendly=TRUE, type="div") # div,qual,seq,all
> node.colors <- c(rev(brewer.pal(length(data.values), "RdBu")))

・先の配色でネットワークを塗る。

> setNodeColorMapping('expr.mean', data.values, node.colors, style.name=style.name)
NULL

・変異の情報に関しても、同様に図示する(枠を塗る)。
> brc.mut.network = getTableColumns('node','mut_count')
> min.brc.mut = min(brc.mut.network[,1],na.rm=TRUE)
> max.brc.mut = max(brc.mut.network[,1],na.rm=TRUE)
> data.values = c(min.brc.mut,20,max.brc.mut)
> display.brewer.all(length(data.values), colorblindFriendly=TRUE, type="seq") 
> border.colors <- c(brewer.pal(3, "Reds"))
> setNodeBorderColorMapping( 'mut_count', data.values, border.colors, style.name=style.name)
NULL
> border.width <- c(2,4,8)
> setNodeBorderWidthMapping( 'mut_count', data.values, border.width, style.name=style.name )
NULL

・あまりに多すぎるので、disease scoreトップ3から始まる拡散アルゴリズムで、ネットワークの接続性を出してみる。

> setCurrentNetwork(network="STRING network - breast cancer")
> disease.score.table <- getTableColumns('node','stringdb::disease score')
> disease.score.sorted <- disease.score.table[order( -disease.score.table$`stringdb::disease score`), , drop = FALSE]
> top.nodes <- row.names(disease.score.table)[tail(order(disease.score.table[,1]),3)]
> selectNodes(nodes = top.nodes)
$nodes
[1] 2039 2024 2030

$edges
list()

> commandsPOST('diffusion diffuse') # diffusion!
               heatColumn                rankColumn 
"diffusion_output_4_heat" "diffusion_output_4_rank" 
> createSubnetwork('selected',subnetwork.name = 'top disease diffusion')
network 
  17453 
> layoutNetwork('force-directed')

> layoutNetwork('circular')

・ちなみに、出てきたネットワークはインタラクティブなものとして保存できる。RCy3でのコマンドが良く分からなかったので、Cytoscapeからexportした。

・これで、zipファイルが作成される。ネットワークを開くときは、zipを解凍し、index.htmlを適当なブラウザで開く。インタラクティブなので、ノードを動かすことができる。

 

つづく。