File size: 5,282 Bytes
a58835f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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"Выбранный трактор сейчас в нормальном состоянии")