kaggleがなんかデータ分析に良いって耳にしたのでkaggle入門のtitanicをNNCでやってみた
やったこと
- 前処理
- 前処理
- 前処理
- 学習
以上
(学習と評価はNNCっていう便利AIツールにやってもらいます)
今回はそのツールに投げるための前処理が9.9割です。
前処理
よし、さっそくデータ見よう!!!
import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) import os for dirname, _, filenames in os.walk('/kaggle/input'): for filename in filenames: print(os.path.join(dirname, filename)) #出力 #/kaggle/input/titanic/train.csv #/kaggle/input/titanic/gender_submission.csv #/kaggle/input/titanic/test.csv
ここにファイルがあるのね
train_df=pd.read_csv("/kaggle/input/titanic/train.csv",header=0) test_df=pd.read_csv("/kaggle/input/titanic/test.csv",header=0)
とりあえずtrain,test用のデータフレームにいれます。 んで一部を見てみる
ん~よくわからん。日本語でお願いしますって感じですね
いろいろ調べてわかったことは
trainにはsurvivedの列があって実際に生死がわかる
testにはsurvivedの列がない。
trainを使って学習モデルを作り、testにある人の生死を予測するぞってこと
じゃあまず何が必要かなって考える。
今回はNNCで学習させなきゃいけないことを考えると,,,,
参考ページ
このような形にする必要がありそう
他にも
1. 欠損値がある
2. データに文字がある
この二つが邪魔そう
欠損値の処理
欠損値処理をするために欠損値がどれほどあるかを調べます
めちゃくちゃわかりやすい解説があり、今回はこれにほぼ乗っかています
参考
def kesson_table(df): null_val = df.isnull().sum() percent = 100 * df.isnull().sum()/len(df) kesson_table = pd.concat([null_val, percent], axis=1) kesson_table_ren_columns = kesson_table.rename( columns = {0 : '欠損数', 1 : '%'}) return kesson_table_ren_columns print(kesson_table(train_df)) print(kesson_table(test_df))
cabinの欠損値とAge,Fare(1つだけ),embarked?の欠損があります
train=train_df train["Age"] = train["Age"].fillna(train["Age"].median()) train["Embarked"] = train["Embarked"].fillna("S")
とりあえず年齢は中央値でEmbarkedはSで埋めます
で性別の文字とembrakedは数字に直します(Embarkedは最終的に使ってないのでしなくてもよい)
train["Sex"][train["Sex"] =="male"]=0 train["Sex"][train["Sex"] =="female"]=1 train["Embarked"][train["Embarked"] == "S" ] = 0 train["Embarked"][train["Embarked"] == "C" ] = 1 train["Embarked"][train["Embarked"] == "Q"] = 2
同様に
test=test_df test["Sex"][test["Sex"]== "male"]=0 test["Sex"][test["Sex"]== "female"]=1 test["Embarked"][test["Embarked"] == "S" ] = 0 test["Embarked"][test["Embarked"] == "C" ] = 1 test["Embarked"][test["Embarked"] == "Q"] = 2 test["Age"] =test["Age"].fillna(test["Age"].median())
んでtestに一つだけfareの欠損値があるので
test["Fare"].loc[152] = test.Fare.median()
で埋めます。
これで一般的な前処理は大体終わりました。
あとはSVMでも決定木でも、なんでもやってください
ただ機械学習なんにもわからないマンな僕はモデルがどんな形なのか
しっかり見たいのです。
そのためにNNCを使います
で神ツールのNNCが読める形にしなければいけません。
まず列を"x__0
","x__1
"..."y"とします
NNC_train=NNC_train[["Pclass","Sex","Age","Fare","Parch","Survived"]] NNC_test=NNC_test[["Pclass","Sex","Age","Fare","Parch"]] NNC_train1=pd.DataFrame() NNC_test1=pd.DataFrame() i=0 col = pd.DataFrame() for y in NNC_train.columns: print("x__"+str(i)+":"+y) i=i+1 if y=="Survived": NNC_train1["y:"+y]=NNC_train[y] continue; NNC_train1["x__"+str(i)+":"+y]=NNC_train[y]
これでこんな感じのdfができます
testファイルは0うめのsurvivedを付け足します
i=0 col = pd.DataFrame() for y in NNC_test.columns: print("x__"+str(i)+":"+y) i=i+1 if y=="Survived": NNC_test1["y:"+y]=NNC_test[y] continue; NNC_test1["x__"+str(i)+":"+y]=NNC_test[y] NNC_test1["y:Survived"]=0
これでこんな感じのができます
少しつかれたので続きは次回