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