タイタニックをネタにRの使い方を学ぶ(その2)

前回の記事の続き

決定木

> titanicTree <- rpart(Survived ~ Age + Sex, data=titanic)
> titanicTree
n= 891

node), split, n, deviance, yval
* denotes terminal node

1) root 891 210.727300 0.3838384
2) Sex=male 577 88.409010 0.1889081
4) Age>=6.5 553 77.359860 0.1681736 *
5) Age< 6.5 24 5.333333 0.6666667 *
3) Sex=female 314 60.105100 0.7420382 *
>

男性で6歳以下、女性が生存率がよいということかしら?

試しに↑で結果をPostしてみたところ、73%->75%にスコアが上がった。
(73%は、単純に女性のみ生存予測)

もう一つ。

> titanicTree <- rpart(Survived ~ Age + Sex + Fare, data=titanic)
> titanicTree
n= 891

node), split, n, deviance, yval
* denotes terminal node

1) root 891 210.727300 0.3838384
2) Sex=male 577 88.409010 0.1889081
4) Age>=6.5 553 77.359860 0.1681736
8) Fare< 26.26875 404 39.207920 0.1089109 *
9) Fare>=26.26875 149 32.885910 0.3288591 *
5) Age< 6.5 24 5.333333 0.6666667 *
3) Sex=female 314 60.105100 0.7420382
6) Fare< 48.2 225 50.328890 0.6622222 *
7) Fare>=48.2 89 4.719101 0.9438202 *

これで条件変えられそうなのはなかった。

> titanicTree <- rpart(Survived ~ Age + Sex + Parch, data=titanic)
> titanicTree
n= 891

node), split, n, deviance, yval
* denotes terminal node

1) root 891 210.7273000 0.3838384
2) Sex=male 577 88.4090100 0.1889081
4) Age>=6.5 553 77.3598600 0.1681736 *
5) Age< 6.5 24 5.3333330 0.6666667 *
3) Sex=female 314 60.1051000 0.7420382
6) Parch>=3.5 7 0.8571429 0.1428571 *
7) Parch< 3.5 307 56.6775200 0.7557003 *

Parch=>3.5の女性は生存率が低いらしい。

これをPostすると、76%までアップ。
同じ確率の人がたくさんいることを考えると、同じ条件でPostしてるんだろうな、、、

分析って難しい。

タイタニックをネタにRの使い方を学ぶ(その1)

Kaggle*1でTitanicの生存者予測というものがあるので、これを使ってRの自習をします。

  • 環境
    • Mac OS X 10.10 + Rアプリケーション

まず、csvの読み込み方法。

titanic <- read.table(file="train.csv", header=TRUE, sep=",")
titanic <- read.csv("train.csv")

簡単でした。

次に、表示確認
最初の3行を表示、というコマンド。

head(titanic_table, 3)

年齢のヒストグラムを出してみます。

require(ggplot2)
hist(titanic$Age, main="AgeHistgram", xlab="Age")

散布図を出してみます。(生き死にと、年齢の関係)

plot(Survived ~ Age, data=titanic)

生き死に、性別ごとの年齢の平均値と中央値を出してみる
(グルーピング)

aggregate(Age ~ Survived + Sex, titanic, mean)
* Survived Sex Age
1 0 female 25.04688
2 1 female 28.84772
3 0 male 31.61806
4 1 male 27.27602

aggregate(Age ~ Survived + Sex, titanic, median)
* Survived Sex Age
1 0 female 24.5
2 1 female 28.0
3 0 male 29.0
4 1 male 28.0

女性は若い人の方が亡くなっているということでしょうか、、、?
検定とかしてみたいところではありますが、、、、

まずは相関係数を求めてみます。
"complete.obj"を指定することでNA値をすっ飛ばした相関が得られるようです。
Survivedが0,1なのであんまりぱっとした結果はでないと思いますが、、、、

> cor(titanic$Survived, titanic$Age, use = "complete.obs")
[1] -0.07722109

wikipediaによると、<0.2は相関なしとのこと。

ちなみに、年齢と兄弟の数は0.2<, <0.4なので軽い相関があるとなるようです。

> cor(titanic$Age, titanic$SibSp, use = "complete.obs")
[1] -0.3082468

一気に確認。(共分散)
列番号を入力すればいいらしいです。(ただし数値のみ)。Sex列はfemale/maleなので使えません。
あんまり関連があるものがないですね、、、、

> cor(titanic[,c(2,6:8,10)], use = "complete.obs")
Survived Age SibSp Parch Fare
Survived 1.00000000 -0.07722109 -0.01735836 0.09331701 0.26818862
Age -0.07722109 1.00000000 -0.30824676 -0.18911926 0.09606669
SibSp -0.01735836 -0.30824676 1.00000000 0.38381986 0.13832879
Parch 0.09331701 -0.18911926 0.38381986 1.00000000 0.20511888
Fare 0.26818862 0.09606669 0.13832879 0.20511888 1.00000000

ちなみに、性別でグルーピング後に共分散を求めてみると、、、、
かろうじて0.2を越えるのが、
女性の生き死にに対して兄弟の人数(負の相関)と料金、年齢に対して兄弟の人数、兄弟の人数に対してParch(これなんだっけ)
男性の年齢に対して兄弟の人数とParch、兄弟の人数に対してParch, Parchに対しての料金。
なかなか生死の予測は難しそう、、、、

> cor(titanic[titanic$Sex == "female",c(2,6:8,10)], use = "complete.obs")
Survived Age SibSp Parch Fare
Survived 1.0000000 0.1161086 -0.20229269 -0.19770659 0.23096192
Age 0.1161086 1.0000000 -0.24144162 -0.11853911 0.17146779
SibSp -0.2022927 -0.2414416 1.00000000 0.28202709 0.07041957
Parch -0.1977066 -0.1185391 0.28202709 1.00000000 0.05437894
Fare 0.2309619 0.1714678 0.07041957 0.05437894 1.00000000
> cor(titanic[titanic$Sex == "male",c(2,6:8,10)], use = "complete.obs")
Survived Age SibSp Parch Fare
Survived 1.00000000 -0.11961752 -0.01690827 0.09872617 0.18342132
Age -0.11961752 1.00000000 -0.33498250 -0.23241943 0.07733091
SibSp -0.01690827 -0.33498250 1.00000000 0.47816126 0.16382938
Parch 0.09872617 -0.23241943 0.47816126 1.00000000 0.31189871
Fare 0.18342132 0.07733091 0.16382938 0.31189871 1.00000000

Selenium Web Driver On Mac

  • 背景

最近Seleniumを触ってます
なにそれ状態だったのが、だんだん掴めてきてやりたいことが明確になってきたのでそれをやってみる。


  • 環境

Mac OS X 10.10.2
FireFox 38.01


  • やりたいこと

ブラウザをテストしてみる
きれいなテストレポートをだす


  • やること

きれいなレポート*1

Mavenのプロジェクトで作ってみる*2


  • 結果

mvn testをすると、Firefoxがクラッシュする。


  • 調査

FF38でクラッシュするらしい*3
アプリケーションフォルダのを削除して、適当にFF35くらい入れたら動いたー
しかしいろんなバージョンでのブラウザテストを出来るのを期待してたからちょっと残念だけれども感動〜

PythonのDjangoフレームワークのアプリケーションをサーバにデプロイしたらInternal Server Error

Djangoではまった話。


しばしなやむ
いろいろ検索

結局、このバグ*1だった。

  • 解決の流れ
    • django internal server error」の検索結果あたりをヒントに、Apacheのログを読む
    • 「AppRegistryNotReady」を見つけ、またぐぐってたどり着いた。
    • django-wsgiの設定ファイル.pyをリンク先通りの

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

to

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

で、ApacheのInternalServerErrorからDjangoのImportErrorに変わった。
少し進歩。

PythonのDjangoチュートリアルをやってみた+機能追加

PythonのDjangoチュートリアルをやってみた+機能追加

感想にStar(評価、星1〜5)を登録する機能を追加してみる

  • model.py
    • インポート
      • from django.core.validators import MaxValueValidator, MinValueValidator
    • Model Impression
      • star = models.IntegerField(u'評価', blank=False, default=1, validators=[MaxValueValidator(5),MinValueValidator(1)]*1
        • インポートしたvalidatorで最大値最小値を設定できる。
  • templetes/cms/impressions_list.html
    • <th>評価</th>追加
  • templetes/cms/impressions_edit.html->変更なし(form.pyで書いてた)
  • cms/form.py
    • fields = ('comment', 'star',)
      • 'star'を追加


簡単!

[追記]Djangoユーザ認証の仕組みがあって、モデル名がかぶる、、、、*2

PythonのDjangoまとめ

前エントリで実施した内容を忘備録としてまとめておく。

目的は、後から読んだ時にDjangoの使い方を思い出せること。

  • 使い方
    • PC環境整える
      • easy install pip
      • ほか、virtualenv, vitualenvwrapperをpipでインストール
    • その時使う分の環境を整える
      • pythonの仮想環境を整える
        • フォルダ作って、mkvirtualenvする(作った環境をenv1とする)
        • $workon env1で仮想環境うつることができる
        • 仮想環境にdjangoを入れる
          • [env1]$pip install django==1.7.1
        • ワークスペースを作る
          • cd ~/Document
          • mkdir env1_workspaceとか
    • つくる(作るものをmysiteとする)
      • プロジェクト的(mysiteとする)ものの作成
        • django-admin.py startproject mysite
      • データベースのセットアップ
        • vi mysite/settings.py
          • DATABASES=に設定を書く(デフォルトはsqlite
      • データベースのマイグレート
      • スーパーユーザの作成(管理画面にアクセスできるユーザ:管理画面がさくっと作れるので作っておくといいらしい)
        • python manage.py createsuperuser
      • デプロイ
      • アプリケーション(cmsとする)の作成(アプリケシーションはプロジェクトを構成する機能の単位だそうな)
      • アプリケーションを、プロジェクトに登録
        • mysite/setting.pyの、INSTALLED_APPSに"cms"を追加する
      • モデルの作成
        • mysite/cms/model.pyを編集
          • モデルをクラスにして、{fieldname} = models.XXX(u'フィールド名', options)を書くらしい。
          • XXXの部分は色々あるようで、モデルのリファレンスを参照
        • モデルを変えたらデータベースのマイグレーションファイルを作成する。
        • プロジェクトの方で再度マイグレートする