$30 off During Our Annual Pro Sale. View Details »

PythonでInteractive Network Graph Visualization!

yamatia
July 31, 2020
1.1k

PythonでInteractive Network Graph Visualization!

yamatia

July 31, 2020
Tweet

Transcript

  1. Pythonで
    Interactive Network
    Graph Visualization
    @ebitia
    2020/7/31
    Members. data #2
    データ可視化・ライブラリ
    LT編

    View Slide

  2. whoami
    Ebitia
    - 薬学部6年
    - 研究室でNLP
    - 最近冷やしAtCoder始めました
    @TwYamat

    View Slide

  3. TABLE OF CONTENTS
    INTRODUCTION
    どんなグラフを
    可視化したいか?
    TOOLS
    Pythonでは
    どんなものがある?
    PRACTICE
    実際に
    可視化してみる
    CONCLUSION
    まとめ
    APPENDIX
    おまけ
    01 02
    04 05
    03

    View Slide

  4. 01 INTRODUCTION
    どんなグラフを可視化したいのか?
    - AtCoder Graph
    - Molecular Graph
    - Word Graph

    View Slide

  5. AtCoderとは?
    - 日本の競技プログラミングコンテ
    ストサイト
    (天才以外お断りパズルコンテストとも呼ばれる)
    - ほぼ毎週コンテストが無料開催
    - 問題の条件を満たすプログラミン
    グのスピードや正確性を競う
    CASE1:AtCoder

    View Slide

  6. この問題文にはグラフ例が書いてあるが、書いてない問題もある
    入力が複雑だとイメージできない(当社比)
    (他の形式として、有向/重み付き/木構造/grid/etc...)
    AtCoderのグラフ問題

    View Slide

  7. ChEMBLから取得できる
    医薬品の構造データ
    構造を見れるサイト、
    ツールはいろいろあるが
    重み付き無向グラフとし
    て扱うこともできる
    CASE2:分子構造のグラフ

    View Slide

  8. テキスト解析で、単語の関
    係性を見たい場合
    似た意味・関連語を近くに
    置いたグラフを作成する
    例えば
    - Jaccard係数での共起
    ネットワーク可視化
    - Word embeddingを3Dグ
    ラフで可視化
    CASE3:単語の関係性

    View Slide

  9. 要するに
    Nodeとedgeの集合として
    与えられたグラフを
    いい感じに可視化したい
    (できればinteractiveに)

    View Slide

  10. TOOLS
    pythonでグラフ可視化に使え
    るモジュールいろいろ紹介
    02

    View Slide

  11. - NetworkX
    - Graph-tools
    - python-igraph
    - Graphviz
    - pyvis
    上記と組み合わせると便利なもの
    - webweb
    - netwulf
    Pythonでinteractive graph visualization

    View Slide

  12. ・意外とたくさんある
    ・基本的にはNetworkXでは色んなオプションがあるので
    便利
    ・速度比較すると、graphviz,graph-toolsよりも遅い場合
    もある(微妙に)
    ・NetworkXにはいろいろ拡張モジュールが開発されてい
    るので便利
    どのツールを使えばいいのか?

    View Slide

  13. ・Netwulfとは?
    NetworkXのスタイルをインタ
    ラクティブに設定できるモ
    ジュール
    例:NetworkX+Netwulf

    View Slide

  14. PRACTICE
    実際にpythonでinteractive
    03

    View Slide

  15. ・NetworkXで作ったグラフをpyvisでhtml化し
    て可視化できる
    [demo]
    NetworkX+pyvis+jupyter notebook

    View Slide

  16. ・最近streamlitが流行と聞いたので...
    [demo]
    NetworkX+streamlitでAtCoderの可視化

    View Slide

  17. CONCLUSION
    04

    View Slide

  18. - Networkx+○○でinteractive network graph
    が作成できる、小さな用途では十分?
    - 大規模ネットワーク等では速度なども要検証
    - AtCoderのグラフ可視化については今後作っ
    ていきたい所存(意外と奥が深かった...)
    まとめ

    View Slide

  19. APPENDIX
    05
    おまけ

    View Slide

  20. NodeとEdgeの情報が与えられたとして
    (どのnode同士が結ばれてるか/辺の重み,向きなど)
    どうやったらグラフを綺麗に描画できるのか?
    求めることは意外とたくさんある...
    ノードが重ならない方がいい、グラフの面積が大きすぎないほ
    うがいい、辺の交差は少ないほうがいい、辺の角度も小さすぎ
    ないほうがよい、etc…
    (余談)Graph Drawingについて①

    View Slide

  21. 色んな理論が研究されているが、その中でも有
    力なものとして力学モデルがある
    今回紹介するツールでは以下の2つが組み込ま
    れているものが多い
    ・Kamada-Kawai法
    ・Fruchterman-Reingold 法
    (余談)Graph Drawingについて②

    View Slide

  22. 今回紹介したnetworkxで
    は、springlayoutで
    Fruchterman-Reingold法
    1. ランダムに頂点配置
    2. 頂点間に働く力を計算
    3. 頂点を力に従い移動
    4. 温度tを下げる
    5. 2~4を繰り返す
    (default=50)
    (余談)Graph Drawingについて③

    View Slide

  23. end

    View Slide