Project紹介: net-vis - JupyterLabで手軽にネットワーク可視化をするために
今回は、現在開発・メンテナンスを行っている OSS プロジェクト net-vis について紹介します。
JupyterLab 上で複雑なネットワーク構造(グラフ理論のグラフ)を可視化したいとき、これまでは「決定版」といえるツールがなかなか見当たらない状況でした。NetworkX 標準の nx.draw では静的な描画しか生成されず細かい確認が難しいですし、かといって多機能な可視化ライブラリを使おうとするとセットアップが面倒だったりします。
そんな「ちょうどいい」ツールがない隙間を埋めるために開発したのが net-vis です。
開発の経緯
このプロジェクトは、Start Python Club の活動などでもおなじみの辻真吾さんからの提案がきっかけでスタートしました。
「NetworkX でグラフ分析をしているときに、数行のコードで、しかもインタラクティブに動かせる可視化ツールが欲しい」
という、シンプルですが非常に明確なニーズが発端です。 当時も既存の可視化ツールはいくつか存在していましたが、実際に業務や研究で使おうとすると以下のような課題に直面していました。
- JupyterLab の拡張機能として別途インストールが必要
- API が複雑で、サクッと確認するにはコード量がその都度多くなる
- メンテナンスが止まっており、最新の JupyterLab で動作しない
そこで 「pip install だけで動き、追加の設定なしでリッチな可視化ができること」 を最大の目標として開発を始めました。
net-vis の特徴
NetworkX との親和性
Python でネットワーク分析を行う場合、デファクトスタンダードである NetworkX を使うことがほとんどです。net-vis は NetworkX のグラフオブジェクトをそのまま受け取れるように設計しており、分析の流れを止めずに可視化が可能です。
import networkx as nx
from net_vis import Plotter
# グラフデータの準備
G = nx.karate_club_graph()
# これだけで可視化
plotter = Plotter()
plotter.plot(G, title="Karate Club")
このように、可視化のためのコード量は最小限で済みます。内部では D3.js を使用しており、Force-directed (力学モデル) レイアウトでグリグリと動かせるグラフが表示されます。
JupyterLab 3.x / 4.x への対応 (MIME Renderer)
実用面でこだわったのは、インストールの容易さです。
以前の Jupyter 拡張機能のように jupyter labextension install などのコマンドを叩く必要はありません。net-vis は Jupyter の MIME レンダリング機構を利用しているため、Python パッケージをインストールするだけで、JupyterLab が自動的に可視化コンポーネントを表示してくれます。
スタンドアロン HTML エクスポート (v0.6.0)
最近のアップデート(v0.6.0)で追加した機能として、HTML エクスポートがあります。 JupyterLab 上で表示されているインタラクティブなグラフを、そのまま単一の HTML ファイルとして書き出す機能です。 外部の CDN などを参照せず、すべてのリソースが 1 つのファイルに含まれる形(スタンドアロン)で出力されるため、インターネット接続がない環境でも動作します。分析結果をチームメンバーやクライアントに共有する際、「このファイルをブラウザで開いてみてください」と渡すだけで済むので、レポーティングの手段としても便利だと思います。
プロジェクトの状況
net-vis は 2025 年初頭に最初のリリースを行い、その後も定期的にアップデートを続けています。現在の最新版は v0.6.0 で、基本的な可視化機能は一通り揃っています。
現在は、より大規模なグラフを扱えるようにパフォーマンスの改善や、利用可能なレイアウトアルゴリズムの拡充などを計画しています。
もしネットワーク分析や可視化で困っている方がいれば、ぜひ試してみてください。フィードバックや不具合報告も GitHub の Issue にてお待ちしています。