読者です 読者をやめる 読者になる 読者になる

忘れないようにメモっとく

機械学習とかプログラミングとか。

kaggleにpythonを使ってみる(1) 〜pandas

統計ライブラリのpandas

データマイニングのコンテストkagglepythonの統計ライブラリpandasを使ってみた。

こちらの記事で、Rを使って予測モデルを作っているので、参考に。
kaggleで予測モデルを構築してみた (1) - kaggleって何? - About connecting the dots.

コンテストはタイタニックの乗客の生存を予測するやつで、python用のチュートリアルもここに載ってる。

だけども、このチュートリアルはpandasを使ってなくて、csvを読み込んだあとに、numpyの配列にぶち込んでゴリゴリやってる。
pandasのいいところは、Rライクなメソッドがたくさんあるところ。csvを読み込んで、データフレームを作ってくれるから、普段Rに慣れてる人が、pythonの配列使ってハアハアすることもないと思う。

まずは、練習データを読み込む。このとき、pd.read_csv()で返ってくるのが、DataFrameオブジェクト。

import pandas as pd
train = pd.read_csv('train.csv')
print type(train)
# >> pandas.core.frame.DataFrame

train.csvのカラムには、SurvivedとかAgeとかが入っていて、それぞれ簡単にアクセスできる。
columnsはRのnames()みたいに使える。各カラムはSeriesというオブジェクト。

print train.columns
# >> Index([PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked], dtype=object)
print type(train.Age)
# >> pandas.core.series.Series

head()も使えるよー。

train.Age.head()
"""
0    22
1    38
2    26
3    35
4    35
"""

describe()は、Rのsummary()的なメソッド。

train.describe()
"""
 PassengerId    Survived      Pclass         Age       SibSp  \
count   891.000000  891.000000  891.000000  714.000000  891.000000   
mean    446.000000    0.383838    2.308642   29.699118    0.523008   
std     257.353842    0.486592    0.836071   14.526497    1.102743   
min       1.000000    0.000000    1.000000    0.420000    0.000000   
25%     223.500000    0.000000    2.000000   20.125000    0.000000   
50%     446.000000    0.000000    3.000000   28.000000    0.000000   
75%     668.500000    1.000000    3.000000   38.000000    1.000000   
max     891.000000    1.000000    3.000000   80.000000    8.000000   

            Parch        Fare  
count  891.000000  891.000000  
mean     0.381594   32.204208  
std      0.806057   49.693429  
min      0.000000    0.000000  
25%      0.000000    7.910400  
50%      0.000000   14.454200  
75%      0.000000   31.000000  
max      6.000000  512.329200  
"""

csvファイルを見てみると、Ageに欠損データがたくさんあって、この辺をきれいに処理してみる。

train.Age = train.Age.fillna(train.Age.mean())

fillna()というメソッドを使って、欠損値が全て年齢の平均値で置き換わる。楽チン。

今回のコード、gistに上げて、IPython Notebook Viewer使ってみた(便利)。
-> http://nbviewer.ipython.org/6184055
あと、github。
-> https://github.com/akiniwa/kaggle_titanic