LoginSignup
44
35

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-23

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

ライブラリが更新され、かなり使い方が変わっています。
以下の記事にて新しいバージョンの説明をしてありますので、ご確認下さい。

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

はじめに

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

インストール

2017年2月24日現在、以下の手順でインストールできるようになりました。
mrknさん、ありがとうございます。

gem install --pre pycall

旧インストール方法

備忘録的に残しておきます。
もし、上記手順でインストールできなかった場合にお試し下さい。

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

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

44
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
35