還付金が入ったためここ最近非常に強気です。この強気も予定納税とかその辺の書類がきたら一気にしぼみます。
今回はちょっと仕事でも触りそうなので、ネットワーク構造を可視化するのに使えそうなツール、Gephiで遊んでみたのでそのメモ。
ここ最近のオープンなツールは本当によくできてます。うっかりするとこの手のツールを自作したくなってしまう性質なのですが、そんな気持ちを完全に打ち砕いてくれるこの出来の良さ。いい感じです。
この手のツールでは当然元となるデータないと遊べないわけですが、Gephiは親切なことにデータをいくつか紹介してくれていて、手っ取り早くそれで遊ぶということもできます。けど、せっかくなので食わせるデータも自分で作ってみようじゃないかと。だったら、ここ最近増えてきた自分のiTunesライブラリの可視化を試みてしまおうかなと。そんな出来心ではじめました。
トピックとしては以下のような感じで:
- Jolivia+TunesRemoteの流用コードでiTunesライブラリの情報を得る
- gephi-toolkitでグラフデータを組み立て、Gephiに食わせる
- Gephiでグラフを可視化する
iTunesライブラリを引っこ抜いてグラフデータにしてみる
いままで買ってきたCDのうち9割程度はiTunesにインポートしてみたり、デジタルでのコレクションとはいかなるものかみたいなことを考えてきたつもりなわけですが、CDのジャケットをすべてスキャンしてアートワーク設定するみたいな労力をかけている割に、買ってから1ヶ月分くらいしか聴かないのですよ。デジタルもしかるべき管理をしないと埃をかぶるというか。
そうこうしていると、自分のコレクションの全貌がよくわからなくなってきます。そんなとき、iTunesライブラリをDAAP経由で制御できるJolivia (Google Codeに自分のDAAP処理コードをなんとなく置いてたら、俺のを使えとメールが来たので使ってみている) とかその辺のライブラリを使って、自分のiTunesライブラリとはどんなもんなんだというのが見れると楽しいかもなと。一方GephiさんはGephi Toolkitという便利jarを提供してくれていて、Javaプログラマな人間は非常にとっつきやすい感じになっているのでああこれはよいなと。
設計
今回はとにかくグラフがデータとして保存できりゃいいや、というレベルで。
- CUIベースのアプリケーションとして実装する
- Remoteのペアリング対象はコンソールベースで選択する
- 一度ペアリングされた機器はローカルファイルに記憶する
- ペアリングが確立したら即ライブラリの内容を取得し、gexfファイル形式で書き出す
- ライブラリの内容は、 アルバム→曲, アーティスト→曲, これとアーティスト名で文字列的に包含関係があるものを結びつけた形でグラフ化する
考え中に描いた絵はなんだかこんな感じ。
LibraryServiceまわりは、他でもやりたいことがあるのでちょっと分離して実装しています。
実装
コードはgithubにおいてみました。以下のような感じの実装。
- 先の1.~3.は、ペアリング部分はTunesRemoteを流用したコード、ライブラリ読み取り部分はJoliviaを使用している (Joliviaだけだとまだ心もとなく)
- 4.~5.はGephi Toolkitを使用
ビルドするためには、
- Joliviaをcloneしてきてmvn installする
- Gephi Toolkitのjarをダウンロードして、mvn install:install-file -DgroupId=org.gephi -DartifactId=gephi-toolkit -Dversion=0.8.7 -Dfile=gephi-toolkit.jar -Dpackaging=jar としてMavenにjarのありかを覚えこませる
してあげてから、itunes-library-visualizerでmvn packageするとかmvn eclipse:eclipseしてEclipseで開くなりすればOK。
グラフを分析してみる
ここまでで実装したプログラムを動かしてiTunesとペアリングすると、ライブラリの構造をグラフデータ化したgexfファイルが作成されます。こいつを、Gephi素人なので、このへんを参考に解析します。
で、数十分格闘した結果こんなグラフデータができあがり:songs.gephi
俯瞰してもまあなんだかわかりません。なんとなく、相互につながったネットワークは中央のほうに寄っていて、小さなかたまりは端のほうに寄っているように見えます。
小さなかたまり
まずは細かなかたまり、端の方をにょろにょろと眺めてみることにします。端の方はアーティスト名義間の包含関係が少なく、島として独立する傾向が高いクラスタみたい。
懐かしくてよい感じですなあ。久しぶりに聴かねば。柴咲コウとRUIがちゃんとアルバムを介して同じ島にいる感じで、ああ意図を満たしてくれているのかなと。
大きなかたまり:小さなかたまりがゆるやかに集まったもの
そんな風に外周の小さな島をひとしきり眺めて郷愁に浸ったあと、だんだんと円の内側に入って行きます。するとどんどんアニソン成分が増えてきます。単純に自分の趣味的に多いというのもあるのですが、アーティスト相互の関連によってひとつの大きな島になっていて、それで中央に寄っているような感じがしてきます。(単純に自分の買い方の問題の可能性もある)
具体的に見ていくと:
まず奈々様ですね。
ここからアーティスト名の包含関係線を上にたどると・・・
風鳴翼経由でシンフォギアのキャラソンが現れます。神。ということは、
あやひちゃんや碧ちゃんがあらわれるわけです。天使ですね。
この、キャラソンのCV表記でつながるネットワークによって、声優さんのクラスタは相互に接続された非常に大きなものとなり、今回採用したレイアウトアルゴリズムでは中央に引っ張られることになったようです。ただこれは声優さんがソロ名義でリリースしている大前提がありまして(基本的にはアーティスト名文字列の包含関係のみでエッジを作っていて、括弧の解釈などは考えていない)もうちょいまじめに実装したらどうなるのか関心があるところではあります。
大学の頃とかそこそこリア充ぶってた頃はアニソンから離れていたので、物量的にはそこまでアニソンとそれ以外に偏りがないかなと思っていたのですが、そんなことはまったくなかったですね。
こんな感じで、声優さん名義の曲がキャラソンを通してゆるやかに結合しているようなネットワークが現れてきます。この位置情報を曲再生に反映とかしたら楽しいんじゃねとか思ったりします。
大きなかたまり:混沌
初音ミクさん時空が大変カオスな状態になっていました。
関連するアーティストの方々の名前がミクさんの名前で関連づくことに加えて、コンピレーションアルバムの多さでこういう込み入った形になるのかなと想像できます。
しかし、もっとレイアウトアルゴリズムを繰り返し適用したらもっとよい形になるのかもしれないですねえ・・・(デスクトップマシンで1日くらいまわした程度)
とまあ、こんな感じで、役に立つかはおいておいて、自分のライブラリをリストとは別の視点で眺めることはできるわけです。インポート順や、自分の意図を持って組み上げたプレイリストとはまた一味違ったおもむきの見方ということで。
さてあの曲を久しぶりに聴こう。