Теперь пора заняться категориальными признаками. Закодируйте их в тренировочной и тестовой выборках. Затем объедините подготовленные количественные и категориальные данные в DataFrame и выведите первые пять его строк на экран командой print().
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
# импортируйте класс для прямого кодирования
from sklearn.preprocessing import OneHotEncoder
# импортируйте класс для масштабирования стандартизацией
from sklearn.preprocessing import StandardScaler
RANDOM_STATE = 42
df = pd.read_csv('real_estate_clean_cat.csv')
X = df.drop('price', axis=1)
y = df['price']
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
random_state=RANDOM_STATE)
cat_col_names = ['building_type', 'parking_place', 'rooms_number']
num_col_names = ['total_area',
'living_area',
'ceil_height',
'city_center_distance',
'years_after_repair']
## подготовка признаков для масштабирования и кодирования
# создайте переменную с экземпляром класса StandardScaler()
scaler = StandardScaler()
# обучите и трансформируйте количественные признаки из тренировочной выборки
# сделайте это одной командой
X_train_scaled = scaler.fit_transform(X_train[num_col_names])
# выполните преобразование количественных признаков в тестовой выборке
X_test_scaled = scaler.transform(X_test[num_col_names])
# создайте переменную с экземпляром класса OneHotEncoder()
# включите параметр для избегания появления дамми-ошибок,
# отключите sparse-отображение
encoder = OneHotEncoder(drop='first', sparse=False)
# обучите и трансформируйте категориальные признаки из тренировочной выборки
# сделайте это одной командой
X_train_ohe = encoder.fit_transform(X_train[cat_col_names])
# выполните преобразование категориальных признаков в тестовой выборке
X_test_ohe = encoder.transform(X_test[cat_col_names])
# получите от кодировщика список новых столбцов и сохраните в новой переменной
encoder_col_names = encoder.get_feature_names()
# создаём тренировочный и тестовый датафреймы из закодированных и отмасштабированных данных
# для данных OHE названия столбцов укажите из переменной encoder_col_names
X_train_ohe = pd.DataFrame(X_train_ohe, columns=encoder_col_names)
X_test_ohe = pd.DataFrame(X_test_ohe, columns=encoder_col_names)
X_train_scaled = pd.DataFrame(X_train_scaled, columns=num_col_names)
X_test_scaled = pd.DataFrame(X_test_scaled, columns=num_col_names)
# объединяем все преобразованные данные в тренировочный и тестовый датафреймы
# сбрасываем индексы в датафрейме с числовыми индексами, чтобы избежать ошибок
X_train = pd.concat([X_train_ohe, X_train_scaled], axis=1)
X_test = pd.concat([X_test_ohe, X_test_scaled], axis=1)
# выведите пять первых строк из тренировочного датафрейма командой print()
print(X_train.head())