الأفضل فصل حساب الإحصائيات، وذلك ما يجب فعله عند التعامل مع بيانات تدريب واختبار، عليك أولاً حساب الإحصائيات من بيانات التدريب فقط.
ثم تعريف الدالة التي تستقبل الإحصائيات وبالطبع بها عليك العمل على نسخة من البيانات لتجنب تعديل البيانات الأصلية بشكل غير متوقع، وبداخلها أيضًا تُحدد الأعمدة التي تريد مِلأها.
ثم تطبيق الدالة على بيانات التدريب:
age_mean_train = train_data['Age'].mean()
embarked_mode_train = train_data['Embarked'].mode()[0]
def fill_missing_values_ml(data, age_fill, embarked_fill, deck_fill='F'):
data_filled = data.copy()
fill_values = {
'Age': age_fill,
'Embarked': embarked_fill,
'Deck': deck_fill
}
cols_to_fill = [col for col in fill_values.keys() if col in data_filled.columns]
for col in cols_to_fill:
data_filled[col].fillna(fill_values[col], inplace=True)
return data_filled
train_data_processed = fill_missing_values_ml(train_data, age_mean_train, embarked_mode_train, deck_fill='F')
ولاحظ تحديد [0] لأن mode() تعيد أكثر من قيمة لو تساوت التكرارات.