らんだむな記憶

blogというものを体験してみようか!的なー

タイタニック (4)

家族という情報は何かしら特徴量になりそうな気がする。

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]))

を実行してみると、ただの同姓のお一人様を除外しつつ、そこそこ同じ姓の家族連れの人物同士のグルーピングができる。グループの人数とグループの先頭の人物の同乗家族数が似たような数字になるので、結構家族の候補になっている気がする。