|
import datetime |
|
from io import StringIO |
|
from pathlib import Path |
|
|
|
import pandas as pd |
|
import streamlit as st |
|
|
|
from forecasting import prediction_script |
|
|
|
MOST_IMPORTANT_CONSTANT = 300 |
|
|
|
|
|
def predict_line_chart(dataframe: pd.DataFrame) -> None: |
|
datetime_column = [_x for i, _x in enumerate(dataframe['datetime'].to_list())] |
|
predict_column = [_y for i, _y in enumerate(dataframe['predict'].to_list())] |
|
|
|
if len(datetime_column) > MOST_IMPORTANT_CONSTANT: |
|
datetime_column = [datetime_column[index] for index in |
|
range(0, len(datetime_column), len(datetime_column) // MOST_IMPORTANT_CONSTANT)] |
|
predict_column = [predict_column[index] for index in |
|
range(0, len(predict_column), len(predict_column) // MOST_IMPORTANT_CONSTANT)] |
|
|
|
st.line_chart( |
|
{ |
|
'datetime': datetime_column, |
|
'predict': predict_column, |
|
}, y='predict' |
|
) |
|
|
|
st.set_page_config(page_title="Streamlit Wide Mode", layout="wide") |
|
tractor_data_upload__tab, origin_tractor_data__tab = st.tabs( |
|
["Загрузить данные трактора", "Валидация исходных данных тракторов от оператора", ]) |
|
|
|
with origin_tractor_data__tab: |
|
directory_path = Path().joinpath(*['data', 'исходные данные от оператора']) |
|
|
|
files_dict = {file_path.parent.name: file_path.name for file_path in directory_path.rglob("*") if |
|
file_path.is_file()} |
|
|
|
st.header("Система умной телеметрии трактора") |
|
|
|
st.text('Для начала работы выберите трактор') |
|
|
|
SELECT_TRACTOR_IDENTIFIER_SUGGEST = 'Выберите идентификатор' |
|
SELECT_TRACTOR_DETAIL_SUGGEST = "Выберите деталь" |
|
|
|
selected_tractor_id = st.selectbox("Выберите идентификатор трактора", |
|
[SELECT_TRACTOR_IDENTIFIER_SUGGEST] |
|
+ [f'{tractor_id}' for tractor_id in files_dict.keys()]) |
|
if selected_tractor_id != SELECT_TRACTOR_IDENTIFIER_SUGGEST: |
|
if selected_tractor_id in files_dict: |
|
st.success(f"Выбранный трактор: {selected_tractor_id}") |
|
|
|
files = directory_path.joinpath(selected_tractor_id).rglob("*") |
|
dataframes = [pd.read_csv(file, delimiter=';') for file in files] |
|
dataframe = pd.concat(dataframes) |
|
dataframe = prediction_script.predict(dataframe) |
|
predict_line_chart(dataframe) |
|
|
|
predict_column = [_y for i, _y in enumerate(dataframe['predict'].to_list())] |
|
|
|
if sum(predict_column) / len(predict_column) > 1.5: |
|
st.error('Трактор сейчас определённо имеет проблемы') |
|
|
|
detail_id = st.selectbox("Выберите деталь для замены", [ |
|
SELECT_TRACTOR_DETAIL_SUGGEST, |
|
"ДВС", |
|
"КПП", |
|
"Гидравлика", |
|
"Питание двигателя", |
|
"Электросистема", |
|
"Стояночный тормоз", |
|
"Охлаждение", |
|
"Термостат", |
|
]) |
|
|
|
if detail_id != SELECT_TRACTOR_DETAIL_SUGGEST: |
|
if detail_id: |
|
st.success(f"{detail_id} заказана.\n" |
|
f"Ждите") |
|
else: |
|
st.success(f"Выбранный трактор сейчас в нормальном состоянии") |
|
|
|
else: |
|
st.error("Идентификатор не найдет. ") |
|
with tractor_data_upload__tab: |
|
uploaded_file = st.file_uploader("Choose a file", ) |
|
if uploaded_file is not None: |
|
bytes_data = uploaded_file.getvalue() |
|
|
|
stringio = StringIO(uploaded_file.getvalue().decode("utf-8")) |
|
dataframe = pd.read_csv(uploaded_file, delimiter=';') |
|
|
|
dataframe = prediction_script.predict(dataframe) |
|
|
|
predict_line_chart(dataframe) |
|
|
|
predict_column = [_y for i, _y in enumerate(dataframe['predict'].to_list())] |
|
|
|
if sum(predict_column) / len(predict_column) > 1.5: |
|
st.error('Трактор сейчас определённо имеет проблемы') |
|
|
|
detail_id = st.selectbox("Выберите деталь для замены", [ |
|
SELECT_TRACTOR_DETAIL_SUGGEST, |
|
"ДВС", |
|
"КПП", |
|
"Гидравлика", |
|
"Питание двигателя", |
|
"Электросистема", |
|
"Стояночный тормоз", |
|
"Охлаждение", |
|
"Термостат", |
|
]) |
|
|
|
if detail_id != SELECT_TRACTOR_DETAIL_SUGGEST: |
|
if detail_id: |
|
st.success(f"{detail_id} заказана.\n" |
|
f"Ждите") |
|
else: |
|
st.success(f"Выбранный трактор сейчас в нормальном состоянии") |
|
|