家族という情報は何かしら特徴量になりそうな気がする。
train_df = pd.read_csv('train.csv') test_df = pd.read_csv('test.csv') df_concat = pd.concat([train_df, test_df]) def get_surname(item): return item['Name'].split(',')[0] def get_n_members(item): return (item['SibSp']+item['Parch'] + 1) # self families = {} for i, (column_name, item) in enumerate(df_concat.iterrows()): fam_name = get_surname(item) n_members = get_n_members(item) if n_members <= 1: for cnt in range(100): fam_name_mod = f'fam_name_{cnt}' if fam_name_mod not in families: families[fam_name_mod] = [item] else: families.setdefault(fam_name, []).append(item) for fam_name, passengers in families.items(): n_member = len(passengers) if n_member <= 1: continue print(fam_name, n_member, get_n_members(passengers[0]))
を実行してみると、ただの同姓のお一人様を除外しつつ、そこそこ同じ姓の家族連れの人物同士のグルーピングができる。グループの人数とグループの先頭の人物の同乗家族数が似たような数字になるので、結構家族の候補になっている気がする。