Python で解析 3
“Advent Calendar 2013 - Python で解析!” の三日目。Pandas で DataFrame - 2
1. ファイルの読み込み
CSV (カンマ区切り), TSV (タブ区切り), Excel ファイルなどを読みこんで、 DataFrame を作ることができる。
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 を用意する。今回は日本語を使ってみる。
In [1]: import pandas as pd In [2]: df = pd.DataFrame({ …: u'名前': [u'山田', u'鈴木', u'佐藤', u'木村'], …: u'性別': [u'男', u'男', u'女', u'女'] , …: u'身長': [181, 173, 159, 164], …: u'体重': [79, 71, 51, 52] …: }) In [3]: df Out[3]: 体重 名前 性別 身長 0 79 山田 男 181 1 71 鈴木 男 173 2 51 佐藤 女 159 3 52 木村 女 164
2. ピボットテーブル
Excel で活用している人も多いと思われるが、エンジニアにとっては Python & Pandas の方が楽かもしれない。
In [4]: df.pivot_table( values=[u'体重', u'身長'], rows=u'性別', aggfunc=pd.np.mean) Out[4]: 体重 身長 性別 女 51.5 161.5 男 75.0 177.0
aggfunc には任意の関数やラムダ式を渡せる。上の pd.np.mean は、 pandas をインポートすると numpy も含まれるので、numpy.mean を利用していることになる。aggfunc を省略すると、pd.np.mean が使われるので、上の例では実は aggfunc 省略可能。
3. 基本統計量
DataFrame の describe() を呼び出すと、基本的な統計量が表示される。
In [6]: df.describe() Out[6]: 体重 身長 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 でも便利に使える。上の統計量を性別毎に分けるとすると、こうなる。
In [7]: df.groupby(u'性別').describe() Out[7]: 体重 身長 性別 女 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
今回はこんなところで。