多次元尺度構成法によるグラフの作成続き

はじめに

前回作成した座標データを使って,グラフを作成してみます.
これにより,各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つです.


これで終わりかよ.