この記事では、Python初心者でもできるように、タイタニック生存予測をレクチャーしていきます!
記事にでてくるコードは配布しております。下記LINE@からダウンロードください。
メッセージにて、「データ分析」とお送りいただければダウンロードができます。

今回は、
- 欠損値を処理するデータの前処理をおこなう
- ダミー変数に置き換えるデータの前処理をおこなう
という流れをサンプルコードとともに解説をします!
前回では、生存データを把握したりデータの処理の方法について取り上げてたりしていきました。
それを踏まえ今回は、実際に予測をするためのデータの前処理をおこなっていきます。
データの前処理によって、予測精度が大きく変わってしまうため今回もかなり大切な内容です。
それでは一緒に学んでいきましょう!!
目次
欠損値を処理するデータの前処理をおこなおう!

データの前処理として、まずは欠損値の処理をおこなっていきます!
前回の第2回では「データの前処理」で主におこなうことを以下の2つといいました。
- 欠損値があるデータを処理(削除・穴埋め)する
- 必要であればダミー変数を用いてデータを置き換える
その中で、まずは、無回答や非該当など集計から除去すべき値ある「欠損値」を処理していきます!
分析するデータを読みこむ
まずは、下記のLINE@から「データ分析第3回」のファイルと「csv_data」のフォルダをダウンロードします。
メッセージにて、「データ分析」とお送りいただければダウンロードができます。


データ分析のファイルのコードを実行し、ファイルデータを読み込みます。
今回は予測結果の確認するために、trainデータだけでなくtestデータも読み込んでいきます!

予測と関係ないデータ列を削除する
前回の第2回と同じように、以下のポイントに沿ってデータ処理をおこないます。
- 行(人数)を削除せず、なるべく予測と関係データ列から削除をおこなう
- 欠損値があるデータ列を確認し、削除するべきか穴埋めすべきなのか考える
上記をふまえ、まずは予測と関係ないデータ列から削除していきます。
下記のようなコードを書き削除をおこないます。
その後、欠損値がデータ内にどれだけあるのか確認していきます。

これをみると、trainデータではAge(年齢)とEmbarked(出港地)に欠損値があり、testデータでは同じくAge(年齢)とFare(運賃)に欠損値があることがわかります。
これをふまえ、今度はこの3つのデータ群について欠損値処理をおこなっていきます!
文字列について欠損値処理をおこなう
ここでは、まずAgeやFare簡単なEmbarkedについての欠損値処理をおこなっていきます。
Embarkedは以下のような文字列のデータ列をしています。

加えて、埋める前のEmbarkedは以下のような4種類のデータで構成していることがわかります。

これをふまえ、’S’, ‘C’, ‘Q’に欠損値を振り分け埋めるようにしていきます!
今回は最頻値でデータを埋めていきます!
データ群で最も頻繁に出現する値。
数値の欠損値処理は「最頻値」が採用されることが多いです。
理由としては、文字列は数値による比較ができないため、文字列の個数の多さで欠損値を埋める方法が適しているためです。
Embarkedの欠損値処理をおこなっていきます。

欠損値を埋めることができたことがわかります!
数値について欠損値処理をおこなう
次は、AgeやFareといった数値について処理していきます!
ここでは、中央値をつかい、欠損値を埋めていきます!
分析したいデータのうち、一番小さい数から順番に数えて真ん中の番目にある値。
例えば、0,2,5,7,8,9,10という7個の値があったとき、一番小さい数である0から順番に数えると、7が真ん中の番目にあることがわかります。このとき中央値は7となります。
数値の欠損値処理は「中央値」が採用されることが多いです。
理由としては、平均値や最頻値よりも中央値はデータの偏りに強いためです。
Ageの欠損値処理をおこなっていきます。

加えて、Fareの欠損値処理をおこなっていきます。

どちらも処理できたことがわかります。
ダミー変数に置き換えるデータの前処理をおこなおう!
欠損値処理ができたところで次にダミー変数に置き換えるデータの前処理をおこないます!
以下が先ほどみせたポイントのリストです。
- 欠損値があるデータを処理(削除・穴埋め)する
- 必要であればダミー変数を用いてデータを置き換える
今回は、Sex(性別)やEmbarked(出港地)などの文字列をダミー変数を用いてデータを置き換えていきます!
2種類に分けられる文字列をダミー変数に置き換える
まずは、簡単なSex(性別)についてダミー変数に置き換えていきます!
こちらは、データの種類としてmaleとfamaleの2つがあります。
こちらは、maleなら0、famaleなら1に分けていきます!

置き換えることができました!
3種類以上に分けられる文字列をダミー変数に置き換える
つづいて、Embarked(出港地)についてダミー変数に置き換えていきます!
こちらは、’S’, ‘C’, ‘Q’の3つがあります。
このとき、~である/でないを1つの列にまとめることは正直無理です。
なので、3つの列を作成し、’S’があるときは1ないときは0、’Q’があるときは1ないときは0…とそれぞれにダミー変数を加えていきます!
今回は、pandasのget_dummiesメソッドをつかい、データをダミー変数に置き換えてもらいます!

置き換えることができました!!
それでは、実際にデータの前処理ができたのか確認していきます!!
データの前処理ができたのか確認する
最後にデータの前処理ができているかtrainデータとtestデータをみていきましょう!
まずはtrainデータをみていきます。
下記のようなコードを書くと、データの中身を全て表示せせることができます。
pd.set_option('display.max_rows', None)
それでは、ちゃんと前処理ができているかみていきましょう!

trianデータの前処理ができていることがわかります!!
続いて、testデータも確認していきます。

こちらもデータをざっと見た限りちゃんと前処理ができていることがわかります!!
まとめ
今回は、
- 欠損値を処理するデータの前処理をおこなう
- ダミー変数に置き換えるデータの前処理をおこなう
という流れをサンプルコードとともに解説をしました!
次回はいよいよ、ランダムフォレストをもちいて、タイタニックの生存予測をおこなっていきます!
実際に処理したデータで、どのくらい予測できるのかをみていきます!
次回も楽しみにしてくださると嬉しいです!
記事にでてくるコードはLINE@にて配布をしております!
LINEのメッセージ欄に「データ分析」とお送りいただければ、ダウンロードリンクを送付いたします!
コード配布はLINE@にて!