Spaces:
Sleeping
Sleeping
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())) |