|
import pandas as pd |
|
import numpy as np |
|
from catboost import CatBoostClassifier |
|
from pathlib import Path |
|
|
|
|
|
|
|
def predict(dataframe): |
|
dataframe = dataframe.replace(r'^\s*-', np.nan, regex=True) |
|
|
|
dataframe.reset_index(drop=True, inplace=True) |
|
|
|
dataframe.drop_duplicates(inplace=True) |
|
|
|
data_time = dataframe['Дата и время'] |
|
|
|
dataframe.drop(columns=['Дата и время', 'iButton2', 'Нагрузка на двигатель, %', 'Крутящий момент (spn513), Нм', |
|
'Положение рейки ТНВД (spn51), %', 'Расход топлива (spn183), л/ч', |
|
'ДВС. Температура наддувочного воздуха, °С', |
|
'Давление наддувочного воздуха двигателя (spn106), кПа', 'Текущая передача (spn523)', |
|
'Температура масла гидравлики (spn5536), С', 'Педаль слива (spn598)'], inplace=True) |
|
|
|
dataframe.drop(['Нейтраль КПП (spn3843)', 'Стояночный тормоз (spn3842)', |
|
'Аварийная температура охлаждающей жидкости (spn3841)', 'Засоренность воздушного фильтра (spn3840)', |
|
'Засоренность фильтра КПП (spn3847)', 'Аварийное давление масла ДВС (spn3846)', |
|
'Засоренность фильтра ДВС (spn3845)', |
|
'Засоренность фильтра рулевого управления (spn3844)', |
|
'Засоренность фильтра навесного оборудования (spn3851)', |
|
'Недопустимый уровень масла в гидробаке (spn3850)', |
|
'Аварийная температура масла в гидросистеме (spn3849)', |
|
'Аварийное давление в I контуре тормозной системы (spn3848)', |
|
'Аварийное давление в II контуре тормозной системы (spn3855)', |
|
'Зарядка АКБ (spn3854)', 'Отопитель (spn3853)', |
|
'Выход блока управления двигателем (spn3852)', |
|
'Включение тормозков (spn3859)', 'Засоренность фильтра слива (spn3858)', |
|
'Аварийное давление масла КПП (spn3857)', |
|
'Аварийная температура масла ДВС(spn3856)', |
|
'Неисправность тормозной системы (spn3863)', 'Термостарт (spn3862)', |
|
'Разрешение запуска двигателя (spn3861)', 'Низкий уровень ОЖ (spn3860)', |
|
'Аварийная температура масла ГТР (spn3867)', |
|
'Необходимость сервисного обслуживания (spn3866)', |
|
'Подогрев топливного фильтра (spn3865)', 'Вода в топливе (spn3864)', |
|
'Холодный старт (spn3871)'], axis=1, inplace=True) |
|
|
|
dataframe = dataframe.astype(str) |
|
|
|
dataframe["Сост.пед.сцепл."] = dataframe["Сост.пед.сцепл."].astype(bool) |
|
|
|
dataframe['Обор.двиг.,об/мин'] = dataframe['Обор.двиг.,об/мин'].str.replace(',', '.').astype(float) |
|
|
|
dataframe['Значение счетчика моточасов, час:мин'] = dataframe['Значение счетчика моточасов, час:мин'].str.replace( |
|
':', '').astype(float) |
|
|
|
dataframe['Сост.пед.сцепл.'] = dataframe['Сост.пед.сцепл.'].replace(',', '.').astype(float) |
|
dataframe['Сост.пед.сцепл.'] = dataframe['Сост.пед.сцепл.'].astype(str) |
|
|
|
dataframe['Полож.пед.акселер.,%'] = dataframe['Полож.пед.акселер.,%'].str.replace(',', '.').astype(float) |
|
|
|
dataframe['Темп.масла двиг.,°С'] = dataframe['Темп.масла двиг.,°С'].str.replace(',', '.').astype(float) |
|
|
|
dataframe['КПП. Температура масла'] = dataframe['КПП. Температура масла'].astype(float) |
|
|
|
model = CatBoostClassifier() |
|
|
|
model.load_model(Path().joinpath(*['forecasting', 'model.cbm'])) |
|
|
|
dataframe['predict'] = model.predict(dataframe) |
|
|
|
dataframe['datetime'] = data_time |
|
|
|
return dataframe |
|
|