Mac OS X に IPython (Python2) を導入する方法 〜機械学習理論入門下準備〜


先日、[ITエンジニアのための機械学習理論入門](http://gihyo.jp/book/2015/978-4-7741-7698-7)を購入してみました。

Python サンプルコードの実行環境を準備する必要があるのですが、書籍内では [Enthought Canopy](https://www.enthought.com/products/canopy/) を使っての効率的な環境構築が紹介されています。

しかし、なんとなくこういうツールは初めは避けたい派なので、とりあえず自前で必要なライブラリをインストールすることにしました。

# 対象読者
- Python2 を既に導入済み
- Python2 で機械学習関係ライブラリ導入未経験
- [Enthought Canopy](https://www.enthought.com/products/canopy/) は使わず CLI で戦う

# 必要なライブラリ
必要なライブラリは以下のとおりです。

- NumPy
- SciPy
- matplotlib
- pandas
- PIL
- scikit-learn
- IPython

簡単に調べた所、PIL は Python2 系でしか使えない気がしたので、Python2 で環境構築をすることにしました。

# 前準備 (Virtualenv)
IPython を 動かす際に、Virtualenv を入れてないとやたらと警告を発してくるということがわかったので、まずは Virtualenv を入れておきます。

正直、Virtualenv については IPython が発してくる警告で初めて存在を知りました。Python って TopCoder で以外使ったことないんですよ実は。とりあえず、何も考えずに以下の2つの記事をなんとなく読みました。ホントになんとなく。

- [IPython Notebook in Virtualenv](http://jeffskinnerbox.me/posts/2013/Oct/06/ipython-notebook-in-virtualenv/)
- [VIRTUALENV について](http://blog1.erp2py.com/2011/07/virtualenv.html)

ま、とりあえず入れていきます。

```bash
$ pip install virtualenv
$ pip install virtualenvwrapper
```

次に、仮想環境用ディレクトリを作成します。名前は何でも良いかなと思ったので、`machine_learning`という名前にしました。

```bash
$ virtualenv --no-site-packages ~/work/machine_learning
```

仮想環境ができたので、中に入ります。

```bash
$ source ~/work/machine_learning
```

プロンプトが`(machine_learning)$`みたいになってたら成功です。

以下、仮想環境下で作業を進めます。

# ライブラリのインストール
以下のライブラリは`pip install numpy`のように、ライブラリ名を小文字にして pip でインストールするだけです。

- NumPy
- SciPy
- matplotlib
- pandas
- scikit-learn

## PIL
ちょっとだけクセモノです、こいつは以下のように叩く必要があります。

```bash
$ pip install PIL --allow-external PIL --allow-unverified PIL
```

- [pip install PIL dont install into virtualenv](http://stackoverflow.com/questions/21242107/pip-install-pil-dont-install-into-virtualenv)
- [pyenvでvirtualenvしててPILがインストール出来ない件](http://qiita.com/noblejasper/items/ee29e06ccb82ce97af5a)

## IPython を入れていきます
pip で叩けば一応さくっと入ります。

```bash
$ pip install ipython
```

インストール完了です。テストがあるのでテストを叩いてみます。

```bash
$ iptest
```

絶望を感じる程に動きませんでした。

順番に足りないライブラリを入れていきます。

- requests
- mock
- testpath
- ipykernel

この辺を足していったらテストが通るようになりました。

実は、初めの方に何も考えずに[最新じゃなさそうなドキュメント](https://ipython.org/ipython-doc/2/install/install.html)をほとんど読みもせずに勢いで入れていたライブラリもあります。もし、まだテストが通っていないのであれば、入れてみると良いかもしれません。

- jinja2, needed for the notebook
- sphinx, needed for nbconvert
- pyzmq, needed for IPython’s parallel computing features, qt console and notebook
- pygments, used by nbconvert and the Qt console for syntax highlighting
- tornado, needed by the web-based notebook
- nose, used by the test suite
- readline (on OS X) or pyreadline (on Windows), needed for the terminal

雑にコマンド叩いててすみません。

## RuntimeError
テストが通ったので喜んで`ipython`と叩いて起動してみると、RuntimeError が湯水の如く流れ出します。泣きそうになります。

エラーメッセージを見てみると matplotlib がどうとか、mac os x がどうとか、framework がどうとか書いてあります。ググッて適当に記事を読みます。なるほど。

- [Image library for Python 3](http://stackoverflow.com/questions/3896286/image-library-for-python-3)
- [Python 3.3でmatplitlibとpylabを使おうとしたら RuntimeError: Python is not installed as a frameworkというエラーが発生したときの解決方法](http://qiita.com/katryo/items/918667f28301fdec89ba)

`~/.matplotlib/matplotlibrc`で`backend: TkAgg`を指定すれば良さそうです。

```~/.matplotlib/matplotlibrc
backend : TkAgg
```

では、実行！

```bash
$ ipython
Python 2.7.9 (default, May  9 2015, 19:43:55)
Type "copyright", "credits" or "license" for more information.

IPython 4.0.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
Using matplotlib backend: TkAgg

In [1]:
```

動いたよ！やったね！