戦コンからDSへの転身なるか?

Dev, DS的な勉強と実践の継続の記録

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値の補完はこれで終わりました。中央値で補完していますが、平均値が良いのか良く分かりません。試行錯誤、経験によるものなのかな。