DashHandsOn05 (May13, dash-bio)
はんなりPythonハンズオン dash-bioとコンポーネントの作り方編
ハンズオン5回目
3,4回目はコールバックに触れた
資料
今回はコンポーネント集dash-bioとその独自コンポーネントの作り方について触れる (コールバックは全く触れないです)
自己紹介
最近作っているもの
など
今日やること
https://gyazo.com/9a24d9017300ba9612c51361c2a7daba
dashのコンポーネント集とは
コンポーネントとは
コンポーネント集とは
コンポーネント集の一つdash-bioとは
とりあえずdash-bioのコンポーネントを試す
dash-bioからコンポーネントの作り方を学ぶ
なぜdash-bioでコンポーネントの作り方を学ぶのか
bioでなくても使えるの?
コンポーネント作成実践
dashのコンポーネント集とは
コンポーネントとは
特定形式のデータを渡すとそれに応じたビジュアルをレンダリングしてくれるもの。すでに DashHandsOn03 でコンポーネントという用語を過去に使ってはいる 辞書のリストを渡すとチェックリストができる
ビジュアルをコントロールするためにたくさんのデータプロパティがある
ここではデータというかplotlyの図を渡す(といろんなビジュアルが作れる)
ここでビジュアルをコントロールするためのプロパティがある(が例1とはちょっと趣が異なっている)
コンポーネント集とは
コンポーネントをグループ分けしたもの
グループ分けはまあ「なんとなく」になるかと
その「なんとなく」の概念がコンポーネント集の名前になっている
ただ「このグループで行くぞ!」みたいな意思はある
今のとこ「このグループ」にはbioとdaq(data acquisition)の2つがある
コンポーネント集で一個のPythonパッケージになっているものもあれば、コンポーネント(1つ)でPythonパッケージになっているものもある
後者の例 dash-datatable, dash-cytoscape(ネットワーク可視化)
コンポーネント集の一つdash-bioとは
「なんとなく」の分類を「biology向け」としたもの
なんでplotlyの人がbioをコンポーネント集として追加しようとしたか? は下記動画の5分半あたりで「急速成長分野だから」「"big data"の使用が増えているから」「bioでは高度に特化されたデータ分析ツールが必要だから」「dashはそういう"高度に特化された"ものを作るのに向いているから」と言っている https://www.youtube.com/watch?v=L9r23bXDoEs
とりあえずdash-bioのコンポーネントを試す(ここからハンズオンです)
「高度に特化された」がどういうものかを感じとるためにとにかくコンポーネントを試用する
Google Colab で Dash を使う (with ngrok) ノートブックのセルの意味はみんなで動かしつつ紹介
dash-bioからClustergramとVolcanoPlotを挙げる
Clustergram == Heatmap + Dendrogram
入力データは普通の特徴量行列
出力(ビジュアル)は特徴量をヒートマップで可視化しつつhierarchical clusteringしたもの
VolcanoPlot == 横軸(2つのグループの平均値の比率) + 縦軸(統計的有意差)
入力データは実際見つつ説明
出力(ビジュアル)も実際見つつ説明
どっちも特定の入力データフォーマットを特定の目的のために標準のplotlyのコンポーネントを「アレンジ」したビジュアルを作っている
立ち入らないがdash-bioではその「入力データフォーマット」を「DNA配列データ」などにしたものがある
dash-bioからコンポーネントの作り方を学ぶ
なぜdash-bioでコンポーネントの作り方を学ぶのか?
Pythonだけでコンポーネントを作っている例がある唯一のコンポーネント集だから
独自コンポーネントの作り方のお手本としやすい。いきなりjavascriptを書くことを求められるコンポーネントを作ろうとするのはきつい
dash-daqのようなコアコンポーネント(≒plotly)にないビジュアルのコンポーネントを作るにはjs(react)を書く必要がある
dash-bioには3つのPure Python のコンポーネントがある
https://gyazo.com/b81c2b5724281f112452151e3b27fc77
コンポーネント作成実践
特定のデータフォーマットを入力とし、何らかのdcc.Graphオブジェクトを返すものを作ればそれはdashコンポーネントと言える
(楽するために)人様のappとしての成果物をコンポーネント化する
https://gyazo.com/e7a3c4b87523d601396e7399db661d8e
phyloxml というxmlを入力とし図のようなビジュアルを作るもの
これが 下記のapp.pyで作れたら「コンポーネントを作った」と言える
code:app4.py
import dash_hannari as dashhannari
import dash
import dash_html_components as html
from Bio import Phylo
tree = Phylo.read('data/apaf.xml', 'phyloxml')
component = dashhannari.PhylogenyTree(tree)
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div(component)
if __name__ == '__main__':
app.run_server(debug=True)
課題?
あなたならどんなコンポーネントを?
入力(データフォーマット)は?
出力(ビジュアル)は?
この先は?
「コンポーネントのプロパティ」「サンプルのapp.py」 -> ふたたび入出力の調整 -> ... -> PyPI package?
jsを書かないと実現できないコンポーネント
react
そのreactのPythonラップ
おわり