1. Qiita
  2. 投稿
  3. Ruby

PyCallでRubyからPythonのライブラリを使ってみた

  • 2
    いいね
  • 0
    コメント

はじめに

mrktさんがPyCallというライブラリを開発されているので、早速試してみました。

https://twitter.com/mrkn

インストール

ソースコードがGitHubからダウンロードできます。

https://github.com/mrkn/pycall

2017年2月23日現在、開発中のブランチからダウンロードするとのことだったので、以下のコマンドで入手しました。

git clone -b eval https://github.com/mrkn/pycall.git

そこからGemのインストールに少々手こずってしまいましたが、以下の手順でインストールができました。
もっとスマートな方法をご存知の方がおられましたらご教示ください(汗)

# Gemファイルの作成
gem build pycall/pycall.gemspec 
# Gemのインストール
gem install pycall-0.1.0.alpha.gem 
# なぜかGemのフォルダ内が空っぽなので、とりあえず削除
rm -rf ~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/pycall-0.1.0.alpha
# ダウンロードしたソースをコピー
mv pycall ~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/pycall-0.1.0.alpha

ちなみに、僕はPythonをAnacondaでインストールして使い、Rubyはrbenvを使ってインストールしたものを利用しています。

とりあえずグラフを描画してみる

以下のコードでグラフを表示できました。

require 'pycall/import'
include PyCall::Import

pyimport 'numpy', as: 'np'
pyimport 'matplotlib.mlab', as: 'mlab'
pyimport 'matplotlib.pyplot', as: 'plt'

plt.plot.([1,3,4,6,7,9])
plt.plot.([3,2,4,1,5,0])
plt.show.()

スクリーンショット 2017-02-24 6.12.33.png

iRuby Notebookでグラフを表示してみる

上記のソースコードをiRuby Notebookで実行すると、グラフを描画することはできるのですが、同じように別ウィンドウでグラフが表示されました。

しかも、その後の動作がちょっと不安定(汗)

これではちょっと困るので、以下のように変更。

require 'pycall/import'
include PyCall::Import

pyimport 'numpy', as: 'np'
pyimport 'matplotlib.mlab', as: 'mlab'
pyimport 'matplotlib.pyplot', as: 'plt'

plt.plot.([1,3,4,6,7,9])
plt.plot.([3,2,4,1,5,0])

# グラフを画像として保存
plt.savefig.("pycall.png")
plt.close.()

# 保存されたグラフの画像を読み込む
open("pycall.png")

Unknown.png

インラインで表示させることができました。

グラフのサイズを変更してみる

指定しないと正方形のグラフが表示されたので、これを少し変更します。

require 'pycall/import'
include PyCall::Import

pyimport 'numpy', as: 'np'
pyimport 'matplotlib.mlab', as: 'mlab'
pyimport 'matplotlib.pyplot', as: 'plt'

plt.figure.(figsize: PyCall.tuple(8, 3))
plt.plot.([1,3,4,6,7,9])
plt.plot.([3,2,4,1,5,0])

# グラフを画像として保存
plt.savefig.("pycall.png")
plt.close.()

# 保存されたグラフの画像を読み込む
open("pycall.png")

Unknown.png

できた!

次は機械学習を試してみたくなりますね(^-^)