-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain.py
More file actions
189 lines (165 loc) · 6.38 KB
/
Main.py
File metadata and controls
189 lines (165 loc) · 6.38 KB
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
import streamlit as st
import sqlite3
import pandas as pd
import os
import spacy
from collections import Counter
st.title("Streamlit приложение для обслуживания банкоматов")
st.write(
'<p style="font-size: 44px;">Выберите базу данных:</p>', unsafe_allow_html=True
)
st.write(
'<p style="font-size: 20px;">Добавить свой csv файл:</p>', unsafe_allow_html=True
)
uploaded_file = st.file_uploader("", type=["csv"])
if uploaded_file is not None:
df = pd.read_csv(uploaded_file, sep=";")
df["DeviceID"] = df.DeviceID.str[8:].astype(int)
df = df[df["Value"].notna()]
df = df[~(df["Value"].str.isdigit())]
list = [
"ВосстановлениеСвязи",
"ВнесениеНаличных",
"ВходПользователя",
"ВыходПользователя",
"ОжиданиеПользователя",
"ОшибкаКарт",
"ОшибкаПриемаКупюр",
"ПерезагрузкаУстройства",
"Предупреждение",
"СбросНастроек",
]
df = df[df.EventType.isin(list) == False]
df[df.EventType == "ПроверкаСистемныхЛогов"]["Value"].replace(
{"Ошибок не найдено": "Хорошо"}
)
data1 = {
"log": [
"Ошибка",
"Отключено",
"Техническая ошибка",
"Техническое",
"Слабый сигнал",
"Проблемы",
"Нет сигнала",
"Нет денег",
"Не удалось",
"Закрыто на обслуживание",
"Закрыто из-за проблем",
"Ошибка: не удалось снять 500 рублей.",
"Сбой работы: транзакция не завершена.",
"Обработка не выполнена, сбой механизмов",
"Сбой банкомата, отказ механизма",
"Устройство отключено",
"Механизм отключён",
"Слабая связь",
"Слабое подключение",
"Сканирование невозможно, ошибка",
"В банкомате нет денег",
"Анализ не завершено, сбой системы",
"Обработка не завершено, нет данных",
"Ошибка: недостаточно средств на счете.",
"Сбой системы: транзакция не закончена.",
"Отключить банкомат",
"Принудительное отключение",
"Проблемы работы",
"Проблемы обработки",
"Проблемы оплаты",
"Проблемы автомата",
"Потеря пакетов",
"Потеря данных",
"Потеря информации",
"Плохое соединение",
"Плохой контакт",
"Плохое",
"Плохое, отключить",
],
"has_error": [
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
True,
], # Метки для примера
}
df_lem = pd.DataFrame(data1)
nlp = spacy.load("ru_core_news_sm")
def tokenize_and_lemmatize(text):
doc = nlp(text)
return [token.lemma_ for token in doc if not token.is_punct]
df_lem["lemmas"] = df_lem["log"].apply(tokenize_and_lemmatize)
error_logs = df_lem[df_lem["has_error"]]["lemmas"]
all_lemmas = [lemma for sublist in error_logs for lemma in sublist]
lemma_counter = Counter(all_lemmas)
common_error_lemmas = [lemma for lemma, count in lemma_counter.most_common(8)]
def check_for_errors(text):
tokens = tokenize_and_lemmatize(text)
for token in tokens:
if token in common_error_lemmas:
return True
return False
df["predicted_has_error"] = df["Value"].apply(check_for_errors)
df["time"] = df.Timestamp
df["datetime"] = updated_df = df["time"].astype("datetime64[ns]")
df["datetime"] = pd.to_datetime(df["datetime"])
df["Date"] = df["datetime"].dt.date
df = df.drop("time", axis=1)
st.session_state.df = df
if st.button("Использовать стандартную:"):
# db_path = os.path.join(os.path.dirname(__file__), 'Table.db')
# conn = sqlite3.connect(db_path)
# query = 'SELECT * FROM "atm_data";'
# df = pd.read_sql(query, conn)
# conn.close()
with st.spinner("Загружаю базу...", show_time=True):
df = pd.read_csv("final_verse.csv")
df["DeviceID"] = df.DeviceID.str[8:].astype(int)
# df['predicted_has_error'] = df['predicted_has_error'].replace({"Истина": 1, "Ложь": 0})
df["time"] = df.Timestamp
df["datetime"] = updated_df = df["time"].astype("datetime64[ns]")
df["datetime"] = pd.to_datetime(df["datetime"])
df["Date"] = df["datetime"].dt.date
st.session_state.df = df
st.success("Стандартная база загружена!")
if st.button("Получить данные по всем банкоматам"):
df = st.session_state.df
st.write(df)
user_input = st.number_input(
"Айди конкретного банкомата", min_value=0, max_value=100, value=10
)
if st.button("Получить данные по конкретному банкомату"):
df = st.session_state.df
st.write(df[df.DeviceID == user_input])