『Tutorial & Hackathon #1』をやってみる
2015/07/03
https://pydata.tokyo/news/pydata.tokyo-tutorial-hackathon-1
タイタニックの乗客データから生存者の推定モデルを作成してる。
Contents
実行環境を整える
Anacondaをインストール
Anacondaか自分で必要なライブラリを導入するか、2つの選択肢が与えられている。
自力でライブラリを導入する意義が特にないと思うので、Anacondaを使う。
OpenCVするためにAnacondaをインストールしたときのやり方で問題なさそう。
kaggleからタイタニック関係のデータをダウンロードする
データを取得するためにはkaggleというサービスにユーザ登録しないとダメみたい。
登録する。
いろいろデータがあって混乱する。
- train.csv
- gendermodel.csv
- genderclassmodel.csv
を、適当にダウンロードした。
データの読み込み
https://pydata.tokyo/ipynb/tutorial-1/dh.html#1-1.-データの読み込み
いきなりよく分からない。
IPythonという対話的にPythonな処理を実行できる環境上でコマンドを入力しているみたい。
ターミナル上でipythonを打ち込めばIPythonが立ち上がる。
1 2 |
In [1]: %matplotlib inline UsageError: Invalid GUI request 'inline', valid ones are:dict_keys(['gtk3', 'pyglet', 'none', 'glut', None, 'osx', 'qt4', 'tk', 'wx', 'gtk', 'qt']) |
意味不明。
IPythonにはnotebookという機能がある。
よく分からないが、ブラウザ上でIPythonを実行できるスゴいヤツだ。
ipython notebookと打ち込むとブラウザが立ち上がってIPythonできるはず。
どうやらここで%matplotlib inlineを実行しないとダメみたいだ。
これが分かれば後は楽勝。
コピペすればOK。
コピペして実行すると以下のような感じになるはず。
data/train.csvはnotebookを実行したパスを起点に見てるので、dataディレクトリを作ってtrain.csvを置いておかないとダメ。
以降の処理も基本はコピペすればできる。
実行しつつ謎な部分をメモしてゆく。
Pandasの機能をざっくり紹介
Pandasというライブラリを使ってCSVファイルからデータのテーブルを作ったり、統計処理を行ったり、図示したりするみたい。
年齢の高い上位10名を確認してみましょう。
実行結果が貼ってないのでやってみる。
1 |
df.sort('Age', ascending=0).head(10) |
たしかに全員男だ。
あるキーの値がNullである数を集計
部屋番号が例になっていた。
1 |
df['Cabin'].isnull().sum() |
Nullじゃない数を集計したい場合は下記のとおり。
1 |
df['Cabin'].notnull().sum() |
あるカラムを削除する
CabinとTicketが不要ということで削除していた。
欠損値を補間
年齢がNullな乗客データを各性別の平均年齢をあてて補間しようとしてる。
平均年齢は次のようにして算出してる。
1 2 3 4 |
female_age_mean = round(df[df.Sex=='female']['Age'].mean()) male_age_mean = round(df[df.Sex=='male']['Age'].mean()) print('女性の平均年齢は{0}歳、男性は{1}歳です。この平均年齢で補間します。'.format(female_age_mean, male_age_mean)) |
で、この平均年齢をfillnaというメソッドを使って、Nullな乗客の年齢を補間していく。
1 2 3 4 5 |
dff = df[df.Sex=='female'].fillna({'Age': female_age_mean}) dfm = df[df.Sex=='male'].fillna({'Age': male_age_mean}) df2 = dff.append(dfm) df2 |
カラムの追加
https://pydata.tokyo/ipynb/tutorial-1/dh.html#カラムの追加
『df[キー名] = map系の操作』でカラムを一気に追加できる。
データの可視化
乗客の生死をヒストグラムでプロットしている。
素直にコピペすると
ValueError: Invalid chart type given hist
と、エラーが発生した。
Anacondaが抱えてるpandasのバージョンが古かったことが原因だった。
2015/03/29現在
pyenvでインストールしたAnacondaではpandas0.14.1が使われている。
conda list
で確認できる。
conda update pandas
で、いろいろアップデートされるはず。
アップデートを適用するためにはnotebookを再起動する必要がある。
これまで作った変数(dfとか)がリセットされるので注意。
df['Survived'].plot(alpha=0.1, kind='hist', bins=2)のbinsってなに
グラフを表示するときの分割数…かな。
bins=100とすると0から1を100分割して値をプロットしてゆく。そうすると見た目はこんな感じになる。
0,1しか値がないので間の0.5とかその辺りがポッカリ空いてる。
336px
336px
関連記事
-
-
redux-sagaをざっくり入門したい
Co …
-
-
Bower再入門
Co …
- PREV
- goで無限ループ
- NEXT
- 意識低いRuby on Rails再入門1