Zguin's picture
Rename mmk_informservice_project_dp_10.py to app.py
7e8069c verified
# -*- coding: utf-8 -*-
"""MMK-Informservice_project_DP-10.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1wmkVhN6rkUnZhbwxxXnVsRP7A-7PC_1p
"""
import gradio as gr
import pandas as pd
import numpy as np
import pickle
# Загрузка датасетов
chugun_df = pd.read_csv("chugun.csv")
coke_df = pd.read_csv("coke.csv")
# Загрузка моделей
with open("gb_model_chugun.pkl", "rb") as f:
gb_model_chugun = pickle.load(f)
with open("gb_model_coke.pkl", "rb") as f:
gb_model_coke = pickle.load(f)
import gradio as gr
import pandas as pd
import numpy as np
import pickle
# Загрузка датасетов
chugun_df = pd.read_csv("chugun.csv")
coke_df = pd.read_csv("coke.csv")
# Загрузка моделей
with open("gb_model_chugun.pkl", "rb") as f:
gb_model_chugun = pickle.load(f)
with open("gb_model_coke.pkl", "rb") as f:
gb_model_coke = pickle.load(f)
# Функция для получения случайной строки из датасета
def get_random_sample(dataset):
return dataset.sample(1)
# Функция для форматирования признаков с учетом ожидаемых признаков модели
def format_features(sample, target_column, model):
# Удаляем целевую переменную из признаков
features = sample.drop(columns=[target_column])
feature_names = list(features.columns)
# Проверяем, совпадают ли признаки с ожидаемыми моделью
expected_features = model.feature_names_in_ if hasattr(model, 'feature_names_in_') else feature_names
if set(feature_names) != set(expected_features):
missing_features = set(expected_features) - set(feature_names)
extra_features = set(feature_names) - set(expected_features)
if missing_features:
raise ValueError(f"Датасет не содержит ожидаемые признаки: {missing_features}")
if extra_features:
# Удаляем лишние признаки
features = features[expected_features]
feature_names = expected_features
feature_values = features.values[0]
return feature_names, feature_values
# Основная функция для предсказания
def predict(model_choice):
if model_choice == "Производство чугуна":
dataset = chugun_df
target_column = "Количество чугуна (т)"
model = gb_model_chugun
else:
dataset = coke_df
target_column = "Удельный расход кокса (кг/т)"
model = gb_model_coke
# Получаем случайную строку
sample = get_random_sample(dataset)
feature_names, feature_values = format_features(sample, target_column, model)
actual_value = sample[target_column].values[0]
# Преобразуем входные данные в массив
input_data = np.array([feature_values])
# Предсказание
prediction = model.predict(input_data)[0]
# Расчет процентной ошибки
error_percent = abs((prediction - actual_value) / actual_value) * 100
# Формирование результата
result = f"Предсказанное значение: {prediction:.2f}\n"
result += f"Реальное значение: {actual_value:.2f}\n"
result += f"Процент ошибки: {error_percent:.2f}%"
return (
gr.Dataframe(headers=["Признак"], value=[[name] for name in feature_names]),
gr.Dataframe(headers=["Значение"], value=[[value] for value in feature_values]),
result
)
# Создание интерфейса Gradio
with gr.Blocks() as demo:
# Выбор модели
model_choice = gr.Dropdown(
choices=["Производство чугуна", "Удельный расход кокса"],
label="Выберите модель",
value="Производство чугуна"
)
# Вывод признаков
with gr.Row():
feature_display = gr.Dataframe(headers=["Признак"], value=[])
value_display = gr.Dataframe(headers=["Значение"], value=[])
# Кнопка предсказания
predict_button = gr.Button("Предсказать")
# Вывод результата
output = gr.Textbox(label="Результат предсказания")
# Логика предсказания
predict_button.click(
fn=predict,
inputs=model_choice,
outputs=[feature_display, value_display, output]
)
# Запуск приложения
demo.launch()