すこしふしぎ.

VR/HI系院生による技術ブログ.まったりいきましょ.(友人ズとブログリレー中.さぼったら焼肉おごらなきゃいけない)

IPython環境を整えましょう

あけましておめでとうございます!

新年あけましておめでとうございます.年末は祖父宅@宮城でゴロゴロしておりました. ビバ寝正月です.まどまぎサントラをエンドレスで流して梶浦音楽に酔いしれています.

気づけばブログリレーもかなり続いてますね.3ヶ月くらい経つのでしょうか. 果たして2014年もノンストップで駆け抜けるのでしょうか? それともだれかが焼き肉になってしまうのでしょうか? ...自分でないことを祈るばかりです.

データ分析入門買ったよ

さて唐突ですが,自分は学部授業では機械学習に一番感動しました. 機械がデータを理解する,ってロマンがありますよね. 授業ではコンピュータビジョンとして画像認識が多かったのですが, "ただの画素値の集合"のなかから特定物体を見つけたり,同系統に分類したりするって,ほんとにすごいことだと思います.

人間ってなんでこんな簡単に画像中からモノを分類できるんでしょうね. 両眼視差?奥行き間? いやいや片目になっても見分けられますね. 一次情報としての画素値よりも,意味論的なところで分類を行っているんじゃないかなとは思うのですが,いやはや人間の脳は面白いものです.

それとはちょっと話が変わるのですが,最近データサイエンスに興味がでてきております. ライフログ使ってのパーソナライズされた情報提示とかおもしろそうだなと. あわせて機械学習とかの復習もしてみたいと思っています.

んで本屋をぶらついていたらこんなん見つけました. O'Reillyのpythonによるデータ分析入門なる本です.

こんなん.

f:id:ism1000ch:20140101004257j:plain

おお,なんとタイムリーなのでしょう.思わず買ってしまいました.

まだあまり読めていないですが,numpy,pandasなどを使ったデータ分析がテーマで,分析手法というよりはnumpyやpandasの使い方の紹介がメインのようです. pandasって初めて知ったのですが,金融系のデータ分析のために開発されたもので,pythonをよりRらしくさせるライブラリのようです. Rに詳しくないのですが,データフレームとよばれるデータ構造を改良したもののようです. いままでnumpyは行列計算のときにちょこっと触ったくらいだったので,使い方を解説されているのはありがたいです. そろそろ昔やったパターン認識とかを復習しようと思っていたところでもあったので,この本でデータ分析系のコーディングを学んだ後に理論の方もつめていきたいなと思っています.

IPythonとは

そしてこの本でまずはじめに紹介されていたのがIPython. Interactive Pythonの略かな. 通常のpythonインタプリタを拡張し,より対話性を拡張した環境らしいです. 利点としてはnumpyやmatplotlibとの相性がよく,科学計算界ではスタンダードな環境とのことです. その上コードハイライトや補完,デバッガも優秀らしいです.

なんとまぁ.普段使いにも良さそうじゃないですか.

...今まで知らなかったのを恥じるべきなのかもしれない(笑)

先ほどの本では1章分つかってIPythonの解説もしてくれています. これを参考にIPython環境を整えたので,今回はその備忘録です.

インストール

環境はMBA_OSX10.9.virtualenv上で,python2.7.6を利用します. IPythonのインストール自体はとても簡単でした.

(仮想環境作成)
$ mkvirtualenv ipy --python=python2

(切替&インストール)
$ workon ipy
$ pip install ipython

この状態でコンソール上でipythonと打つと,ipythonのシェルが起動します.

$ ipython
~
(中略)
~
In [1]:

超簡単ですね!シェルの終了はexitCtrl-Dでokです.

ipythonでのシェルでは入力はIn,出力はOutとして,その後ろに[]で指令番号が表示されます.たとえばこんな感じで.

In [1]: str = "hello ipython"

In [2]: str
Out[2]: 'hello ipython'

In [3]: print str
hello ipython

In [4]:

プロンプトではemacsライクなカーソル移動(Ctrl-FとかCtrl-Eとかそれ系のやつ)が使えます. 更にCtrl-Rで履歴検索とかtabでコマンド予測とかもしてくれます. これだけでもかなり便利なpython環境ですねー.

pylabモードで起動する

このままのIPython環境でもデバッガとか補完とか使えて大変便利なのですが, せっかくなのでmatplotlibと連携しましょう. インタラクティブにグラフをびょうができるようにしてみます.

そのためには,

$ ipython --pylab

--pylabオプションをつけて起動する必要があります. ただし現状では,シェルは起動するものの,

ImportError: No module named matplotlib

が出るはず.自分で入れないとあかんのですね. 仮想環境作り立てだったらそりゃそうだ. というわけで,

$ pip install matplotlib

とでもしましょうか.この一行だけで,必要に応じてnumpyなどの必要関連ライブラリも自動でインストールしてくれます.ほんとpip便利ですねー.

(後から知ったのですが,ScipySuperPackというものを使うと今回の関連ライブラリ(numpy,scipy,pandas,matplotlib,etc)を一挙にインストールできたりするらしいです!)

この状態でもう一度--pylabオプションをつけて起動してみてください.おそらくエラーが消えているはずです.

では試しにプロットできるかテストしてみましょう.

In [1]: x = arange(0,10,0.1)

In [2]: y = cos(x)

In [3]: plot(x,y)
Out[3]: [<matplotlib.lines.Line2D at 0x104375b90>]

こんなんでました.

f:id:ism1000ch:20140101011741p:plain

numpy(arange, cos),matplotlib(plot)がそのまま使えるようです.便利ですね.

通常のpythonでは

import numpy as np
from matplotlib import pyplot as plt
plt.plot([1,2,3,4])
plt.show()

というようにshow()を呼びますが,IPythonではplt()を呼んだ時点でグラフが描画されました.これはこれで便利です.

なお,この状態だとグラフは別ウインドウで表示されます. これだとウインドウのフォーカスを外さないといけなくて,ちょっと面倒ですね. どーせならウィンドウ内にグラフも出してくれると便利です.

さすがipython,qtベースのコンソールで起動するとそれが実現できます.こんな感じ.

f:id:ism1000ch:20140104235609p:plain

まさにインタラクティブにデータを可視化できる環境と呼べるのではないでしょうか! qtコンソールモードは

$ ipython qtconsole

で起動できます(pyqtが導入済みであれば). この環境を構築してみましょう.

qtコンソール環境の構築

qtコンソール環境を利用するためには,pyqtをインストールする必要があります. ggってみるといろいろ情報が出てきて,どれが一番楽なのかでちょっと悩みます. というか,途中でちょこちょこ詰まったりしましたw

んで結局,なんやかんやhomebrewでインストールするのが楽だと思います.

$ brew install sip
$ brew install qt
$ brew install pyqt

qtを動かすためにまずsipをインストールして,その後にqtを導入. そしてqtのpythonバインディングであるpyqtを入れるという手順で行いました.

pipなら自動でパスを通してくれますが,brewだとpyqtのパスが通っていません.てことで.bashrcに以下を追記しました.

export PYTHONPATH=/usr/local/Cellar/pyqt/4.10.3/lib/python2.7/site-packages:/usr/local/Cellar/sip/4.15.3/lib/python2.7/site-packages:$PYTHONPATH

よくわかってないのでbrewでインストールしてきたsip/pyqtのディレクトリにもぐって,中のファイルを全部パスに追加しました.とりあえず動くのでまぁよしとします(それちがくね?って場合はコメント頂けると幸いです)

ではいよいよやってみます.先ほども少し紹介しましたが,ipythonをqtコンソールモード,かつグラフを内部描画で起動してみます.

$ ipython qtconsole --pylab=inline

この状態で先ほどのコードを打つと...

f:id:ism1000ch:20140104235609p:plain

きちんとcosのグラフが描けましたね!

試しに3和音の可視化でもしてみましょうか.

f:id:ism1000ch:20140105002826p:plain

おお,なんかそれっぽいですね〜

...でも音聞こえないとよくわかんないですね〜w

つぎはipythonからpyaudioいじってみようかな.

まとめ

  • ipythonの環境を整えました!
  • 今後はちょこちょこ「pythonによるデータ分析」の読書をすすめていきます〜
  • numpyの使い方ちゃんとべんきょうしないとw