はじめに
最終回となる今回は、これまでの学習内容のまとめとして、はてなブックマークの人気エントリーをツリーマップとして可視化します。
この可視化では、ノードの表示位置によってブックマークのカテゴリ特性を、ノードの大きさによってブックマーク数を、そして色によってブックマークの「コメント率」を、それぞれ視覚的に表現します。
ソースコードのダウンロード
今回作成するプログラムのソースコードは、こちらから一括してダウンロードすることができます。ZIPファイルを展開して生成されるフォルダを、プロジェクトとしてNetBeansに読み込むことも可能です。
特徴量ベクトルの生成
前回のプログラムでは、はてなブックマークにユーザーが付与したタグの一覧を収集しました。このタグ情報を特徴量ベクトルに変換し、第2回で作成したMultiVectorクラスのインスタンスとして表現することを考えます。
このとき問題となるのは、MultiVectorクラスのベクトル要素の添え字が整数である一方、タグが文字列であるため、タグをそのまま添え字としては使用できないことです。
そこで、タグを整数インデックスに変換するIndexMapperクラスを以下のように作成します。IndexMapperクラスは、put()メソッドで新しいタグが追加されるたびに、0, 1, 2, ...と順にインデックスを割り振り、ハッシュマップに記憶します。割り振られたインデックスは、後からget()メソッドで取得することができます。
IndexMapperクラスを使って、ブックマークエントリーに付与された全てのタグをインデックス化し、タグの出現回数を成分とすることで、エントリーの特徴量を持つベクトルを生成することができます(図1)。
ブックマークノードクラスの作成
タグのベクトル化が可能となったところで、ブックマークエントリーのノードクラスとなるBookmarkItemクラスを作成します。このクラスは、第2回で作成したItemクラスを継承しており、階層的クラスタリングの入力ノードとして使用することができます。
MultiVectorオブジェクトを作成した後、normalize()メソッドでベクトルを正規化していることに注意してください。階層的クラスタリングにおけるベクトル間の距離計算時に、特徴の差となる「角度差」を最大限に検出するため、あらかじめベクトルを正規化して長さを揃えているのです。
「実用系ブックマーク」と「議論系ブックマーク」の色分け
はてなブックマークは、純粋にページを記録する目的に基づく「実用系ブックマーク」と、ページの内容についてユーザーが意見を述べ合うことを目的とした「議論系ブックマーク」の2つの側面を持っています。一般に、ブックマークエントリーのコメント率(コメントを記入しているユーザーの割合)が高いほど、「議論系ブックマーク」の傾向が強くなります。
ツリーマップ上で、この「実用系」または「議論系」の度合いを可視化することを考えましょう。ブックマークエントリーのコメント率に応じて、ツリーマップ領域の色合いを変化させます。今回は、コメント率が低いほど緑色、高いほど赤色に近い色で領域を描画するようにしてみます。こうすることで、緑色の領域は「実用系」、赤色の領域は「議論系」のエントリーと視覚的に判断できるようになります(図2)。
コメント率を求めるため、前回作成したBookmarkDetailクラスとHatenaBookmarkAPIクラスに以下の追加を行い、コメント情報を取得できるようにします。
さらに、第4回で作成したBinaryTreeMapRendererクラスを以下のように修正します。コメント率に応じて、緑から赤までのグラデーションの中から色を決定し、ノード領域を塗りつぶすようにしています。なお、BinaryTreeMapRendererクラスには、ブックマークタイトルの描画など、他にも変更点があります。完全なソースコードはこちらをご覧ください。
デモプログラムの作成
それでは、はてなブックマークの人気エントリーを可視化するDemoクラスを見てみましょう。このクラスは、前回のデモプログラムに階層的クラスタリングとツリーマップの実行処理を付け加え、さらに画像ファイルへの出力処理を追加したプログラムとなっています。
少々長くなりますが、以下にコードの全体を掲載します。
可視化の実行と結果の分析
それではいよいよ、Demoクラスを実行してみましょう。プログラムを実行すると、その時点における、はてなブックマークの最新の人気エントリーの内容が可視化され、画像ファイルとして保存されます。筆者が2008年10月7日に実験を行ったところ、図3の画像が出力されました。
この可視化イメージから、どのような特徴を読み取ることができるでしょうか。いくつか例を挙げてみることにします(図4)。
- イメージの左下部分には、「地球温暖化」「ノーベル物理学賞」「神舟7号」と、環境・サイエンス系統の話題が集まっています。
- イメージの右の部分には、いわゆる「ネタ系統」のエントリーが集まっています。この付近には赤っぽい領域が多いことから、エントリーへのコメント率が高く、「議論系ブックマーク」の傾向が強いことが分かります。
- 「ネタ系統」の領域は、さらに「2ちゃんねる系統」と「新聞系統」に大別されている様子が分かります。
- 「ネタ系統」は、1つ1つの末端領域の面積が比較的小さいことから、1エントリー当たりのブックマーク数が少ない傾向が分かります。
いかがでしょうか。こういったブックマークの特徴は、ブックマーク情報を単にテキストで羅列しただけでは、把握することが困難なものばかりです。階層的クラスタリングとツリーマップという情報可視化手法によって、これまで良く見えなかったデータの全体像が、くっきりと浮き上がってきたのです。
現実の集合知データである、はてなブックマークの人気エントリーを材料とした今回の試みによって、情報可視化の有用性を改めて実感していただけたのではないでしょうか。
最後に
これまで6回にわたり、情報可視化の基礎から実践までを学んできました。本連載では特に、情報可視化手法の具体例として階層的クラスタリングとツリーマップを取り上げ、詳しく解説を行いました。しかし、もちろんこれらは、多彩な情報可視化のテクニックのうちのほんの一部に過ぎません。
本連載では多く触れるに至らなかった「GUIとの融合」のテーマを含め、情報可視化には大きな可能性が広がっています。皆さんもぜひ、データから新たな価値を引き出すことができる、独創的な情報可視化にチャレンジしてみてください。この連載が、その何らかのヒントになれば幸いです。