多次元尺度構成法によるグラフの作成続き
はじめに
前回作成した座標データを使って,グラフを作成してみます.
これにより,各Blog間の様子が目で見れるはずなのですが,どうなるでしょうか.
グラフの作成
Gruffを使って描画させることにします.
やってることは大したことないので,見れば分かると思います.
require 'rubygems' require 'gruff' module My class Graph def initialize(title, matrix) @title = title @matrix = matrix @g = Gruff::Line.new('640x640') setup_gruff setup_data end def write(file_name) @g.write(file_name) end private # Web safe 216 colors def colors colors = [] 0.step(0xFF0000, 0x330000).each do |high| 0.step(0xFF00, 0x3300).each do |mid| 0.step(0xFF, 0x33).each do |low| colors << sprintf("#%06x", (high + mid + low)) end end end colors.sort_by { rand } end def setup_gruff @g.theme_37signals @g.colors = colors @g.hide_line_numbers = true @g.left_margin = 50.0 @g.right_margin = 50.0 @g.title_font_size = 18.0 @g.legend_box_size = 4.0 @g.legend_font_size = 7.0 @g.title = @title end # グラフの見た目のために最後にnilを入れる def setup_data @matrix.each do |label, (x, y)| @g.data(label, Array.new(x + 1) + [y, nil]) end end end end
動作確認
scale_down = My::ScaleDown.new(blog_data_from('blogdata.txt')) scale_down.start graph = My::Graph.new('MDS: http://kiwitobes.com/clusters/blogdata.txt', scale_down.normalized) graph.write('graph.png') end
実行すると↓のようになります.
何かゴミが散らばっているようにしか見えないですね...もうちょっと拡大してみましょうか.
やっぱり何だか分からない.(笑)
最後に
多次元尺度構成法により2次元への落とし込みを行いました.書籍との差は,
- 収束判定に参照する誤差履歴を指定できるようにしました
- Gruffを使って可視化しました
の2つです.
これで終わりかよ.