GIG

赴くままに技術を。

「Pythonによるデータ分析入門」を読む準備をする

今までJavaPerlをその場しのぎとして業務をしてきましたが、昨今の流れもあってPythonを使い始めました。

Amazonやアキバのヨドバシを眺めてみましたが、Pythonってあまり書籍がでていない...。その一方、RubyなんかはWebシステムの構築で使われる頻度が増えて、本があふれんばかり。

Rubyもいつかは身に付けたいけど、データの前処理用途で使おうと思うと、多次元配列に対応しているかや、科学計算ライブラリとかも気になる点です。 あるみにはあるにはあるみたいですが(いつか試してみよう...)。

SciRuby

Pythonによるデータ分析入門」から始める

そんなわけで、出だしに手をつけたのが「Pythonによるデータ分析入門」です。 著者のWes McKinney氏は、クオンツとしての経験をもとにデータ処理ライブラリのpandasを作成されたことでも知られています。

内容としては、NumPy, pandas, matplotlib, IPython, Scipyといったデータ分析で利用されるライブラリをハンズオン形式で解説しています。ところどころ事例紹介があり、後々参考になりそうです。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

読むための環境を整備する

IT関連の書籍にありがちですが、手を動かさないと頭に入ってこないので、環境を構築します。 備忘録代わりに日記にしたためておくとしよう。

手元のPCのスペック;

Macにがっつり構築しようとするとバージョンアップ時やに困りそうなので、 仮想環境として構築します。

VMの準備

手始めに、Oracle VM VirtualBox, Vagrantをインストールします。

1. Boxのダウンロード

利用したい仮想マシンをダウンロードしてきます。 社内の環境でも使っていることから、Redhat系のディストリビューションということで、CentOSを入れます。 ( centos70仮想マシンの識別名なので、適宜変更してください。)

$ vagrant box add centos70 https://dl.dropboxusercontent.com/s/srw2tqh58507wik/CentOS7.box

Boxはいくつか提供しているところがあるみたいですね(前者しか知りませんでした...)。

2. 仮想マシンの作成

仮想マシンを作成すると設定ファイル(Vagrantfile)が生成されるため、適切なディレクトリを作成してそこで下記のコマンドを実行します。

$ vagrant cenos70

ログがつらつらと吐き出され、仮想マシンが立ち上がりました。 下記コマンドで入れます。

$ vagrant ssh

ログインユーザはvagrantとなっています。 またrootユーザの初期パスワードは、vagrantです。

また今回は自宅なので、特に必要はないのですが、会社などでproxyの設定が必要な方は、 後々のパッケージのインストールに先立ち、vagrant-proxyconfを入れておきましょう。

$ vagrant plugin install vagrant-proxyconf

Vagrantfileに下記の行を追加します。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

...(以下の行を追記)
     config.proxy.http = "http://(ユーザID):(パスワード)@(Proxyのドメイン名):(Proxyのポート)"
     config.proxy.https = "http://(ユーザID):(パスワード)@(Proxyのドメイン名):(Proxyのポート)"
     config.proxy.no_proxy = "localhost,127.0.0.1"
...(以上の行を追記)

end

仮想マシンを再起動します。

$ vagrant reload 
CentOSのセットアップ

1. 基本セットアップ

開発環境を一式入れておきましょう。

$ sudo yum groupinstall "Development tools"

さらに、pyenvの利用に際して以下を追加します(参考: Common build problems · yyuu/pyenv Wiki · GitHub)

$ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

あと、matplotlibのインストールする際に必要なものとして、

$ sudo yum install python-devel libpng-devel freetype-devel

必要に応じてproxyの設定をします。

# sudo vi /etc/profile

...(以下の行を追記)
PROXY=http://(ユーザID):(パスワード)@(Proxyのドメイン名):(Proxyのポート)
export http_proxy=$PROXY
export https_proxy=$PROXY
...(以上の行を追記)

あと、F/Wも切っておきたいところです(甘えですが)。

# systemctl stop firewalld
# systemctl disable firewalld

2. Pythonのインストール

2.X系、3.X系とありますが、何をしたいかで変更したい場合もあるかと思いますので、インストールバージョンを管理できるpyenvを利用します(以下では、XXXenv系をまとめて管理するanyenvを利用)。

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

pyenvをインストールします。

$ anyenv install pyenv
$ exec $SHELL -l
$ anyenv versions      # インストールされたか確認

それではpythonをインストールしましょう。 まずはどれをインストールするかリストから選びます。

$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
  2.4.3
...(以下、省略)

今回は、3.4.2をインストールします。 また、今後バージョンを使い分けることを想定して、~/dev/python配下のみ 3.4.2を使うことにします。

$ pyenv install 3.4.2
$ mkdir -p ~/dev/python
$ cd ~/dev/python
$ python --version
Python 2.7.8
$ pyenv local 3.4.2
$ python --version
Python 3.4.2
ライブラリのインストール

pythonのライブラリを管理するpipを使ってインストールしていきます。 順番は、

  1. Numpy
  2. Scipy <- Numpyが先に必要
  3. Pandas
  4. matplotlib
  5. IPython

1. Numpyのインストール

$ pip install numpy

2. Scipyのインストール

  • 科学計算ライブラリ
  • Numpyライブラリに依存
  • 必要なBLASLAPACKといったライブラリを有償のものを使うなどカスタムインストールすることも

インストール結構時間かかるな...

$ pip install scipy

3. Pandasのインストール

  • RのあのDataFrameが利用可能
  • group byやmergeなどデータの取り回し機能ライブラリ
$ pip install pandas

4. matplotlibのインストール

  • 2Dのチャート描画ライブラリ
$ pip install matplotlib

5. IPythonのインストール

$ pip install “ipython[notebook]"

外部からブラウザでアクセスできるようにします。 デフォルトはいじらず、プロファイルmyprofを作り、その設定に修正を加えます。 ポートの変更もこのプロファイルで変更できます。

$ ipython profile create myprof
$ vi ~/.ipython/profile_myprof/ipython_config.py

...(以下の行を追記)
c.NotebookApp.ip = u'*'
...(以上の行を追記)
ようやくスタートライン

これでようやく読み始められます。

  • --no-browserオプションは起動時にブラウザを自動的に起動しないため
  • --matplotlib inlineオプションはmatplotlibをnotebook上で描画するため
 ipython3 notebook --profile=myprof --no-browser --matplotlib inline &

あと使用されているデータは、pydata/pydata-book · GitHubからcloneしてきましょう。 ipythonを起動(上記のコマンドを実行した)ディレクトリに降りて、下記のコマンドを入力します。

$ git clone https://github.com/pydata/pydata-book

本の中では~/ch0X/となっている点を~/pydata-book/ch0X/と読み替えればいけるかと。 最後にhttp://localhost:8888から始めるとしましょう。