File size: 9,013 Bytes
540fe64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
131
132
133
134
135
136
137
import streamlit as st
import numpy as np
import pandas as pd
import pickle 
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler, OneHotEncoder

st.set_page_config(page_title="# Оптимизация производственных расходов металлургического комбината.")

st.markdown('# Оптимизация производственных расходов металлургического комбината.')

with st.expander("Описание проекта"):
    st.write("""
        Для оптимизации производственных расходов, металлургический комбинат решил уменьшить потребление электроэнергии на этапе обработки стали. 
        Для этого нужно контролировать температуру сплава. 
        Задача — построить модель, которая будет её предсказывать, заказчик хочет использовать разработанную модель для имитации технологического процесса.
    """)
with st.expander("Описание процесса обработки"):
    st.write("""
        Сталь обрабатывают в металлическом ковше вместимостью около 100 тонн. Чтобы ковш выдерживал высокие температуры, изнутри его облицовывают огнеупорным кирпичом. Расплавленную сталь заливают в ковш и подогревают до нужной температуры графитовыми электродами. Они установлены на крышке ковша.
Сначала происходит десульфурация — из стали выводят серу и корректируют её химический состав добавлением примесей. Затем сталь легируют — добавляют в неё куски сплава из бункера для сыпучих материалов или порошковую проволоку через специальный трайб-аппарат.
Прежде чем в первый раз ввести легирующие добавки, специалисты производят химический анализ стали и измеряют её температуру. Потом температуру на несколько минут повышают, уже после этого добавляют легирующие материалы и продувают сталь инертным газом, чтобы перемешать, а затем снова проводят измерения. Такой цикл повторяется до тех пор, пока не будут достигнуты нужный химический состав стали и оптимальная температура плавки.
Дальше расплавленная сталь отправляется на доводку металла или поступает в машину непрерывной разливки. Оттуда готовый продукт выходит в виде заготовок-слябов (англ. slab, «плита»).
    """)

with st.expander("Описание данных"):
    st.write("""
        Данные хранятся в базе данных PostgreSQL. Она состоит из нескольких таблиц:
        - steel.data_arc — данные об электродах;
        - steel.data_bulk — данные об объёме сыпучих материалов;
        - steel.data_bulk_time — данные о времени подачи сыпучих материалов;
        - steel.data_gas — данные о продувке сплава газом;
        - steel.data_temp — данные об измерениях температуры;
        - steel.data_wire — данные об объёме проволочных материалов;
        - steel.data_wire_time — данные о времени подачи проволочных материалов.

        Таблица steel.data_arc:
        - key — номер партии;
        - BeginHeat — время начала нагрева;
        - EndHeat — время окончания нагрева;
        - ActivePower — значение активной мощности;
        - ReactivePower — значение реактивной мощности.
        
        Таблица steel.data_bulk:
        - key — номер партии;
        - Bulk1 … Bulk15 — объём подаваемого материала.
        
        Таблица steel.data_bulk_time:
        - key — номер партии;
        - Bulk1 … Bulk15 — время подачи материала.
        
        Таблица steel.data_gas:
        - key — номер партии;
        - gas — объём подаваемого газа.
        
        Таблица steel.data_temp:
        - key — номер партии;
        - MesaureTime — время замера;
        - Temperature — значение температуры.
        
        Таблица steel.data_wire:
        - key — номер партии;
        - Wire1 … Wire15 — объём подаваемых проволочных материалов.
        
        Таблица steel.data_wire_time:
       -  key — номер партии;
        - Wire1 … Wire15 — время подачи проволочных материалов.
        
        Во всех файлах столбец key содержит номер партии. В таблицах может быть несколько строк с одинаковым значением key: они соответствуют разным итерациям обработки.
    """)

st.sidebar.header("Признаки для модели машинного обучения")

def changes(df):
    pass

def user_input_features():
    gas = st.sidebar.slider('объём подаваемого газа на продувку, м3/ч', 0, 100, 10)
    temp_first = st.sidebar.slider('значение температуры сплава первого замера, С', 1500, 1680, 1580)
    count = st.sidebar.slider('количество замеров температуры', 1, 20, 3)
    measure_time = st.sidebar.slider('длительность замера, с', 10, 2000, 80)
    Bulk_3 = st.sidebar.slider('объём подаваемого материала', 0, 450, 100)
    Bulk_4 = st.sidebar.slider('объём подаваемого материала', 0, 300, 100)
    Bulk_12 = st.sidebar.slider('объём подаваемого материала', 0, 2000, 500)
    Bulk_14 = st.sidebar.slider('объём подаваемого материала', 0, 650, 300)
    Bulk_15 = st.sidebar.slider('объём подаваемого материала', 0, 350, 100)
    Wire_1 = st.sidebar.slider('объём подаваемых проволочных материалов', 0.0, 22.0, 10.0)
    Wire_2 = st.sidebar.slider('объём подаваемых проволочных материалов', 0, 350, 100)
    full_power = st.sidebar.slider('полная мощность', 0.25, 21.5, 10.5)
    power_coef = st.sidebar.slider('коэффициент мощности', 0.50, 0.90, 0.60)
    
    
    
    data = {'gas': gas,
            'temp_first': temp_first,
            'count_x': count,
            'measure_time': measure_time,
            'Bulk 3': Bulk_3,
            'Bulk 4': Bulk_4,
            'Bulk 12': Bulk_12,
            'Bulk 14': Bulk_14,
            'Bulk 15': Bulk_15,
            'Wire 1': Wire_1,
            'Wire 2': Wire_2,
            'full_power': full_power,
            'power_coef': power_coef,
            }
    features = pd.DataFrame(data, index=[0])
    return features

df = user_input_features()
df = df.sort_index(axis=1)

st.subheader('Таблица с введенными вами параметрами:')
st.write(df)

def preprocessing_data(df, scaler):
    df = scaler.transform(df)
                
    return pd.DataFrame(df, index=[0])
    
@st.cache_resource
def get_model():
    load_model = pickle.load(open('models/power_forecasting.pkl', 'rb'))
    scaler_model = pickle.load(open('models/scaler_power_forecasting.pkl', 'rb'))
    return load_model, scaler_model

model, sc_model = get_model()

df_new = preprocessing_data(df, sc_model)

prediction = model.predict(df_new)


st.subheader('Температура сплава')
rounded_prediction = np.around(prediction)
st.write(str(rounded_prediction.item()))