Закодируйте два оставшихся признака:
- Создайте экземпляр класса
OrdinalEncoderи укажите порядок категорий. - Сделайте так, чтобы
OrdinalEncoderмог обработать неизвестные категории и кодировал их какNaN.
# импортируем библиотеки и объявляем константы
import pandas as pd
import numpy as np
from sklearn.preprocessing import OrdinalEncoder
RANDOM_STATE = 42
# подготавливаем данные заранее созданной функцией
# в код добавили кодирование неранговых переменных
X_train, X_test, y_train, y_test = prepare_data('railway_full.csv')
# создаём список с ранговыми категориями для кодирования OrdinalEncoder
ordered_cols = [
'Оценка комфортности времени отправления/прибытия',
'Общая оценка качества предоставленной услуги'
]
# создайте экземпляр класса OrdinalEncoder для упорядоченного кодирования
# кодируйте неизвестные категории пропусками
ordered_encoder = OrdinalEncoder(
categories=[['плохо', 'нормально', 'хорошо'],
['плохо', 'нормально', 'хорошо']
],
handle_unknown='use_encoded_value',
unknown_value=np.nan
)
# обучаем OrdinalEncoder на выбранных признаках из тренировочной выборки
# преобразовываем тренировочную выборку
X_train[ordered_cols] = ordered_encoder.fit_transform(X_train[ordered_cols])
X_test[ordered_cols] = ordered_encoder.transform(X_test[ordered_cols])
# выводим пропуски в данных
print(X_test.isna().sum())
Результат
Возраст 0
Расстояние 0
Покупка билета онлайн 0
Питание включено 0
Наличие wifi 0
Оценка комфортности места 0
Оценка качества уборки 0
Оценка качества обслуживания в пути 0
Оценка комфортности покупки билета онлайн 0
Оценка качества wifi 0
Оценка комфортности времени отправления/прибытия 0
Общая оценка качества предоставленной услуги 0
Пол_муж 0
Путешествует с детьми_нет 0
Путешествует по работе_нет 0
Тип_плацкарт 0
Тип_св 0
Оценка качества питания_отсутствует 0
Оценка качества питания_плохо 0
Оценка качества питания_хорошо 0
dtype: int64