Kaggle / Titanic - Machine Learning from Disaster / 独学 / とりあえず自分でやってみる Day2
環境
Jupyter Lab / Local
今日やったこと
今日はほとんど進めていません、Errorと格闘してたりして…
年齢の欠損値について、性別と階級カテゴリーごとに中央値で補完。
### 'Age'と'Pclass'と'Sex'との間で相関関係がありそう→’Pclass'x'Sex'のmedian(), mean()で補完する # まず'Sex', 'Pclass'で行列を準備 guess_ages = np.zeros((2, 3)) # 行列'guess_ages'に'Sex', 'Pclass'における'Age'の中央値を代入 for dataset in combine: for i in range(0, 2): for j in range(0, 3): # 'Sex'がiで'Pclass'がj+1のレコードをDataFrameとして抽出 guess_df = dataset[(dataset['Sex'] == i) & (dataset['Pclass'] == j+1)]['Age'].dropna() # 中央値を算出 age_guess = guess_df.median() # 行列(i, j)に中央値を代入 guess_ages[i, j] = int(age_guess/0.5 + 0.5) * 0.5 # ここは分からない…職人技? for i in range(0, 2): for j in range(0, 3): dataset.loc[(dataset.Age.isnull()) & (dataset.Sex == i) & (dataset.Pclass == j+1), 'Age'] = guess_ages[i, j] dataset['Age'] = dataset['Age'].astype(int)
テストデータにあった’Fare'の1つの欠損値を中央値で補完。
test_df_drpd['Fare'].fillna(test_df_drpd['Fare'].dropna().median(), inplace=True)
これで全データの欠損値を補完できました。
そこで、すべての変数について相関係数を出してみました。
train_df_drpd_corr = train_df_drpd.corr()
print(train_df_drpd_corr)
こんな感じ。
それをseabornでheatmap化してみたりしました。
所感
null値の補完はこれで終わりました。中央値で補完していますが、平均値が良いのか良く分かりません。試行錯誤、経験によるものなのかな。