Sutt / app.py
vanus's picture
Upload 40 files
a58835f verified
raw
history blame
5.28 kB
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"Выбранный трактор сейчас в нормальном состоянии")