Chromebookで始めるKaggle日記2
こんにちは、junkawaです。
Kaggleのチュートリアル的コンペ「タイタニック」をGoogleスプレッドシートで試してみました。
目次
1. データを入手する
2. Googleスプレッドシートにアップロードする
3. データを知る
4. 評価関数を作成する
5. 提出データを作成する
6. 提出する
1. データを入手する
ここから、train.csv、test.csv をダウンロードします。
(trainはtrainingの略?)
2. Googleスプレッドシートにアップロードする
Googleスプレッドシートで「ファイル」→「インポート」でCSVファイルを読み込みます。区切り文字などの設定は省略しても大丈夫でした。
3. データを知る
を参考にさせて頂きました。
相関関係を調べる
CORREL関数では文字列を扱えないので、sex列のmaleを0、femaleを1に変換します。
train.csvをシートtrain に読み込んだとします。
=CORREL(train!$B$2:$B,train!C2:C)
survival (B列)とpclass(C列)の相関はこのように表せます。
D列、E列と比べるために横にコピペしていきたいので、固定したい$B$2:$Bを絶対参照しています。
このように、survivalとsex、survivalとpclassに相関があることが分かりました。
sexではfemailを1、mailを0としているので、これがsurvival(1が生存、0が死亡)と正の相関があるということは、女性の方が生き残ったということです。
また、pclassは1がファーストクラスの部屋、2、3がそれに劣る部屋なので、これがsurvivalと負の相関があるということは、良い部屋の方が生き残ったということです。
生存率を調べる
年齢を5才区分に分けて生存率を調べてみました。
例) 6〜10才の生存者 / 6〜10才の乗船数
=AVERAGEIFS(train!$B$2:$B$892, train!$F$2:$F$892, ">5", train!$F$2:$F$892, "<=10")
6〜10才の生存率はこのように表せます。
B列が1であれば生存なのでB列の平均値が生存率になります。
=AVERAGEIFS(train!$B$2:$B$892, train!$F$2:$F$892, ">5", train!$F$2:$F$892, "<=10",train!$E$2:$E$892, "0")
6〜10才の男性(E列が0)の生存率はこのように表せます。
男性の幼児と女性の生存率が高いと言えます。
先程の相関関係では、servivalとageに相関が見られなかったのですが、年齢を区分したり、性別に分けたりすると浮かび上がってくる情報がありますね。勉強になります。
次に、Pclass毎の生存率を調べます。
=AVERAGEIFS(train!$B$2:$B$892, train!$C$2:$C$892, "1")
Pclass(C列)が1、の生存率は上記で求まります。
この情報は結構面白いのではないでしょうか。
ファーストクラスはお金持ちだから生存率が高かったと単純に思い込んでいましたが、実際は女性の生存率の高さが突出して高かったため、それに引きずられていたんですね。
男性は女性を優先的に助けたことが推測できます。
ただ、 Pclass3の女性の生存率がPclass1、Pclass2に比べて低いのが気になりますが、ここではこれ以上深追いしません。
(家族の有り無しなどで分類するともう少し情報が引き出せるかも)
4. 評価関数を作成する
3で得た情報から、評価関数を作成します。
=IF(E2=1,IF(C2=1,1,IF(C2=2,1,0)), 0)
test.csvを読み込んだシートの2列目(PassengerIdとPclassの間)に、Survived列を新規に挿入し、上記の評価関数を適用します。
ここでは単純に、 「Pclass1の女性、Pclass2の女性」だけが生存し、それ以外は亡くなった、とします。
Pclass1はC列が1、Pclass2はC列が2、女性はE列が1。
5. 提出データを作成する
評価関数を適用したシートのA列(PassengerId)とB列(Survived)だけをダウンロードします。
を参考に、GASを使ってダウンロードできるようにしました。
上記サイトとの変更点は下記だけです。
function getData() {
// スプレッドシート上の値を二次元配列の形で取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- var values = sheet.getDataRange().getValues();
+ const lastRow = sheet.getLastRow();
+ const values = sheet.getRange(1,1,lastRow,2).getValues();
sheet.getRange(1, 1, lastRow, 2).getValues()で、A1:B419 の範囲の値を取得します。
6. 提出する
5でダウンロードしたファイルをアップロードします。
結果
まとめ
Googleスプレッドシートを使ってKaggleに挑戦しました。
今後は、Colaboratoryを使って機械学習に挑戦したいと思います。
ご覧下さりありがとうございます。いただいたサポートは図書館への交通費などに使わせていただきます。