目次
1.Kaggleとは
2.Titanicチュートリアル
3.生存予測
4.データ分析
5.まとめ
6.感想
7.用いたコード
参考文献
1. Kaggleとは
初心者にとってはデータ分析の練習をするサイトです。実際は様々な問題を解くのを競い合って自分の腕を試すサイトです。データセットがもらえ、さらに他の人の解説(カーネル)を見ることができるので非常に学べるサイトだと思います。 https://www.kaggle.com
2. Titanicチュートリアル
Kaggleのコンペティションは普通は開催期間が決まっていますが、チュートリアルは常時開催されています。その中でももっとも初心者向けじゃないかと思われるものがこのタイタニック問題です。ここでは891人分のデータを用いて他の418人の生存予測を行います。
3.生存予測
ここからは実際にコードを交えて生存予測をして行いたいと思います。おそらく無駄に助長なコードがあるとは思いますが、ご了承ください。 はじめに必要なライブラリをimportします。
import pandas as pd import numpy as np from sklearn.ensemble import RandomForestClassifier
とりあえずはじめにtrainデータを見てみます。私は、jupyterをエディターとして使っています。初めてKaggleをやったときはまずこのデータを見ることすらできませんでした。ですがやり方は簡単でした。Kaggleからtrain.csvとtest.csvをダウンロードしてきて、それをjupyterのフォルダ?がいっぱい並んでいる所にドロップして、次のコードを打つだけでした。この方法以外だとtrain.csvにアクセスするのがとても面倒ではじめはできませんでした。
train= pd.read_csv("train.csv") test= pd.read_csv("test.csv") train.head(3)
今回はデータの上から3つ目までを見てみます。さてデータを見てみると明らかにNameとTicketがめんどくさくてこのままでは学習させるのが難しそうだなと思います。 次に、trainの情報を見てみます。
train.info()
<class ‘pandas.core.frame.DataFrame’>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB
これから何がわかるでしょうか? わかることは「891のデータがあること。Age、CabinとEmbarkedにnullがあること。データの型が色々あること。」などでしょうか。 次にやることは、sexのmaleを0に、femaleを1に置き換える。また、EmbarkedのSを0、Cを1、Qを2に置き換えます。これはobjectだと今後学習させるときに問題があるからやります。 Embarkedは搭乗した場所で、SはSouthampton、CはCherbourg、QはQueenstownです。wikipediaに地図があるので見てみると面白いかもしれません。
train= pd.read_csv("train.csv").replace("male",0).replace("female",1).replace("S",0).replace("C",1).replace("Q",2) test= pd.read_csv("test.csv").replace("male",0).replace("female",1).replace("S",0).replace("C",1).replace("Q",2)
次にやりたいことは欠損値を埋めることです。Cabinは無視して、AgeとEmbarkedの欠損値を埋めます。そのコードは下のようになります。今回はそれぞれの平均値meanで埋めました。他にも中央値で埋める方法などもありましたが何度か試した所、結局平均値がいいという結果に私は至りました。
train["Age"].fillna(train.Age.mean(), inplace=True) train["Embarked"].fillna(train.Embarked.mean(), inplace=True)