PythonでInteractive NetworkGraph Visualization@ebitia2020/7/31Members. data #2データ可視化・ライブラリLT編
View Slide
whoamiEbitia- 薬学部6年- 研究室でNLP- 最近冷やしAtCoder始めました@TwYamat
TABLE OF CONTENTSINTRODUCTIONどんなグラフを可視化したいか?TOOLSPythonではどんなものがある?PRACTICE実際に可視化してみるCONCLUSIONまとめAPPENDIXおまけ01 0204 0503
01 INTRODUCTIONどんなグラフを可視化したいのか?- AtCoder Graph- Molecular Graph- Word Graph
AtCoderとは?- 日本の競技プログラミングコンテストサイト(天才以外お断りパズルコンテストとも呼ばれる)- ほぼ毎週コンテストが無料開催- 問題の条件を満たすプログラミングのスピードや正確性を競うCASE1:AtCoder
この問題文にはグラフ例が書いてあるが、書いてない問題もある入力が複雑だとイメージできない(当社比)(他の形式として、有向/重み付き/木構造/grid/etc...)AtCoderのグラフ問題
ChEMBLから取得できる医薬品の構造データ構造を見れるサイト、ツールはいろいろあるが重み付き無向グラフとして扱うこともできるCASE2:分子構造のグラフ
テキスト解析で、単語の関係性を見たい場合似た意味・関連語を近くに置いたグラフを作成する例えば- Jaccard係数での共起ネットワーク可視化- Word embeddingを3Dグラフで可視化CASE3:単語の関係性
要するにNodeとedgeの集合として与えられたグラフをいい感じに可視化したい(できればinteractiveに)
TOOLSpythonでグラフ可視化に使えるモジュールいろいろ紹介02
- NetworkX- Graph-tools- python-igraph- Graphviz- pyvis上記と組み合わせると便利なもの- webweb- netwulfPythonでinteractive graph visualization
・意外とたくさんある・基本的にはNetworkXでは色んなオプションがあるので便利・速度比較すると、graphviz,graph-toolsよりも遅い場合もある(微妙に)・NetworkXにはいろいろ拡張モジュールが開発されているので便利どのツールを使えばいいのか?
・Netwulfとは?NetworkXのスタイルをインタラクティブに設定できるモジュール例:NetworkX+Netwulf
PRACTICE実際にpythonでinteractive03
・NetworkXで作ったグラフをpyvisでhtml化して可視化できる[demo]NetworkX+pyvis+jupyter notebook
・最近streamlitが流行と聞いたので...[demo]NetworkX+streamlitでAtCoderの可視化
CONCLUSION04
- Networkx+○○でinteractive network graphが作成できる、小さな用途では十分?- 大規模ネットワーク等では速度なども要検証- AtCoderのグラフ可視化については今後作っていきたい所存(意外と奥が深かった...)まとめ
APPENDIX05おまけ
NodeとEdgeの情報が与えられたとして(どのnode同士が結ばれてるか/辺の重み,向きなど)どうやったらグラフを綺麗に描画できるのか?求めることは意外とたくさんある...ノードが重ならない方がいい、グラフの面積が大きすぎないほうがいい、辺の交差は少ないほうがいい、辺の角度も小さすぎないほうがよい、etc…(余談)Graph Drawingについて①
色んな理論が研究されているが、その中でも有力なものとして力学モデルがある今回紹介するツールでは以下の2つが組み込まれているものが多い・Kamada-Kawai法・Fruchterman-Reingold 法(余談)Graph Drawingについて②
今回紹介したnetworkxでは、springlayoutでFruchterman-Reingold法1. ランダムに頂点配置2. 頂点間に働く力を計算3. 頂点を力に従い移動4. 温度tを下げる5. 2~4を繰り返す(default=50)(余談)Graph Drawingについて③
end