本エントリは、次のAdvent Calendarのために書かれたものです。

取り扱う内容

Pythonのデータ分析用ライブラリであるPandasの紹介と簡単なサンプルコードを取り扱います。

Pandasとは

一時期盛り上がったけどあんまりPandasの情報出てこないからよーしエントリ書いちゃうぞー、と息巻いていたらこのようなフルスタックな書籍が出版されるようです。

[amazonjs asin="4873116554" locale="JP" title="Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理"]

どう見てもこの書籍のほうが有益です。本当にありがとうございました。

...まぁ、発売日より2日早いのでセーフ(なにが?)として、めげずに続けます。

pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.

上記は公式サイトからの引用ですが、つまるところPythonでデータ構造を触ったりデータ分析したりするときに便利なライブラリだよ!というものです。

同様に公式サイトで "like R" と謳われている通り、誤解を怖れずに言えばPythonで書けるバールのようなもの、もとい、Rのようなものです。

インストール方法

Python2.7.5で実行します。

pip install pandas

numpyが一緒に導入される場合にはそこそこ時間がかかります。

簡単な使い方

次のようなCSVデータを読み込んで、操作してみます。

date,A,B,C
20131224,a,1,8
20131225,b,3,4
20131226,c,4,5

read_csv()というCSVを読み込むための関数が用意されているのでこれを利用します。

import pandas

print(pandas.read_csv('test.csv'))

これだけで、次の様なデータが出力されます。

date  A  B  C
0  20131224  a  1  8
1  20131225  b  3  4
2  20131226  c  4  5

先頭から2行だけ表示してみます。

import pandas

data = pandas.read_csv('test.csv')
print(data.head(2))

次の様に出力されます。

date  A  B  C
0  20131224  a  1  8
1  20131225  b  3  4

Linuxコマンドのhead/tailと同じ要領です。

import pandas

    data = pandas.read_csv('test.csv')

    # 末尾から2行
    tail = data.tail(2)

    # C列で降順ソート
    sorted = data.sort(columns="C")

クロス集計

クロス集計のやり方をRと比較しつつ見ていきましょう。

blood_type,sex
O,F
O,F
O,M
A,M
A,M
B,F
A,F
AB,M
O,F
blue,M
B,M
B,M
O,M
O,M
AB,F

Pandasのpivot_table()を利用してクロス集計を行ってみます。

import pandas

data = pandas.read_csv('cross.csv')

crosstab = data.pivot_table(rows='sex', cols="blood_type", aggfunc=[len])
print(crosstab)

するとこのように出力されます。

blood_type    A  AB  B  O  blue
sex                            
F             1   1  1  3   NaN
M             2   1  2  3     1

(おや、使徒が一体混じっているようですね。。)

Rの場合のクロス集計はこんな感じです。

data <- read.csv("cross.csv")
cross <- table(data[,2], data[,1])

print(cross)

一応、Rの出力結果。

  A  AB  B  O  blue
F 1   1  1  3     0
M 2   1  2  3     1

まとめ

今回のサンプルではデータの読み込みと簡単な操作のみを紹介しましたが、Rっぽくデータ操作を行えそうな雰囲気が垣間見えたのではないかと思います。

もちろんRを完全に代替するものではないですが、Numpy, Scipyと併せて使い易いなどのPythonならではのメリットを享受できます。

これからデータ分析分野での活用を目指してPythonを勉強してみようという方はもちろん、データ加工のために既にPythonを少し触っている、という方にも是非抑えておいて欲しいライブラリです。

それではMerry Christmas!!