Edited at

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

More than 1 year has passed since last update.

※ 最新版が公開されました。

ライブラリが更新され、かなり使い方が変わっています。

以下の記事にて新しいバージョンの説明をしてありますので、ご確認下さい。

PyCallを使ってRubyからPythonのライブラリを使い倒す


はじめに

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

https://twitter.com/mrkn


インストール

2017年2月24日現在、以下の手順でインストールできるようになりました。

mrknさん、ありがとうございます。

gem install --pre pycall


旧インストール方法

備忘録的に残しておきます。

もし、上記手順でインストールできなかった場合にお試し下さい。

ソースコードが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

できた!

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


機械学習もしてみました(追記)

電力需要予測を実行した結果を以下のURLから参照できますので、興味のある方がおられましたらご覧下さい。

電力需要実績から電力需要予測

http://blueomega.jp/predict_kw_with_pycall.html

電力需要実績に1時間前の気温を加えて電力需要予測

http://blueomega.jp/predict_kw_with_temp_and_pycall.html