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