
Advent Calendar 2013 - 3
Python で解析! - DataFrame - 2
Pandas は CSV (カンマ区切り), TSV (タブ区切り), Excel ファイルなどを読みこんで、 DataFrame を作ることができる。
1. ファイルの読み込み
ファイルを読み込む方法は次の通り。
import pandas as pd
pd = pd.read_csv('hoge.csv') # CSV ファイルの場合
pd = pd.read_table('hoge.txt') # TSV ファイルの場合
pd = pd.read_excel('hoge.xls', 'Sheet1') # Excel ファイルの場合
なお、 Excel を読み込む場合は、xlrd パッケージをインストールしておく必要がある。
$ pip install xlrd
他にも、 json や html、クリップボードからの読み込みも可能なのだが、記事の関係上、前回と同様にコードで DataFrame を用意する。今回は日本語を使ってみる。
import pandas as pd
df = pd.DataFrame({
u'名前': [u'山田', u'鈴木', u'佐藤', u'木村'],
u'性別': [u'男', u'男', u'女', u'女'] ,
u'身長': [181, 173, 159, 164],
u'体重': [79, 71, 51, 52]
})
体重 名前 性別 身長
0 79 山田 男 181
1 71 鈴木 男 173
2 51 佐藤 女 159
3 52 木村 女 164
2. ピボットテーブル
Excel で活用している人が多いと思われるピボットテーブルだが、エンジニアにとっては Python & Pandas の方が楽かもしれない。
df.pivot_table(
values=[u'体重', u'身長'],
rows=u'性別',
aggfunc=pd.np.mean)
体重 身長
性別
女 51.5 161.5
男 75.0 177.0
aggfunc には任意の関数やラムダ式を渡せる。上の pd.np.mean は、 pandas をインポートすると numpy も含まれるので、numpy.mean を利用していることになる。aggfunc を省略すると、pd.np.mean が使われるので、上の例では実は aggfunc は省略可能。
3. 基本統計量
DataFrame の describe() を呼び出すと、基本的な統計量が表示される。
df.describe()
体重 身長
count 4.000000 4.000000
mean 63.250000 169.250000
std 13.961256 9.742518
min 51.000000 159.000000
25% 51.750000 162.750000
50% 61.500000 168.500000
75% 73.000000 175.000000
max 79.000000 181.000000
上から、個数、平均値、標準偏差、最小値、第 1 四分位数、第 2 四分位数、第 3 四分位数、最大値となる。
4. group by
SQL を活用していると、 group by がとても便利だったりするが、DataFrame でも便利に使える。上の統計量を性別毎に分けるとすると、こうなる。
df.groupby(u'性別').describe()
体重 身長
性別
女 count 2.000000 2.000000
mean 51.500000 161.500000
std 0.707107 3.535534
min 51.000000 159.000000
25% 51.250000 160.250000
50% 51.500000 161.500000
75% 51.750000 162.750000
max 52.000000 164.000000
男 count 2.000000 2.000000
mean 75.000000 177.000000
std 5.656854 5.656854
min 71.000000 173.000000
25% 73.000000 175.000000
50% 75.000000 177.000000
75% 77.000000 179.000000
max 79.000000 181.000000
今回はこんなところで。