Ruby - RSRuby でグラフ描画!

Updated:


少し前に、統計解析向けプログラミング言語 R について記事にしました。

今日は、Ruby で R のグラフを描画できる Gem パッケージ RSRuby を導入してみました。

以下、作業記録です。

作業記録

0. 前提条件

  • Scientific Linux 6.3 (64bit) での作業を想定してますが、他のディストリビューションでも同じか同様です。
  • Ruby 1.9.3-p194
  • R がインストール済みである。 ・R のインストールディレクトリ : /usr/lib64/R ・R のインクルードディレクトリ : /usr/include/R

1. 環境変数設定

“.bash_profile” ファイルに以下を追加して、有効化。 (全ユーザ共通なら “/etc/profile” に)

# vi .bash_profile
export R_HOME=/usr/lib64/R
# source ~/.bash_profile
# echo $R_HOME
/usr/lib64/R

2. gem でインストール

以下のようにして gem でインストールする。

# gem install rsruby -- --with-R-dir=/usr/lib64/R --with-R-include=/usr/include/R
# gem list | grep rsruby
rsruby (0.5.1.1)

3. 動作確認

irb を起動して、自然数 { 1, 2, 3, 4, 5 } の標準偏差を計算してみる。

$ irb
irb(main):001:0> require 'rsruby'
=> true
irb(main):002:0> r = RSRuby::instance
=> #<RSRuby:0x00000002a23008 @default_mode=-1, @class_table={}, @proc_table={}, @caching=true, @cache={"get"=>#<RObj:0x00000002a22dd8>, "T"=>true, "TRUE"=>true, "F"=>false, "FALSE"=>false, "parse"=>#<RObj:0x00000002a22108>, "eval"=>#<RObj:0x00000002a21870>, "NA"=>-2147483648, "NaN"=>NaN, "help"=>#<RObj:0x00000002a20358>, "helpfun"=>#<RObj:0x00000002a20358>}>
irb(main):003:0> r.sd([1,2,3,4,5])
=> 1.5811388300841898
irb(main):004:0>

不偏分散が \(\sigma ^ 2 = \displaystyle\frac{1}{n-1} \sum_{i=1} ^ {n}(x_i-\bar{x}) ^ 2\) なので、正の平方根をとると計算値は合っている。

次に、グラフを表示(データをプロット)してみる。

$ irb
irb(main):001:0> require 'rsruby'
=> true
irb(main):002:0> D = { "a"=>[1, 2, 3, 4, 5], "b"=>[100, 110, 105, 120, 125] }
=> {"a"=>[1, 2, 3, 4, 5], "b"=>[100, 110, 105, 120, 125]}
irb(main):003:0> r = RSRuby::instance
=> #<RSRuby:0x00000002987900 @default_mode=-1, @class_table={}, @proc_table={}, @caching=true, @cache={"get"=>#<RObj:0x000000029877e8>, "T"=>true, "TRUE"=>true, "F"=>false, "FALSE"=>false, "parse"=>#<RObj:0x00000002987130>, "eval"=>#<RObj:0x00000002986f28>, "NA"=>-2147483648, "NaN"=>NaN, "help"=>#<RObj:0x00000002985fd8>, "helpfun"=>#<RObj:0x00000002985fd8>}>
irb(main):004:0> r.eval_R(<<-RCOMMAND)
irb(main):005:1" A <- matrix( c( #{D["a"].join(",")} ), 1, #{D["a"].size} )
irb(main):006:1" B <- matrix( c( #{D["b"].join(",")} ), 1, #{D["b"].size} )
irb(main):007:1" plot(A, B)
irb(main):008:1" pdf("result.pdf", paper="a4")
irb(main):009:1" A <- matrix( c( #{D["a"].join(",")} ), 1, #{D["a"].size} )
irb(main):010:1" B <- matrix( c( #{D["b"].join(",")} ), 1, #{D["b"].size} )
irb(main):011:1" plot(A, B)
irb(main):012:1" dev.off()
irb(main):013:1" RCOMMAND
=> {"X11cairo"=>2}
irb(main):014:0>

グラフが表示され、PDF ファイルも作成された。

RUBY_RSRUBY_01

参考サイト


Ruby で R によるグラフが描画できるようになったので、何かと応用できそうです。(特に Ruby on Rails)

以上。





 

Sponsored Link

 

Comments