SlideShare a Scribd company logo
1 of 21
Download to read offline
Cytoscape.js を使ってみました。 
@iwatobipen
自己紹介 
● 某製薬企業で働いてます。 
● 普段はウェット側(一応)。 
● 興味=>chemoinfo。
Cytoscape.js 
● http://js.cytoscape.org/ 
● Cytoscape とは全く同じではありません 
● エンドユーザー側でなく開発側のアプリ 
● jQuery と同じ雰囲気
Cytoscape.js でアクセスする要素 
cy; core• ベース 
eles; ノードもしくはエッジの集合 
ele; ノードもしくはエッジ 
nodes; ノードの集合 
node; ノード 
edges; エッジの集合 
edge; エッジ 
object.function1().function2()....
たとえば。。。selectors 
cy.style() 
.selector('node[degree >= 5]') 
.css({'hoge' : 'huga'}).update() 
ノードオブジェクトのうち 
結合次数 > 5 のノードに関して 
hoge を huga とする 
変更を反映させる
分子の類似性でネットワーク 
俺たちそっくりだね〜 
類似性高いね〜 
☆ 本日のサンプル 
①分子をFingerPrint で記述 
②類似性が閾値より高い時エッジを結ぶ 
③ cytoscape.js で可視化 
mol 1 
mol 2 
Tc > 0.8
Javascript + HTML... 
うおー( ; ・`ω ・´) 
JavaScript & HTML ? 
開発なんてしたことない、、、オマエ書けよ〜 
無理無理
そうだPython でいこう! 
Flask でがんばろー 
おー!!! 
* 普通にHTML 書けるのなら 
そちらで全然問題ないです。
Flask なのでこんな構成 
iwatobipen$ tree mishimasyk4 
mishimasyk4 
├ ── Readme.rst 
├ ── __init__.py 
├ ── app.py 
├ ── requierments 
├ ── sampledata 
│ ├ ── __init__.py 
│ ├ ── csv_sdf.py 
│ ├ ── document chemistry_20141011_130145_833.csv 
│ ├ ── document chemistry_20141011_130145_833.sdf 
│ └── for_network.py 
├ ── static 
│ ├ ── js 
│ │ ├ ── javascript いろいろ 
│ └── jsondata 
│ └── mols.json 
└── templates 
├ ── templ.html  テンプレート 
└── top.html
ネットワークの表現方法 
JSON ?
“nodes”: 
ネットワークをJSON で 
[{ "data": { 
"degree": 1, 
"molwt": 379.5, 
後ほどリンクで画像をとる 
"href": "http://cactus.nci.nih.gov/chemical/structure/smi/image", 
"smi": "COc1cc2[nH]c(C)c(CCN3CCN(c4ccccc4)CC3)c2cc1OC", 
"id": "mol_0", 
"molid": 0 
}}, ], 
“edges”: 
[ { 
"data": { 
"source": "mol_237", 
"target": "mol_207", 
"id": "237>>207", 
"similarity": 0.75 
}, ] 
結合次数 
エッジの向きも表現できます
RDKit でつくりました。 
class Node(object): 
def __init__(self,mol): 
self.mol = mol 
def mw( self ): 
return round( Descriptors.MolWt( self.mol ), 2 ) 
def smi( self ): 
return Chem.MolToSmiles( self.mol ) 
class Edge(object): 
def __init__(self, mol1, mol2 ): 
self.mol1 = mol1 
self.mol2 = mol2 
def source( self ): 
return Chem.MolToSmiles( self.mol1 ) 
def target( self ): 
return Chem.MolToSmiles( self.mol2 ) 
def sim(self): 
fp1 = AllChem.GetMorganFingerprintAsBitVect(self.mol1, 2) 
fp2 = AllChem.GetMorganFingerprintAsBitVect(self.mol2, 2) 
tc = DataStructs.TanimotoSimilarity(fp1,fp2) 
return tc 
Node class 
Edge class
前のコードで作ったファイルを読む 
<script> 
// load JSON 
items = [] 
$.getJSON(("static/jsondata/mols.json"), 
function(data){ 
items = data; 
return items; 
}); 
</script> 
JSON ファイルを読み込んでおく
以下はHTML / JavaScript
Flask では特別なことしない 
Flask 便利だね〜 
BootStrap も使えるね〜 
from flask import Flask 
from flask_bootstrap import Bootstrap 
from flask import render_template 
def create_app(): 
app = Flask( __name__ ) 
Bootstrap( app ) 
return app 
app = create_app() 
@app.route("/") 
def root(): 
return render_template("top.html") 
@app.route("/circle") 
def circle(): 
return render_template("circle.html") 
@app.route("/cola") 
def cola(): 
return render_template("cola.html") 
Make web 
Using flask
Template 側のjavascript 
cy というID のdiv にバインドする 
static なグラフは 
mapData を使える 
$(function(){ 
$("#cy").cytoscape({ 
style: cytoscape.stylesheet() 
.selector('node') 
.css({ 
'background-color': 'gray', 
'border-color' : 'black', 
'border-width' : 3 
'width': 'mapData(degree,1,10,10,50)', 
'height': 'mapData(degree,1,10,10,50)' 
}) 
.selector('edge') 
.css hogehoge 
mapData メソッド 
要素の属性を指定値で可視化 
( 次数, 最小, 最大,10,50) にスケーリング
Javascript であれこれ 
描画の準備DOM 全部読み込んだら動作させる 
クリックしたらsmiles を表示 
static なグラフは 
mapData を使える 
ready: function(){ 
// this refer cy 
console.log("ready2"); 
window.cy = this; 
cy.load(items); 
// insert some events! 
cy.on('tap', 'node', function(){ 
alert("smiles is "+this.data('smi')); 
cy.on('tap', 'node', function(){ 
window.open(this.data('href')); 
$('#mol_wt').text("mol_wt is; "+this.data('molwt')); 
}); 
} 
クリックしたら構造を取得する
Layout 
null 
random 
preset 
grid 
circle 
concentric 
breadthfirst 
dagre 
cose 
cola 
arbor 
springy 
複数のアルゴリズムがあります
サンプル作ってみました 
https://github.com/iwatobipen/mishimasyk
実行すると多分動く 
Flask, flask-bootstrap は必要ですが。
Cytoscape に比べノードエッジの数が多いと挙動が遅くなる。 
ですが,webapp であれこれできるので 
とても興味深いツールではないかと思います

More Related Content

What's hot

初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外higaki
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外higaki
 
Perlでちょいモテデザインパターン
PerlでちょいモテデザインパターンPerlでちょいモテデザインパターン
PerlでちょいモテデザインパターンYuki Manno
 
for JSDeferred Code Reading
for JSDeferred Code Readingfor JSDeferred Code Reading
for JSDeferred Code ReadingKenichirou Oyama
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
Garageをもうちょっと触ってみた
Garageをもうちょっと触ってみたGarageをもうちょっと触ってみた
Garageをもうちょっと触ってみたYoichi Toyota
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外higaki
 
JavaScript超入門 基礎
JavaScript超入門 基礎JavaScript超入門 基礎
JavaScript超入門 基礎tetsu6
 
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublishedYoichiro Sakurai
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかJ qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかHisashi Aruji
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回Joe_noh
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSONYuka Ezura
 
Development app-with-elixir
Development app-with-elixirDevelopment app-with-elixir
Development app-with-elixirk1complete
 

What's hot (20)

初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
 
Clojrue 13 testing
Clojrue 13 testingClojrue 13 testing
Clojrue 13 testing
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
 
0x300
0x3000x300
0x300
 
Perlでちょいモテデザインパターン
PerlでちょいモテデザインパターンPerlでちょいモテデザインパターン
Perlでちょいモテデザインパターン
 
for JSDeferred Code Reading
for JSDeferred Code Readingfor JSDeferred Code Reading
for JSDeferred Code Reading
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Garageをもうちょっと触ってみた
Garageをもうちょっと触ってみたGarageをもうちょっと触ってみた
Garageをもうちょっと触ってみた
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
 
JavaScript超入門 基礎
JavaScript超入門 基礎JavaScript超入門 基礎
JavaScript超入門 基礎
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished20120422i phonedeveloperworkshoppublished
20120422i phonedeveloperworkshoppublished
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかJ qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているか
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSON
 
Development app-with-elixir
Development app-with-elixirDevelopment app-with-elixir
Development app-with-elixir
 

Viewers also liked

FAMSとchooseLDを用いたインシリコ創薬パイプライン
FAMSとchooseLDを用いたインシリコ創薬パイプラインFAMSとchooseLDを用いたインシリコ創薬パイプライン
FAMSとchooseLDを用いたインシリコ創薬パイプラインY-h Taguchi
 
IPython notebookを使おう
IPython notebookを使おうIPython notebookを使おう
IPython notebookを使おうKazufumi Ohkawa
 
あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史Kazufumi Ohkawa
 
主成分分析を用いた教師なし学習による変数選択を用いたヒストン脱アセチル化酵素阻害剤の機能探索
主成分分析を用いた教師なし学習による変数選択を用いたヒストン脱アセチル化酵素阻害剤の機能探索主成分分析を用いた教師なし学習による変数選択を用いたヒストン脱アセチル化酵素阻害剤の機能探索
主成分分析を用いた教師なし学習による変数選択を用いたヒストン脱アセチル化酵素阻害剤の機能探索Y-h Taguchi
 
実践で学ぶネットワーク分析
実践で学ぶネットワーク分析実践で学ぶネットワーク分析
実践で学ぶネットワーク分析Mitsunori Sato
 
現在のDNNにおける未解決問題
現在のDNNにおける未解決問題現在のDNNにおける未解決問題
現在のDNNにおける未解決問題Daisuke Okanohara
 
Python東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようPython東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようHiroshi Funai
 
IIBMP2016 深層生成モデルによる表現学習
IIBMP2016 深層生成モデルによる表現学習IIBMP2016 深層生成モデルによる表現学習
IIBMP2016 深層生成モデルによる表現学習Preferred Networks
 
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門Keiichiro Ono
 
IPAB2017 深層学習を使った新薬の探索から創造へ
IPAB2017 深層学習を使った新薬の探索から創造へIPAB2017 深層学習を使った新薬の探索から創造へ
IPAB2017 深層学習を使った新薬の探索から創造へPreferred Networks
 

Viewers also liked (20)

Rdkitの紹介
Rdkitの紹介Rdkitの紹介
Rdkitの紹介
 
Mishimasyk 3 20140705
Mishimasyk 3 20140705Mishimasyk 3 20140705
Mishimasyk 3 20140705
 
201310slide day1
201310slide day1201310slide day1
201310slide day1
 
Mishimasyk5 chemomine up
Mishimasyk5 chemomine upMishimasyk5 chemomine up
Mishimasyk5 chemomine up
 
Mishimasyk6 iwatobipen
Mishimasyk6 iwatobipenMishimasyk6 iwatobipen
Mishimasyk6 iwatobipen
 
FAMSとchooseLDを用いたインシリコ創薬パイプライン
FAMSとchooseLDを用いたインシリコ創薬パイプラインFAMSとchooseLDを用いたインシリコ創薬パイプライン
FAMSとchooseLDを用いたインシリコ創薬パイプライン
 
Mishimasyk
MishimasykMishimasyk
Mishimasyk
 
IPython notebookを使おう
IPython notebookを使おうIPython notebookを使おう
IPython notebookを使おう
 
あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史
 
主成分分析を用いた教師なし学習による変数選択を用いたヒストン脱アセチル化酵素阻害剤の機能探索
主成分分析を用いた教師なし学習による変数選択を用いたヒストン脱アセチル化酵素阻害剤の機能探索主成分分析を用いた教師なし学習による変数選択を用いたヒストン脱アセチル化酵素阻害剤の機能探索
主成分分析を用いた教師なし学習による変数選択を用いたヒストン脱アセチル化酵素阻害剤の機能探索
 
Mishimasyk141025
Mishimasyk141025Mishimasyk141025
Mishimasyk141025
 
R -> Python
R -> PythonR -> Python
R -> Python
 
R seminar on igraph
R seminar on igraphR seminar on igraph
R seminar on igraph
 
実践で学ぶネットワーク分析
実践で学ぶネットワーク分析実践で学ぶネットワーク分析
実践で学ぶネットワーク分析
 
現在のDNNにおける未解決問題
現在のDNNにおける未解決問題現在のDNNにおける未解決問題
現在のDNNにおける未解決問題
 
Python東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしようPython東海Vol.5 IPythonをマスターしよう
Python東海Vol.5 IPythonをマスターしよう
 
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
 
IIBMP2016 深層生成モデルによる表現学習
IIBMP2016 深層生成モデルによる表現学習IIBMP2016 深層生成モデルによる表現学習
IIBMP2016 深層生成モデルによる表現学習
 
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
 
IPAB2017 深層学習を使った新薬の探索から創造へ
IPAB2017 深層学習を使った新薬の探索から創造へIPAB2017 深層学習を使った新薬の探索から創造へ
IPAB2017 深層学習を使った新薬の探索から創造へ
 

Similar to mishimasyk#4

Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsuNanha Park
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-Hiromu Yakura
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesNoritada Shimizu
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)Masanori Machii
 
130710 02
130710 02130710 02
130710 02openrtm
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
Pythonでカスタム状態空間モデル
Pythonでカスタム状態空間モデルPythonでカスタム状態空間モデル
Pythonでカスタム状態空間モデルHamage9
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoTsuyoshi Yamamoto
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについてShoichi Takagi
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門Kohki Miki
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶShumpei Shiraishi
 

Similar to mishimasyk#4 (20)

Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 
Xtext 紹介
Xtext 紹介Xtext 紹介
Xtext 紹介
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
OSC京都2011
OSC京都2011OSC京都2011
OSC京都2011
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)
 
Python Autotest pdc2008w
Python Autotest pdc2008wPython Autotest pdc2008w
Python Autotest pdc2008w
 
130710 02
130710 02130710 02
130710 02
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
Pythonでカスタム状態空間モデル
Pythonでカスタム状態空間モデルPythonでカスタム状態空間モデル
Pythonでカスタム状態空間モデル
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
 

mishimasyk#4

  • 2. 自己紹介 ● 某製薬企業で働いてます。 ● 普段はウェット側(一応)。 ● 興味=>chemoinfo。
  • 3. Cytoscape.js ● http://js.cytoscape.org/ ● Cytoscape とは全く同じではありません ● エンドユーザー側でなく開発側のアプリ ● jQuery と同じ雰囲気
  • 4. Cytoscape.js でアクセスする要素 cy; core• ベース eles; ノードもしくはエッジの集合 ele; ノードもしくはエッジ nodes; ノードの集合 node; ノード edges; エッジの集合 edge; エッジ object.function1().function2()....
  • 5. たとえば。。。selectors cy.style() .selector('node[degree >= 5]') .css({'hoge' : 'huga'}).update() ノードオブジェクトのうち 結合次数 > 5 のノードに関して hoge を huga とする 変更を反映させる
  • 6. 分子の類似性でネットワーク 俺たちそっくりだね〜 類似性高いね〜 ☆ 本日のサンプル ①分子をFingerPrint で記述 ②類似性が閾値より高い時エッジを結ぶ ③ cytoscape.js で可視化 mol 1 mol 2 Tc > 0.8
  • 7. Javascript + HTML... うおー( ; ・`ω ・´) JavaScript & HTML ? 開発なんてしたことない、、、オマエ書けよ〜 無理無理
  • 8. そうだPython でいこう! Flask でがんばろー おー!!! * 普通にHTML 書けるのなら そちらで全然問題ないです。
  • 9. Flask なのでこんな構成 iwatobipen$ tree mishimasyk4 mishimasyk4 ├ ── Readme.rst ├ ── __init__.py ├ ── app.py ├ ── requierments ├ ── sampledata │ ├ ── __init__.py │ ├ ── csv_sdf.py │ ├ ── document chemistry_20141011_130145_833.csv │ ├ ── document chemistry_20141011_130145_833.sdf │ └── for_network.py ├ ── static │ ├ ── js │ │ ├ ── javascript いろいろ │ └── jsondata │ └── mols.json └── templates ├ ── templ.html  テンプレート └── top.html
  • 11. “nodes”: ネットワークをJSON で [{ "data": { "degree": 1, "molwt": 379.5, 後ほどリンクで画像をとる "href": "http://cactus.nci.nih.gov/chemical/structure/smi/image", "smi": "COc1cc2[nH]c(C)c(CCN3CCN(c4ccccc4)CC3)c2cc1OC", "id": "mol_0", "molid": 0 }}, ], “edges”: [ { "data": { "source": "mol_237", "target": "mol_207", "id": "237>>207", "similarity": 0.75 }, ] 結合次数 エッジの向きも表現できます
  • 12. RDKit でつくりました。 class Node(object): def __init__(self,mol): self.mol = mol def mw( self ): return round( Descriptors.MolWt( self.mol ), 2 ) def smi( self ): return Chem.MolToSmiles( self.mol ) class Edge(object): def __init__(self, mol1, mol2 ): self.mol1 = mol1 self.mol2 = mol2 def source( self ): return Chem.MolToSmiles( self.mol1 ) def target( self ): return Chem.MolToSmiles( self.mol2 ) def sim(self): fp1 = AllChem.GetMorganFingerprintAsBitVect(self.mol1, 2) fp2 = AllChem.GetMorganFingerprintAsBitVect(self.mol2, 2) tc = DataStructs.TanimotoSimilarity(fp1,fp2) return tc Node class Edge class
  • 13. 前のコードで作ったファイルを読む <script> // load JSON items = [] $.getJSON(("static/jsondata/mols.json"), function(data){ items = data; return items; }); </script> JSON ファイルを読み込んでおく
  • 15. Flask では特別なことしない Flask 便利だね〜 BootStrap も使えるね〜 from flask import Flask from flask_bootstrap import Bootstrap from flask import render_template def create_app(): app = Flask( __name__ ) Bootstrap( app ) return app app = create_app() @app.route("/") def root(): return render_template("top.html") @app.route("/circle") def circle(): return render_template("circle.html") @app.route("/cola") def cola(): return render_template("cola.html") Make web Using flask
  • 16. Template 側のjavascript cy というID のdiv にバインドする static なグラフは mapData を使える $(function(){ $("#cy").cytoscape({ style: cytoscape.stylesheet() .selector('node') .css({ 'background-color': 'gray', 'border-color' : 'black', 'border-width' : 3 'width': 'mapData(degree,1,10,10,50)', 'height': 'mapData(degree,1,10,10,50)' }) .selector('edge') .css hogehoge mapData メソッド 要素の属性を指定値で可視化 ( 次数, 最小, 最大,10,50) にスケーリング
  • 17. Javascript であれこれ 描画の準備DOM 全部読み込んだら動作させる クリックしたらsmiles を表示 static なグラフは mapData を使える ready: function(){ // this refer cy console.log("ready2"); window.cy = this; cy.load(items); // insert some events! cy.on('tap', 'node', function(){ alert("smiles is "+this.data('smi')); cy.on('tap', 'node', function(){ window.open(this.data('href')); $('#mol_wt').text("mol_wt is; "+this.data('molwt')); }); } クリックしたら構造を取得する
  • 18. Layout null random preset grid circle concentric breadthfirst dagre cose cola arbor springy 複数のアルゴリズムがあります
  • 21. Cytoscape に比べノードエッジの数が多いと挙動が遅くなる。 ですが,webapp であれこれできるので とても興味深いツールではないかと思います