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"Выбранный трактор сейчас в нормальном состоянии")