File size: 4,803 Bytes
9e24c29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# -*- 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()