2016年3月7日月曜日

Gephi ことはじめ

グラフとかビジュアライゼーションとかやってみたい,ということで Gephi を触ってみた.試してみるネタとして,手元の Gentoo にインストールされているパッケージの依存関係をグラフにするというもの.

1. データの準備

現在インストールされているパッケージは 1,100 ほど.eix と equery を使用して,それぞれのパッケージの依存関係をすべて CSV に落とす.
# eix-installed -q all | while read pkg; do equery -q d $pkg | sed -e "s|$|,$pkg|"; done | tee data.csv
# wc -l data.csv
9783 data.csv
# head data.csv
x11-libs/gtk+-3.18.7,app-accessibility/at-spi2-atk-2.18.1
app-accessibility/at-spi2-atk-2.18.1,app-accessibility/at-spi2-core-2.18.3
app-accessibility/speech-dispatcher-0.8.1,app-accessibility/espeak-1.47.11-r1
www-client/chromium-49.0.2623.75,app-accessibility/speech-dispatcher-0.8.1
app-eselect/eselect-blas-0.1,app-admin/eselect-1.4.4
app-eselect/eselect-cblas-0.1,app-admin/eselect-1.4.4
app-eselect/eselect-ctags-1.18,app-admin/eselect-1.4.4
app-eselect/eselect-fontconfig-1.1,app-admin/eselect-1.4.4
app-eselect/eselect-java-0.1.0,app-admin/eselect-1.4.4
app-eselect/eselect-lib-bin-symlink-0.1.1,app-admin/eselect-1.4.4
それなりの規模のデータになった.

2. グラフの作成

Gephi のチュートリアルを見ながら試行錯誤してみた結果が以下.
SVG 版: https://drmn.jp/blog/20160307-portage.svg

何かの目的を持ってグラフを作成したわけではないのだけれど,簡単なことは見えてくる.
  • pkgconfig が依存され度ナンバーワン
  • Python, Perl, Java, Haskell 関連のパッケージは当該言語内の依存関係が強い (当然).そのなかでも Haskell は孤高の存在
  • 依存によるコミュニティ分類が,パッケージの種類に対応していそうなところと,混ざっていそうなところがある.メディア関連ライブラリはかなり独立しているのに対し,X 関連と開発関連が混じっているという点が見られる

参考