Lifeinhockey commited on
Commit
f905115
·
verified ·
1 Parent(s): 0bc7581

Delete Logging_Error_Анализ_Данных_Синтетич.py

Browse files
Logging_Error_Анализ_Данных_Синтетич.py DELETED
@@ -1,1109 +0,0 @@
1
- # Модель связывает организацию кода в части использования разных программных модулей для разных архитектурных элементов (маркированных классов)
2
- # с количеством фиксируемых ошибок в работе кода.
3
- # Анализ данных, синтез данных.
4
-
5
- # Метолика использования.
6
- # Удаление строк из data не удовлетворяющих условиям: < data_Max и >= data_Min
7
- # Удаление дублирующихся строк, оставлены первые вхождения
8
- # Заполнение пустых ячеек нулевыми значениями, если нужно
9
- # 0. Увеличение количества СТОЛБЦОВ датасета, если нужно ???
10
- # 1. Генерация нулевых значений данных (из одной строки с нулями - файл Logging_Error_Исходн_0.xlsx).
11
- # 1.1. Сгенерировать нулевые значения входных параметров.
12
- # 1.2. Сгенерировать нулевые значения выходов - target.
13
- # 1.3. Зашумить данные нормальным шумом с K_SKO = 0.0001 - выходной файл Logging_Error_0.xlsx.
14
- # 2. Генерация значений входных параметров с заданным шагом.
15
- # 2.1. Сгенерировать значения входных параметров с заданным шагом - входной файл из одной строки с нулями Logging_Error_Исходн_0.xlsx.
16
- # 2.2. Вычислить значения выходов - target - выходной файл Logging_Error_перебор_значений_0.xlsx.
17
- # 2.3. Зашумить данные нормальным шумом с K_SKO = 0.0001 - выходной файл Logging_Error_перебор_значений_шум.xlsx.
18
- # 3. Генерация значений входных параметров на основе реальных данных.
19
- # 3.1. Увеличение количества строк в датасете на основе случайного изменения исходного датасета - входной файл Logging_Error_Исходн_Синт.xlsx.
20
- # 3.2. Вычислить значения выходов - target - входной файл Logging_Error_увел_исходн.xlsx, выходной - Logging_Error_увел_исходн_target.xlsx.
21
- # 3.3. Зашумить данные нормальным шумом с K_SKO = 0.0001 - выходной файл Modules_Error_шум_исходн_target.xlsx.
22
- # 4. Объединить все сгенерированные данные в один файл - итоговый файл Logging_Error_Синтетические.xlsx.
23
-
24
- # 5. Генерация данных на основе полного перебора значений с заданным шагом
25
- # 5.1. Генерация данных входных параметров на основе полного перебора значений с заданным шагом - входной файл из одной строки с нулями Logging_Error_Исходн_0.xlsx.
26
- # 5.2. 3.2. Вычисление количества ошибок (target) на основе количества и соотношения LOG, lack - входной файл Logging_Error_полн_перебор.xlsx, выходной - Logging_Error_полн_перебор_target.xlsx.
27
- # 5.3. 3.3. Зашумить данные нормальным шумом с K_SKO = 0.0001 - выходной файл Logging_Error_Синтетические.xlsx.
28
-
29
-
30
-
31
-
32
-
33
- # импорт библиотек
34
- import os
35
- import warnings
36
- warnings.filterwarnings(action='ignore')
37
- from tensorflow import keras
38
- import pickle
39
- import pandas as pd
40
- import numpy as np
41
- import copy
42
- from sklearn.model_selection import cross_validate
43
- from sklearn.base import BaseEstimator, TransformerMixin
44
- from sklearn.utils import check_array
45
- from sklearn.impute import SimpleImputer
46
- from sklearn.feature_selection import SelectFwe, f_regression, VarianceThreshold
47
- from sklearn.cluster import FeatureAgglomeration
48
- from sklearn.linear_model import LassoLarsCV, LassoCV
49
- from sklearn.decomposition import PCA
50
- from sklearn.ensemble import ExtraTreesRegressor
51
- from sklearn.pipeline import Pipeline
52
- from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
53
- import random
54
- from numba import njit
55
- from numba import types
56
- from numba.typed import Dict
57
-
58
- import matplotlib.pyplot as plt
59
- #import seaborn as sb
60
-
61
- # Монтаж Google Диска
62
- #from google.colab import drive
63
- #drive.mount('/content/drive')
64
-
65
- # Параметры модели ------------------------------------------------------------------------------
66
- data_path = 'C:\\Work\Python_Work1\\GIGA IDE\Logirovanie\\03 Анализ данных\\ИД Синтетическме 03_10000\\Logging_Error_00.xlsx' # Путь к исходным данным
67
- data_save_path = 'C:\\Work\Python_Work1\\GIGA IDE\Logirovanie\\03 Анализ данных\\ИД Синтетическме 03_10000\\Logging_Error_00_.xlsx' # Путь для сохранения данным
68
- model_name = 'Model_Logging_Error.keras' # Имя файла модели
69
- img_file = 'Structure_model.png' # Имя файла структуры модели
70
- inp_file = 'inp_monitoring-dataset.xlsx' # Имя файла с входными данными для прогноза
71
- num_increment_cycles = 20 #2000 #40 #36 # 80 Количество циклов увеличения строк данных
72
- #SKO_random_normal = 5 # СКО нормального распределения при расширении исходного датасета
73
- K_SKO = 0.0001 # 0.2 # Коэффициент для определения СКО
74
- SKO_random_normal = 0.2 # Коэффициент для определения СКО
75
- data_Min = 1
76
- data_Max = 10000 # 10000
77
- data_Max_2 = data_Max * 0.5
78
- target_min = 1
79
- #X_max = 100000
80
- #y_max = 100000
81
- # -----------------------------------------------------------------------------------------------
82
-
83
- # версии библиотек
84
- import sklearn
85
- import pandas
86
- import numpy
87
- import tensorflow
88
-
89
- print(f'{sklearn.__version__=}')
90
- print(f'{pandas.__version__=}')
91
- print(f'{numpy.__version__=}')
92
- print(f'{tensorflow.__version__=}')
93
-
94
- #from google.colab import files
95
- #uploaded = files.upload() # Загрузка файла с компьютера
96
-
97
- target = 'target'
98
- num_features = [
99
- 'markers.MON_CATCH_LOG',
100
- 'markers.MON_CATCH_LOG_LACK',
101
- 'markers.MON_TRY_LOG',
102
- 'markers.MON_TRY_LOG_LACK',
103
- 'markers.MON_COMPONENT_DEBUG',
104
- 'markers.MON_COMPONENT_LACK_DEBUG',
105
- 'markers.MON_COMPONENT_ERROR',
106
- 'markers.MON_COMPONENT_LACK_ERROR',
107
- 'markers.MON_COMPONENT_INFO',
108
- 'markers.MON_COMPONENT_LACK_INFO',
109
- 'markers.MON_COMPONENT_LOG',
110
- 'markers.MON_COMPONENT_LACK_LOG',
111
- 'markers.MON_COMPONENT_TRACE',
112
- 'markers.MON_COMPONENT_LACK_TRACE',
113
- 'markers.MON_COMPONENT_WARN',
114
- 'markers.MON_COMPONENT_LACK_WARN',
115
- 'markers.MON_CONTROLLER_DEBUG',
116
- 'markers.MON_CONTROLLER_LACK_DEBUG',
117
- 'markers.MON_CONTROLLER_ERROR',
118
- 'markers.MON_CONTROLLER_LACK_ERROR',
119
- 'markers.MON_CONTROLLER_INFO',
120
- 'markers.MON_CONTROLLER_LACK_INFO',
121
- 'markers.MON_CONTROLLER_LOG',
122
- 'markers.MON_CONTROLLER_LACK_LOG',
123
- 'markers.MON_CONTROLLER_TRACE',
124
- 'markers.MON_CONTROLLER_LACK_TRACE',
125
- 'markers.MON_CONTROLLER_WARN',
126
- 'markers.MON_CONTROLLER_LACK_WARN',
127
- 'markers.MON_REPOSITORY_DEBUG',
128
- 'markers.MON_REPOSITORY_LACK_DEBUG',
129
- 'markers.MON_REPOSITORY_ERROR',
130
- 'markers.MON_REPOSITORY_LACK_ERROR',
131
- 'markers.MON_REPOSITORY_INFO',
132
- 'markers.MON_REPOSITORY_LACK_INFO',
133
- 'markers.MON_REPOSITORY_LOG',
134
- 'markers.MON_REPOSITORY_LACK_LOG',
135
- 'markers.MON_REPOSITORY_TRACE',
136
- 'markers.MON_REPOSITORY_LACK_TRACE',
137
- 'markers.MON_REPOSITORY_WARN',
138
- 'markers.MON_REPOSITORY_LACK_WARN',
139
- 'markers.MON_RESTCONTROLLER_DEBUG',
140
- 'markers.MON_RESTCONTROLLER_LACK_DEBUG',
141
- 'markers.MON_RESTCONTROLLER_ERROR',
142
- 'markers.MON_RESTCONTROLLER_LACK_ERROR',
143
- 'markers.MON_RESTCONTROLLER_INFO',
144
- 'markers.MON_RESTCONTROLLER_LACK_INFO',
145
- 'markers.MON_RESTCONTROLLER_LOG',
146
- 'markers.MON_RESTCONTROLLER_LACK_LOG',
147
- 'markers.MON_RESTCONTROLLER_TRACE',
148
- 'markers.MON_RESTCONTROLLER_LACK_TRACE',
149
- 'markers.MON_RESTCONTROLLER_WARN',
150
- 'markers.MON_RESTCONTROLLER_LACK_WARN',
151
- 'markers.MON_SERVICE_DEBUG',
152
- 'markers.MON_SERVICE_LACK_DEBUG',
153
- 'markers.MON_SERVICE_ERROR',
154
- 'markers.MON_SERVICE_LACK_ERROR',
155
- 'markers.MON_SERVICE_INFO',
156
- 'markers.MON_SERVICE_LACK_INFO',
157
- 'markers.MON_SERVICE_LOG',
158
- 'markers.MON_SERVICE_LACK_LOG',
159
- 'markers.MON_SERVICE_TRACE',
160
- 'markers.MON_SERVICE_LACK_TRACE',
161
- 'markers.MON_SERVICE_WARN',
162
- 'markers.MON_SERVICE_LACK_WARN',
163
- 'markers.cyclomatic_complexity_LACK',
164
- 'markers.lines_of_code_LACK',
165
- 'markers.lambda_count_LACK',
166
- 'markers.nesting_depth_LACK',
167
- 'markers.try_catch_count_LACK'
168
- ]
169
-
170
- # Чтение данных
171
- #data = pd.read_excel('Logging_Error.xlsx')
172
- data = pd.read_excel(data_path)
173
- data = data.astype(float)
174
- data.shape
175
- print('data.shape = ', data.shape)
176
-
177
- # Удаление дублирующихся строк, оставлены первые вхождения
178
- data = data.drop_duplicates(subset=num_features)
179
-
180
- # Удаление строк с дубликатами в столбце 'target', оставлены первые вхождения
181
- # Округляем значение в столбце 'target'
182
- # data['target'] = data['target'].round(3)
183
- # data = data.drop_duplicates(subset=['target'], keep='first')
184
-
185
- # Удаление индексов строк из датафрейма
186
- data = data.reset_index(drop=True)
187
- print('Удаление дублирующихся строк')
188
- print('data.shape = ', data.shape)
189
-
190
-
191
-
192
-
193
- '''
194
- # 1.1, 1.2, 1.3. Генерация нулевых значений данных ------------------------------------------------------------------------------------
195
- # Увеличение количества строк в датасете и зашумление на основе случайного изменения одной строки с нулями
196
-
197
- # Выделение столбцов с логированием (LOG) и без логирования (lack)
198
- lack_cols = [x for x in num_features if '_lack' in x]
199
- LOG_cols = [x for x in num_features if not '_lack' in x]
200
-
201
- data_ = copy.deepcopy(data)
202
- data__ = copy.deepcopy(data)
203
-
204
- data_shape_0 = data.shape[0]
205
- for j in range(num_increment_cycles):
206
- print('j = ', j)
207
-
208
- # Случайное изменение исходного датасета - внесение случайной составляющей в значения входных показателей и target -----------------
209
- for i in range(data_shape_0):
210
- # Случайное изменение значений target
211
- Delta = np.random.normal(0, abs(data_.at[i, target] * K_SKO), 1) # MO, SKO, Кол-во
212
- data_.at[i, target] = data_.at[i, target] + Delta
213
- if data_.at[i, target] <= 0: data_.at[i, target] = abs(np.random.normal(0, K_SKO, 1))
214
-
215
- # Случайное изменение значений входных показателей
216
- if Delta > 0: # Количество ошибок возросло
217
- for col_1 in LOG_cols: # Количество логирования уменьшилось
218
- data_.at[i, col_1] = data_.at[i, col_1] - abs(np.random.normal(0, abs(data_.at[i, col_1]) * K_SKO, 1))
219
- if data_.at[i, col_1] <= 0: data_.at[i, col_1] = abs(np.random.normal(0, K_SKO * 0.5, 1))
220
- for col_2 in lack_cols: # Количество без логирования возросло
221
- data_.at[i, col_2] = data_.at[i, col_2] + abs(np.random.normal(0, abs(data_.at[i, col_2]) * K_SKO, 1))
222
- if data_.at[i, col_2] <= 0: data_.at[i, col_2] = abs(np.random.normal(0, K_SKO, 1))
223
- else: # Количество ошибок уменьшилось
224
- for col_1 in LOG_cols: # Количество логирования возросло
225
- data_.at[i, col_1] = data_.at[i, col_1] + abs(np.random.normal(0, abs(data_.at[i, col_1]) * K_SKO, 1))
226
- if data_.at[i, col_1] <= 0: data_.at[i, col_1] = abs(np.random.normal(0, K_SKO, 1))
227
- for col_2 in lack_cols: # Количество без логирования уменьшилось
228
- data_.at[i, col_2] = data_.at[i, col_2] - abs(np.random.normal(0, abs(data_.at[i, col_2]) * K_SKO, 1))
229
- if data_.at[i, col_2] <= 0: data_.at[i, col_2] = abs(np.random.normal(0, K_SKO * 0.5, 1))
230
-
231
- if j == 0: # Удаление первой строки из data
232
- data = data_
233
- else:
234
- data = data._append(data_)
235
- data_ = copy.deepcopy(data__)
236
-
237
- #data = data.drop(0)
238
- # ----------------------------------------------------------------------------------------------------------------------
239
- '''
240
-
241
-
242
- '''
243
- # 5.1. Генерация данных входных параметров на основе полного перебора значений с заданным шагом --------------------------------------------------------------
244
- # Входной файл из одной строки с нулями Logging_Error_Исходн_0.xlsx
245
- @njit
246
- def PolniPerebor_njit(data_init_np):
247
- data_Max = 10000 #10000
248
- Parametr_shag = 50 #40
249
- PokazKachastva_Max = 1000
250
- PokazKachastva_shag = 50 #40
251
- KolSluchZadaniiAnnot = 8 #12
252
- KolSluchZadaniiPokazKachastva = 8 #12
253
- cyclomatic_complexity_Min = 1
254
- lines_of_code_Min = 3
255
- nesting_depth_Min = 1
256
-
257
- # Создаём список списков (не numpy-массивов)
258
- result_data = []
259
- data_ = data_init_np.copy() # Копируем первую строку
260
-
261
- i = Parametr_shag
262
- while i <= data_Max:
263
- print(i)
264
-
265
- for _ in range(KolSluchZadaniiAnnot):
266
- Kol_Klassov = np.random.randint(i - Parametr_shag, i) # Задание количества класов в диапазоне (i - Parametr_shag, Parametr_shag)
267
- if Kol_Klassov == 0: # data_[0] - markers.MON_CATCH_LOG, data_[1] - markers.MON_CATCH_LOG_LACK
268
- if np.random.rand() < 0.6:
269
- data_[1] = 1; data_[0] = 0;
270
- else:
271
- data_[1] = 0; data_[0] = 1;
272
- else:
273
- data_[0] = np.random.randint(0, Kol_Klassov); data_[1] = Kol_Klassov - data_[0];
274
- if Kol_Klassov == 0: # data_[2] - markers.MON_TRY_LOG, data_[3] - markers.MON_TRY_LOG_LACK
275
- if np.random.rand() < 0.6:
276
- data_[3] = 1; data_[2] = 0;
277
- else:
278
- data_[3] = 0; data_[2] = 1;
279
- else:
280
- data_[2] = np.random.randint(0, Kol_Klassov); data_[3] = Kol_Klassov - data_[2];
281
- if Kol_Klassov == 0: # data_[4] - markers.MON_COMPONENT_DEBUG, data_[5] - markers.MON_COMPONENT_LACK_DEBUG
282
- if np.random.rand() < 0.6:
283
- data_[5] = 1; data_[4] = 0;
284
- else:
285
- data_[5] = 0; data_[4] = 1;
286
- else:
287
- data_[4] = np.random.randint(0, Kol_Klassov); data_[5] = Kol_Klassov - data_[4];
288
- if Kol_Klassov == 0: # data_[6] - markers.MON_COMPONENT_ERROR, data_[7] - markers.MON_COMPONENT_LACK_ERROR
289
- if np.random.rand() < 0.6:
290
- data_[7] = 1; data_[6] = 0;
291
- else:
292
- data_[7] = 0; data_[6] = 1;
293
- else:
294
- data_[6] = np.random.randint(0, Kol_Klassov); data_[7] = Kol_Klassov - data_[6];
295
- if Kol_Klassov == 0: # data_[8] - markers.MON_COMPONENT_INFO, data_[9] - markers.MON_COMPONENT_LACK_INFO
296
- if np.random.rand() < 0.6:
297
- data_[9] = 1; data_[8] = 0;
298
- else:
299
- data_[9] = 0; data_[8] = 1;
300
- else:
301
- data_[8] = np.random.randint(0, Kol_Klassov); data_[9] = Kol_Klassov - data_[8];
302
- if Kol_Klassov == 0: # data_[10] - markers.MON_COMPONENT_LOG, data_[11] - markers.MON_COMPONENT_LACK_LOG
303
- if np.random.rand() < 0.6:
304
- data_[11] = 1; data_[10] = 0;
305
- else:
306
- data_[11] = 0; data_[10] = 1;
307
- else:
308
- data_[10] = np.random.randint(0, Kol_Klassov); data_[11] = Kol_Klassov - data_[10];
309
- if Kol_Klassov == 0: # data_[12] - markers.MON_COMPONENT_TRACE, data_[13] - markers.MON_COMPONENT_LACK_TRACE
310
- if np.random.rand() < 0.6:
311
- data_[13] = 1; data_[12] = 0;
312
- else:
313
- data_[13] = 0; data_[12] = 1;
314
- else:
315
- data_[12] = np.random.randint(0, Kol_Klassov); data_[13] = Kol_Klassov - data_[12];
316
- if Kol_Klassov == 0: # data_[14] - markers.MON_COMPONENT_WARN, data_[15] - markers.MON_COMPONENT_LACK_WARN
317
- if np.random.rand() < 0.6:
318
- data_[15] = 1; data_[14] = 0;
319
- else:
320
- data_[15] = 0; data_[14] = 1;
321
- else:
322
- data_[14] = np.random.randint(0, Kol_Klassov); data_[15] = Kol_Klassov - data_[14];
323
- if Kol_Klassov == 0: # data_[16] - markers.MON_CONTROLLER_DEBUG, data_[17] - markers.MON_CONTROLLER_LACK_DEBUG
324
- if np.random.rand() < 0.6:
325
- data_[17] = 1; data_[16] = 0;
326
- else:
327
- data_[17] = 0; data_[16] = 1;
328
- else:
329
- data_[16] = np.random.randint(0, Kol_Klassov); data_[17] = Kol_Klassov - data_[16];
330
- if Kol_Klassov == 0: # data_[18] - markers.MON_CONTROLLER_ERROR, data_[19] - markers.MON_CONTROLLER_LACK_ERROR
331
- if np.random.rand() < 0.6:
332
- data_[19] = 1; data_[18] = 0;
333
- else:
334
- data_[19] = 0; data_[18] = 1;
335
- else:
336
- data_[18] = np.random.randint(0, Kol_Klassov); data_[19] = Kol_Klassov - data_[18];
337
- if Kol_Klassov == 0: # data_[20] - markers.MON_CONTROLLER_INFO, data_[21] - markers.MON_CONTROLLER_LACK_INFO
338
- if np.random.rand() < 0.6:
339
- data_[21] = 1; data_[20] = 0;
340
- else:
341
- data_[21] = 0; data_[20] = 1;
342
- else:
343
- data_[20] = np.random.randint(0, Kol_Klassov); data_[21] = Kol_Klassov - data_[20];
344
- if Kol_Klassov == 0: # data_[22] - markers.MON_CONTROLLER_LOG, data_[23] - markers.MON_CONTROLLER_LACK_LOG
345
- if np.random.rand() < 0.6:
346
- data_[23] = 1; data_[22] = 0;
347
- else:
348
- data_[23] = 0; data_[22] = 1;
349
- else:
350
- data_[22] = np.random.randint(0, Kol_Klassov); data_[23] = Kol_Klassov - data_[22];
351
- if Kol_Klassov == 0: # data_[24] - markers.MON_CONTROLLER_TRACE, data_[25] - markers.MON_CONTROLLER_LACK_TRACE
352
- if np.random.rand() < 0.6:
353
- data_[25] = 1; data_[24] = 0;
354
- else:
355
- data_[25] = 0; data_[24] = 1;
356
- else:
357
- data_[24] = np.random.randint(0, Kol_Klassov); data_[25] = Kol_Klassov - data_[24];
358
- if Kol_Klassov == 0: # data_[26] - markers.MON_CONTROLLER_WARN, data_[27] - markers.MON_CONTROLLER_LACK_WARN
359
- if np.random.rand() < 0.6:
360
- data_[27] = 1; data_[26] = 0;
361
- else:
362
- data_[27] = 0; data_[26] = 1;
363
- else:
364
- data_[26] = np.random.randint(0, Kol_Klassov); data_[27] = Kol_Klassov - data_[26];
365
- if Kol_Klassov == 0: # data_[28] - markers.MON_REPOSITORY_DEBUG, data_[29] - markers.MON_REPOSITORY_LACK_DEBUG
366
- if np.random.rand() < 0.6:
367
- data_[29] = 1; data_[28] = 0;
368
- else:
369
- data_[29] = 0; data_[28] = 1;
370
- else:
371
- data_[28] = np.random.randint(0, Kol_Klassov); data_[29] = Kol_Klassov - data_[28];
372
- if Kol_Klassov == 0: # data_[30] - markers.MON_REPOSITORY_ERROR, data_[31] - markers.MON_REPOSITORY_LACK_ERROR
373
- if np.random.rand() < 0.6:
374
- data_[31] = 1; data_[30] = 0;
375
- else:
376
- data_[31] = 0; data_[30] = 1;
377
- else:
378
- data_[30] = np.random.randint(0, Kol_Klassov); data_[31] = Kol_Klassov - data_[30];
379
- if Kol_Klassov == 0: # data_[32] - markers.MON_REPOSITORY_INFO, data_[33] - markers.MON_REPOSITORY_LACK_INFO
380
- if np.random.rand() < 0.6:
381
- data_[33] = 1; data_[32] = 0;
382
- else:
383
- data_[33] = 0; data_[32] = 1;
384
- else:
385
- data_[32] = np.random.randint(0, Kol_Klassov); data_[33] = Kol_Klassov - data_[32];
386
- if Kol_Klassov == 0: # data_[34] - markers.MON_REPOSITORY_LOG, data_[35] - markers.MON_REPOSITORY_LACK_LOG
387
- if np.random.rand() < 0.6:
388
- data_[35] = 1; data_[34] = 0;
389
- else:
390
- data_[35] = 0; data_[34] = 1;
391
- else:
392
- data_[34] = np.random.randint(0, Kol_Klassov); data_[35] = Kol_Klassov - data_[34];
393
- if Kol_Klassov == 0: # data_[36] - markers.MON_REPOSITORY_TRACE, data_[37] - markers.MON_REPOSITORY_LACK_TRACE
394
- if np.random.rand() < 0.6:
395
- data_[37] = 1; data_[36] = 0;
396
- else:
397
- data_[37] = 0; data_[36] = 1;
398
- else:
399
- data_[36] = np.random.randint(0, Kol_Klassov); data_[37] = Kol_Klassov - data_[36];
400
- if Kol_Klassov == 0: # data_[38] - markers.MON_REPOSITORY_WARN, data_[39] - markers.MON_REPOSITORY_LACK_WARN
401
- if np.random.rand() < 0.6:
402
- data_[39] = 1; data_[38] = 0;
403
- else:
404
- data_[39] = 0; data_[38] = 1;
405
- else:
406
- data_[38] = np.random.randint(0, Kol_Klassov); data_[39] = Kol_Klassov - data_[38];
407
- if Kol_Klassov == 0: # data_[40] - markers.MON_RESTCONTROLLER_DEBUG, data_[41] - markers.MON_RESTCONTROLLER_LACK_DEBUG
408
- if np.random.rand() < 0.6:
409
- data_[41] = 1; data_[40] = 0;
410
- else:
411
- data_[41] = 0; data_[40] = 1;
412
- else:
413
- data_[40] = np.random.randint(0, Kol_Klassov); data_[41] = Kol_Klassov - data_[40];
414
- if Kol_Klassov == 0: # data_[42] - markers.MON_RESTCONTROLLER_ERROR, data_[43] - markers.MON_RESTCONTROLLER_LACK_ERROR
415
- if np.random.rand() < 0.6:
416
- data_[43] = 1; data_[42] = 0;
417
- else:
418
- data_[43] = 0; data_[42] = 1;
419
- else:
420
- data_[42] = np.random.randint(0, Kol_Klassov); data_[43] = Kol_Klassov - data_[42];
421
- if Kol_Klassov == 0: # data_[44] - markers.MON_RESTCONTROLLER_INFO, data_[45] - markers.MON_RESTCONTROLLER_LACK_INFO
422
- if np.random.rand() < 0.6:
423
- data_[45] = 1; data_[44] = 0;
424
- else:
425
- data_[45] = 0; data_[44] = 1;
426
- else:
427
- data_[44] = np.random.randint(0, Kol_Klassov); data_[45] = Kol_Klassov - data_[44];
428
- if Kol_Klassov == 0: # data_[46] - markers.MON_RESTCONTROLLER_LOG, data_[47] - markers.MON_RESTCONTROLLER_LACK_LOG
429
- if np.random.rand() < 0.6:
430
- data_[47] = 1; data_[46] = 0;
431
- else:
432
- data_[47] = 0; data_[46] = 1;
433
- else:
434
- data_[46] = np.random.randint(0, Kol_Klassov); data_[47] = Kol_Klassov - data_[46];
435
- if Kol_Klassov == 0: # data_[48] - markers.MON_RESTCONTROLLER_TRACE, data_[49] - markers.MON_RESTCONTROLLER_LACK_TRACE
436
- if np.random.rand() < 0.6:
437
- data_[49] = 1; data_[48] = 0;
438
- else:
439
- data_[49] = 0; data_[48] = 1;
440
- else:
441
- data_[48] = np.random.randint(0, Kol_Klassov); data_[49] = Kol_Klassov - data_[48];
442
- if Kol_Klassov == 0: # data_[50] - markers.MON_RESTCONTROLLER_WARN, data_[51] - markers.MON_RESTCONTROLLER_LACK_WARN
443
- if np.random.rand() < 0.6:
444
- data_[51] = 1; data_[50] = 0;
445
- else:
446
- data_[51] = 0; data_[50] = 1;
447
- else:
448
- data_[50] = np.random.randint(0, Kol_Klassov); data_[51] = Kol_Klassov - data_[50];
449
- if Kol_Klassov == 0: # data_[52] - markers.MON_SERVICE_DEBUG, data_[53] - markers.MON_SERVICE_LACK_DEBUG
450
- if np.random.rand() < 0.6:
451
- data_[52] = 1; data_[52] = 0;
452
- else:
453
- data_[52] = 0; data_[52] = 1;
454
- else:
455
- data_[52] = np.random.randint(0, Kol_Klassov); data_[53] = Kol_Klassov - data_[52];
456
- if Kol_Klassov == 0: # data_[54] - markers.MON_SERVICE_ERROR, data_[55] - markers.MON_SERVICE_LACK_ERROR
457
- if np.random.rand() < 0.6:
458
- data_[55] = 1; data_[54] = 0;
459
- else:
460
- data_[55] = 0; data_[54] = 1;
461
- else:
462
- data_[54] = np.random.randint(0, Kol_Klassov); data_[55] = Kol_Klassov - data_[54];
463
- if Kol_Klassov == 0: # data_[56] - markers.MON_SERVICE_INFO, data_[57] - markers.MON_SERVICE_LACK_INFO
464
- if np.random.rand() < 0.6:
465
- data_[57] = 1; data_[56] = 0;
466
- else:
467
- data_[57] = 0; data_[56] = 1;
468
- else:
469
- data_[56] = np.random.randint(0, Kol_Klassov); data_[57] = Kol_Klassov - data_[56];
470
- if Kol_Klassov == 0: # data_[58] - markers.MON_SERVICE_LOG, data_[59] - markers.MON_SERVICE_LACK_LOG
471
- if np.random.rand() < 0.6:
472
- data_[59] = 1; data_[58] = 0;
473
- else:
474
- data_[59] = 0; data_[58] = 1;
475
- else:
476
- data_[58] = np.random.randint(0, Kol_Klassov); data_[59] = Kol_Klassov - data_[58];
477
- if Kol_Klassov == 0: # data_[60] - markers.MON_SERVICE_TRACE, data_[61] - markers.MON_SERVICE_LACK_TRACE
478
- if np.random.rand() < 0.6:
479
- data_[61] = 1; data_[60] = 0;
480
- else:
481
- data_[61] = 0; data_[60] = 1;
482
- else:
483
- data_[60] = np.random.randint(0, Kol_Klassov); data_[61] = Kol_Klassov - data_[60];
484
- if Kol_Klassov == 0: # data_[62] - markers.MON_SERVICE_WARN, data_[63] - markers.MON_SERVICE_LACK_WARN
485
- if np.random.rand() < 0.6:
486
- data_[63] = 1; data_[62] = 0;
487
- else:
488
- data_[63] = 0; data_[62] = 1;
489
- else:
490
- data_[62] = np.random.randint(0, Kol_Klassov); data_[63] = Kol_Klassov - data_[62];
491
-
492
- j = PokazKachastva_shag
493
- while j <= PokazKachastva_Max:
494
- for __ in range(KolSluchZadaniiPokazKachastva):
495
- aa = random.uniform(0, j)
496
- if aa < cyclomatic_complexity_Min: aa = cyclomatic_complexity_Min
497
- data_[64] = aa # cyclomatic_complexity_LACK
498
- bb = random.uniform(2, 5)
499
- aa = aa * bb
500
- if aa < lines_of_code_Min: aa = lines_of_code_Min
501
- data_[65] = aa # lines_of_code_LACK
502
- data_[66] = random.uniform(0, j / 10) # lambda_count_LACK
503
- aa = random.uniform(0, j / 2)
504
- if aa < nesting_depth_Min: aa = nesting_depth_Min
505
- data_[67] = aa # nesting_depth_LACK
506
- data_[68] = random.uniform(0, j / 10) # try_catch_count_LACK
507
-
508
- # Вручную преобразуем массив в список (без .tolist())
509
- row_list = [data_[k] for k in range(len(data_))]
510
- result_data.append(row_list)
511
-
512
- j += PokazKachastva_shag
513
-
514
- i += Parametr_shag
515
-
516
- return result_data
517
-
518
- # Подготовка данных перед вызовом njit-функции
519
- # columns = [
520
- # 'markers.MON_CATCH_LOG', 'markers.MON_CATCH_LOG_LACK', 'markers.MON_TRY_LOG', 'markers.MON_TRY_LOG_LACK', 'markers.MON_COMPONENT_DEBUG',
521
- # 'markers.MON_COMPONENT_LACK_DEBUG', 'markers.MON_COMPONENT_ERROR', 'markers.MON_COMPONENT_LACK_ERROR', 'markers.MON_COMPONENT_INFO',
522
- # 'markers.MON_COMPONENT_LACK_INFO', 'markers.MON_COMPONENT_LOG', 'markers.MON_COMPONENT_LACK_LOG', 'markers.MON_COMPONENT_TRACE',
523
- # 'markers.MON_COMPONENT_LACK_TRACE', 'markers.MON_COMPONENT_WARN', 'markers.MON_COMPONENT_LACK_WARN', 'markers.MON_CONTROLLER_DEBUG',
524
- # 'markers.MON_CONTROLLER_LACK_DEBUG', 'markers.MON_CONTROLLER_ERROR', 'markers.MON_CONTROLLER_LACK_ERROR', 'markers.MON_CONTROLLER_INFO',
525
- # 'markers.MON_CONTROLLER_LACK_INFO', 'markers.MON_CONTROLLER_LOG', 'markers.MON_CONTROLLER_LACK_LOG', 'markers.MON_CONTROLLER_TRACE',
526
- # 'markers.MON_CONTROLLER_LACK_TRACE', 'markers.MON_CONTROLLER_WARN', 'markers.MON_CONTROLLER_LACK_WARN', 'markers.MON_REPOSITORY_DEBUG',
527
- # 'markers.MON_REPOSITORY_LACK_DEBUG', 'markers.MON_REPOSITORY_ERROR', 'markers.MON_REPOSITORY_LACK_ERROR', 'markers.MON_REPOSITORY_INFO',
528
- # 'markers.MON_REPOSITORY_LACK_INFO', 'markers.MON_REPOSITORY_LOG', 'markers.MON_REPOSITORY_LACK_LOG', 'markers.MON_REPOSITORY_TRACE',
529
- # 'markers.MON_REPOSITORY_LACK_TRACE', 'markers.MON_REPOSITORY_WARN', 'markers.MON_REPOSITORY_LACK_WARN', 'markers.MON_RESTCONTROLLER_DEBUG',
530
- # 'markers.MON_RESTCONTROLLER_LACK_DEBUG', 'markers.MON_RESTCONTROLLER_ERROR', 'markers.MON_RESTCONTROLLER_LACK_ERROR', 'markers.MON_RESTCONTROLLER_INFO',
531
- # 'markers.MON_RESTCONTROLLER_LACK_INFO', 'markers.MON_RESTCONTROLLER_LOG', 'markers.MON_RESTCONTROLLER_LACK_LOG', 'markers.MON_RESTCONTROLLER_TRACE',
532
- # 'markers.MON_RESTCONTROLLER_LACK_TRACE', 'markers.MON_RESTCONTROLLER_WARN', 'markers.MON_RESTCONTROLLER_LACK_WARN', 'markers.MON_SERVICE_DEBUG',
533
- # 'markers.MON_SERVICE_LACK_DEBUG', 'markers.MON_SERVICE_ERROR', 'markers.MON_SERVICE_LACK_ERROR', 'markers.MON_SERVICE_INFO',
534
- # 'markers.MON_SERVICE_LACK_INFO', 'markers.MON_SERVICE_LOG', 'markers.MON_SERVICE_LACK_LOG', 'markers.MON_SERVICE_TRACE', 'markers.MON_SERVICE_LACK_TRACE',
535
- # 'markers.MON_SERVICE_WARN', 'markers.MON_SERVICE_LACK_WARN', 'markers.cyclomatic_complexity_LACK', 'markers.lines_of_code_LACK',
536
- # 'markers.lambda_count_LACK', 'markers.nesting_depth_LACK', 'markers.try_catch_count_LACK' 'target'
537
- # ]
538
- columns = data.columns.tolist()
539
-
540
- # Берём первую строку исходного DataFrame и конвертируем в numpy
541
- data_init_np = data.iloc[0].to_numpy()
542
-
543
- # Вызываем Numba-функцию
544
- result_data = PolniPerebor_njit(data_init_np)
545
-
546
- # Конвертируем результат в numpy-массив и удаляем строки с cyclomatic_complexity_lack == 0
547
- result_np = np.array(result_data)
548
- mask = result_np[:, 18] != 0
549
- result_np = result_np[mask]
550
-
551
- # Конвертируем обратно в DataFrame
552
- data = pd.DataFrame(result_np, columns=columns)
553
- # --------------------------------------------------------------------------------------------------------------------------------------------
554
- '''
555
-
556
-
557
-
558
-
559
-
560
- '''
561
- # 2.1, 2.2. Генерация данных LOG, lack и target на основе перебора значений с заданным шагом --------------------------------------------------------------
562
- def Gener_LOG_lack_target(data_data, Name_LOG, Name_LOG_lack, LOG_max, LOG_shag, target_max):
563
- data_ = copy.deepcopy(data_data.iloc[0]) # Извлечение из датафрейма первой строки
564
-
565
- if Name_LOG != '': # Если есть данные с LOG и с lack
566
-
567
- i = 0
568
- while i <= LOG_max: # Количество LOG
569
-
570
- k = 0
571
- while k <= LOG_max: # Количество LOG_lack
572
-
573
- if i + k > LOG_max:
574
- k = LOG_max
575
- else:
576
- if i + k != 0:
577
- data_[Name_LOG] = i
578
- data_[Name_LOG_lack] = k
579
-
580
- summa = (i / (i + k))
581
- targ = -(target_max - target_min) * summa + target_max
582
- targ = targ * (2.5e-4 * k + 0.9997498749) # targ * [от 1 - до 1.5] # При i == 0 и одинаковом index: terg тем больше, чем больше k
583
-
584
- if k == 0: # Множитель при Name_LOG_lack = 0
585
- targ = targ * (-5.0e-4 * i + 2.0) # targ * [от 1 - до 2]
586
-
587
- data_[target] = targ
588
-
589
- data_data = data_data._append(data_)
590
-
591
- k += LOG_shag
592
-
593
- i += LOG_shag
594
-
595
- else: # Если нет данных с LOG, есть только с lack
596
-
597
- i = 0
598
- while i <= LOG_max: # Количество LOG_lack
599
-
600
- data_[Name_LOG_lack] = i
601
-
602
- # if i > 0:
603
- # targ = data_Min + ((target_max - data_Min) * i) / LOG_max - LOG_shag / i
604
- # else:
605
- # targ = data_Min + ((target_max - data_Min) * i) / LOG_max
606
-
607
- targ = data_Min + ((target_max - data_Min) * i) / LOG_max
608
-
609
- data_[target] = targ
610
-
611
- data_data = data_data._append(data_)
612
-
613
- i += LOG_shag
614
-
615
- return data_data
616
-
617
-
618
- data__ = copy.deepcopy(data)
619
-
620
- # LOG_max = data_Max; LOG_shag = 10; target_max = 60; target_min = target_min
621
-
622
- data_gen = Gener_LOG_lack_target(data__, 'bean', 'bean_lack', LOG_max=data_Max, LOG_shag=50, target_max=700)
623
- data = data._append(data_gen); print(1)
624
- data_gen = Gener_LOG_lack_target(data__, 'component', 'component_lack', LOG_max=data_Max, LOG_shag=50, target_max=300)
625
- data = data._append(data_gen); print(2)
626
- data_gen = Gener_LOG_lack_target(data__, 'config', 'config_lack', LOG_max=data_Max, LOG_shag=50, target_max=700)
627
- data = data._append(data_gen); print(3)
628
- data_gen = Gener_LOG_lack_target(data__, 'controller', 'controller_lack', LOG_max=data_Max, LOG_shag=50, target_max=500)
629
- data = data._append(data_gen); print(4)
630
- data_gen = Gener_LOG_lack_target(data__, 'entity', 'entity_lack', LOG_max=data_Max, LOG_shag=50, target_max=500)
631
- data = data._append(data_gen); print(5)
632
- data_gen = Gener_LOG_lack_target(data__, 'repository', 'repository_lack', LOG_max=data_Max, LOG_shag=50, target_max=1000)
633
- data = data._append(data_gen); print(6)
634
- data_gen = Gener_LOG_lack_target(data__, 'service', 'service_lack', LOG_max=data_Max, LOG_shag=50, target_max=1200)
635
- data = data._append(data_gen); print(7)
636
- data_gen = Gener_LOG_lack_target(data__, 'interface', 'interface_lack', LOG_max=data_Max, LOG_shag=50, target_max=500)
637
- data = data._append(data_gen); print(8)
638
- data_gen = Gener_LOG_lack_target(data__, 'interfimps', 'interfimps_lack', LOG_max=data_Max, LOG_shag=50, target_max=500)
639
- data = data._append(data_gen); print(9)
640
-
641
- data_gen = Gener_LOG_lack_target(data__, '', 'cyclomatic_complexity_lack', LOG_max=data_Max, LOG_shag=50, target_max=1300)
642
- data = data._append(data_gen); print(10)
643
- data_gen = Gener_LOG_lack_target(data__, '', 'lines_of_code_lack', LOG_max=data_Max, LOG_shag=50, target_max=1000)
644
- data = data._append(data_gen); print(11)
645
- data_gen = Gener_LOG_lack_target(data__, '', 'lambda_count_lack', LOG_max=data_Max, LOG_shag=50, target_max=500)
646
- data = data._append(data_gen); print(12)
647
- data_gen = Gener_LOG_lack_target(data__, '', 'nesting_depth_lack', LOG_max=data_Max, LOG_shag=50, target_max=800)
648
- data = data._append(data_gen); print(13)
649
- data_gen = Gener_LOG_lack_target(data__, '', 'try_catch_count_lack', LOG_max=data_Max, LOG_shag=50, target_max=500)
650
- data = data._append(data_gen); print(14)
651
- # ----------------------------------------------------------------------------------------------------------------------------------------------------------
652
- '''
653
-
654
-
655
- '''
656
- data = data.drop_duplicates(keep=False)
657
-
658
- # Удаление индексов строк из датафрейма
659
- data = data.reset_index(drop=True)
660
- print('data.shape = ', data.shape)
661
-
662
-
663
- # Удаление дублирующихся строк, оставлены первые вхождения
664
- data = data.drop_duplicates(subset=num_features)
665
- print('data.shape = ', data.shape)
666
-
667
- # Удаление строк из data не удовлетворяющих условиям: < data_Max и >= data_Min
668
- #data = data.loc[data[target] < data_Max]
669
- #data = data.loc[data[target] >= data_Min]
670
- #for col in num_features:
671
- # data = data.loc[data[col] < data_Max]
672
- #print('data.shape = ', data.shape)
673
-
674
- # Сохранение модифицированного датасета в файл
675
- data.to_excel('Logging_Error_.xlsx', index=False)
676
- print('Файл сохранён.')
677
- '''
678
-
679
-
680
-
681
-
682
-
683
-
684
- '''
685
- # 3.1. Увеличение количества строк в датасете на основе случайного изменения исходного датасета --------------------------------------
686
- def Gener_LOG_lack(Name_LOG, Name_LOG_lack, j):
687
-
688
- a = data_.at[j, Name_LOG]
689
- if (a == 0) and (np.random.random() >= 0.5): a = data_Min
690
- a = abs(np.random.normal(a, a * SKO_random_normal, 1))
691
- if a > data_Max: a = data_Max - 1
692
- b = data_.at[j, Name_LOG_lack]
693
- if (b == 0) and (np.random.random() >= 0.5): b = data_Min
694
- b = abs(np.random.normal(b, b * SKO_random_normal, 1))
695
- if b > data_Max: d = data_Max - 1
696
- data_.at[j, Name_LOG] = a
697
- data_.at[j, Name_LOG_lack] = b
698
-
699
- return data_.at[j, Name_LOG], data_.at[j, Name_LOG_lack]
700
-
701
- def Gener_lack(Name_LOG_lack, j):
702
-
703
- b = data_.at[j, Name_LOG_lack]
704
- if (b == 0) and (np.random.random() >= 0.5): b = data_Min
705
- b = abs(np.random.normal(b, b * SKO_random_normal, 1))
706
- if b > data_Max: d = data_Max - 1
707
- data_.at[j, Name_LOG_lack] = b
708
-
709
- return data_.at[j, Name_LOG_lack]
710
-
711
- data_ = copy.deepcopy(data)
712
- data__ = copy.deepcopy(data)
713
-
714
- np.random.seed(0)
715
- data_shape_0 = data.shape[0]
716
-
717
- for i in range(num_increment_cycles):
718
- print(i)
719
-
720
- for j in range(data_shape_0):
721
-
722
- data_.at[j, 'bean'], data_.at[j, 'bean_lack'] = Gener_LOG_lack('bean', 'bean_lack', j)
723
- data_.at[j, 'component'], data_.at[j, 'component_lack'] = Gener_LOG_lack('component', 'component_lack', j)
724
- data_.at[j, 'config'], data_.at[j, 'config_lack'] = Gener_LOG_lack('config', 'config_lack', j)
725
- data_.at[j, 'controller'], data_.at[j, 'controller_lack'] = Gener_LOG_lack('controller', 'controller_lack', j)
726
- data_.at[j, 'entity'], data_.at[j, 'entity_lack'] = Gener_LOG_lack('entity', 'entity_lack', j)
727
- data_.at[j, 'repository'], data_.at[j, 'repository_lack'] = Gener_LOG_lack('repository', 'repository_lack', j)
728
- data_.at[j, 'service'], data_.at[j, 'service_lack'] = Gener_LOG_lack('service', 'service_lack', j)
729
- data_.at[j, 'interface'], data_.at[j, 'interface_lack'] = Gener_LOG_lack('interface', 'interface_lack', j)
730
- data_.at[j, 'interfimps'], data_.at[j, 'interfimps_lack'] = Gener_LOG_lack('interfimps', 'interfimps_lack', j)
731
-
732
- data_.at[j, 'cyclomatic_complexity_lack'] = Gener_lack('cyclomatic_complexity_lack', j)
733
- data_.at[j, 'lines_of_code_lack'] = Gener_lack('lines_of_code_lack', j)
734
- data_.at[j, 'lambda_count_lack'] = Gener_lack('lambda_count_lack', j)
735
- data_.at[j, 'nesting_depth_lack'] = Gener_lack('nesting_depth_lack', j)
736
- data_.at[j, 'try_catch_count_lack'] = Gener_lack('try_catch_count_lack', j)
737
-
738
- #data_.at[j, 'target'] = Gener_lack('target', j)
739
-
740
- data = data._append(data_)
741
- data_ = copy.deepcopy(data__)
742
- # ----------------------------------------------------------------------------------------------------------------------
743
- '''
744
-
745
-
746
- '''
747
- # 3.2, 5.2. Вычисление количества ошибок (target) на основе количества и соотношения LOG, lack в реальных данных ---------------------------------
748
- @njit
749
- def Gener_target_njit(data_np, columns_idx, Name_LOG, Name_LOG_lack, target_min, target_max, j):
750
- targ = 0.0
751
-
752
- if Name_LOG != '': # Если есть данные с LOG и с lack
753
- i_idx = columns_idx[Name_LOG]
754
- k_idx = columns_idx[Name_LOG_lack]
755
- i = data_np[j, i_idx]
756
- k = data_np[j, k_idx]
757
-
758
- if i + k != 0:
759
- index = i / (i + k)
760
- targ = -(target_max - target_min) * index + target_max
761
- targ = targ * (2.5e-4 * k + 0.9997498749) # targ * [от 1 - до 1.5] # При i == 0 и одинаковом index: terg тем больше, чем больше k
762
- if k == 0:
763
- targ = targ * (-5.0e-4 * i + 2.0)
764
- else: # Если нет данных с LOG, есть только с lack
765
- k_idx = columns_idx[Name_LOG_lack]
766
- i = data_np[j, k_idx]
767
- targ = data_Min + ((target_max - data_Min) * i) / data_Max
768
-
769
- return targ
770
-
771
- @njit
772
- def Opred_target_njit(data_np, columns_idx, target_idx):
773
- target_min = 1
774
- np.random.seed(0)
775
- data_shape_0 = data_np.shape[0]
776
-
777
- for j in range(data_shape_0):
778
- if j % 5000 == 0:
779
- print(j)
780
-
781
- target_summ = 0.0
782
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_CATCH_LOG', 'markers.MON_CATCH_LOG_LACK', target_min, 125, j)
783
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_TRY_LOG', 'markers.MON_TRY_LOG_LACK', target_min, 125, j)
784
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_COMPONENT_DEBUG', 'markers.MON_COMPONENT_LACK_DEBUG', target_min, 120, j)
785
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_COMPONENT_ERROR', 'markers.MON_COMPONENT_LACK_ERROR', target_min, 125, j)
786
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_COMPONENT_INFO', 'markers.MON_COMPONENT_LACK_INFO', target_min, 110, j)
787
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_COMPONENT_LOG', 'markers.MON_COMPONENT_LACK_LOG', target_min, 115, j)
788
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_COMPONENT_TRACE', 'markers.MON_COMPONENT_LACK_TRACE', target_min, 105, j)
789
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_COMPONENT_WARN', 'markers.MON_COMPONENT_LACK_WARN', target_min, 110, j)
790
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_CONTROLLER_DEBUG', 'markers.MON_CONTROLLER_LACK_DEBUG', target_min, 120, j)
791
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_CONTROLLER_ERROR', 'markers.MON_CONTROLLER_LACK_ERROR', target_min, 125, j)
792
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_CONTROLLER_INFO', 'markers.MON_CONTROLLER_LACK_INFO', target_min, 100, j)
793
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_CONTROLLER_LOG', 'markers.MON_CONTROLLER_LACK_LOG', target_min, 115, j)
794
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_CONTROLLER_TRACE', 'markers.MON_CONTROLLER_LACK_TRACE', target_min, 105, j)
795
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_CONTROLLER_WARN', 'markers.MON_CONTROLLER_LACK_WARN', target_min, 110, j)
796
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_REPOSITORY_DEBUG', 'markers.MON_REPOSITORY_LACK_DEBUG', target_min, 115, j)
797
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_REPOSITORY_ERROR', 'markers.MON_REPOSITORY_LACK_ERROR', target_min, 120, j)
798
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_REPOSITORY_INFO', 'markers.MON_REPOSITORY_LACK_INFO', target_min, 95, j)
799
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_REPOSITORY_LOG', 'markers.MON_REPOSITORY_LACK_LOG', target_min, 110, j)
800
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_REPOSITORY_TRACE', 'markers.MON_REPOSITORY_LACK_TRACE', target_min, 100, j)
801
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_REPOSITORY_WARN', 'markers.MON_REPOSITORY_LACK_WARN', target_min, 105, j)
802
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_RESTCONTROLLER_DEBUG', 'markers.MON_RESTCONTROLLER_LACK_DEBUG', target_min, 115, j)
803
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_RESTCONTROLLER_ERROR', 'markers.MON_RESTCONTROLLER_LACK_ERROR', target_min, 120, j)
804
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_RESTCONTROLLER_INFO', 'markers.MON_RESTCONTROLLER_LACK_INFO', target_min, 95, j)
805
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_RESTCONTROLLER_LOG', 'markers.MON_RESTCONTROLLER_LACK_LOG', target_min, 110, j)
806
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_RESTCONTROLLER_TRACE', 'markers.MON_RESTCONTROLLER_LACK_TRACE', target_min, 100, j)
807
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_RESTCONTROLLER_WARN', 'markers.MON_RESTCONTROLLER_LACK_WARN', target_min, 105, j)
808
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_SERVICE_DEBUG', 'markers.MON_SERVICE_LACK_DEBUG', target_min, 110, j)
809
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_SERVICE_ERROR', 'markers.MON_SERVICE_LACK_ERROR', target_min, 115, j)
810
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_SERVICE_INFO', 'markers.MON_SERVICE_LACK_INFO', target_min, 90, j)
811
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_SERVICE_LOG', 'markers.MON_SERVICE_LACK_LOG', target_min, 105, j)
812
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_SERVICE_TRACE', 'markers.MON_SERVICE_LACK_TRACE', target_min, 95, j)
813
- target_summ += Gener_target_njit(data_np, columns_idx, 'markers.MON_SERVICE_WARN', 'markers.MON_SERVICE_LACK_WARN', target_min, 100, j)
814
-
815
- target_summ += Gener_target_njit(data_np, columns_idx, '', 'markers.cyclomatic_complexity_LACK', target_min, 300, j)
816
- target_summ += Gener_target_njit(data_np, columns_idx, '', 'markers.lines_of_code_LACK', target_min, 250, j)
817
- target_summ += Gener_target_njit(data_np, columns_idx, '', 'markers.lambda_count_LACK', target_min, 100, j)
818
- target_summ += Gener_target_njit(data_np, columns_idx, '', 'markers.nesting_depth_LACK', target_min, 150, j)
819
- target_summ += Gener_target_njit(data_np, columns_idx, '', 'markers.try_catch_count_LACK', target_min, 100, j)
820
-
821
- data_np[j, target_idx] = target_summ
822
-
823
- return data_np
824
-
825
- # Подготовка данных перед вызовом функций
826
- columns = data.columns.tolist()
827
-
828
- # Создаем Numba-совместимый словарь (исправленная версия)
829
- columns_idx = Dict.empty(
830
- key_type=types.unicode_type, # Используем unicode_type вместо unicode_string
831
- value_type=types.int64
832
- )
833
- for idx, col in enumerate(columns):
834
- columns_idx[col] = idx
835
-
836
- target_idx = columns_idx['target']
837
-
838
- # Конвертируем DataFrame в numpy array
839
- data_np = data.to_numpy().astype(np.float64) # Явно указываем тип float64 для Numba
840
-
841
- # Вызываем Numba-функцию
842
- result_np = Opred_target_njit(data_np, columns_idx, target_idx)
843
-
844
- # Конвертируем обратно в DataFrame
845
- data = pd.DataFrame(result_np, columns=columns)
846
- # -------------------------------------------------------------------------------------------------------------------------------------------
847
- '''
848
-
849
-
850
-
851
-
852
-
853
-
854
- '''
855
- # Удаление дублирующихся строк, оставлены первые вхождения
856
- data = data.drop_duplicates(subset=num_features)
857
- print('data.shape = ', data.shape)
858
-
859
- # Удаление строк из data не удовлетворяющих условиям: < data_Max и >= data_Min
860
- #data = data.loc[data[target] < data_Max]
861
- #data = data.loc[data[target] >= data_Min]
862
- #for col in num_features:
863
- # data = data.loc[data[col] < data_Max]
864
- #print('data.shape = ', data.shape)
865
-
866
- # Сохранение модифицированного датасета в файл
867
- data.to_excel('Logging_Error_.xlsx', index=False)
868
- print('Файл сохранён.')
869
-
870
-
871
- # Чтение данных
872
- data = pd.read_excel('Logging_Error_.xlsx')
873
- data = data.astype(float)
874
- data.shape
875
- print('Данные загружены, data.shape = ', data.shape)
876
- '''
877
-
878
-
879
-
880
-
881
-
882
- '''
883
- # Чтение данных
884
- data = pd.read_excel('Logging_Error_.xlsx')
885
- data = data.astype(float)
886
- data.shape
887
- print('Данные загружены, data.shape = ', data.shape)
888
- '''
889
-
890
-
891
-
892
-
893
- # 2.3, 3.3, 5.3. Зашумление исходного датасета - внесение случайной составляющей в значения входных показателей и target -----
894
- # Без увеличения количества строк в датасете
895
- @njit
896
- def Zashumlenie_njit(data_np, target_idx, LOG_cols_idx, LACK_cols_idx):
897
- K_SKO=0.0001
898
- np.random.seed(0)
899
- data_shape_0 = data_np.shape[0]
900
-
901
- for i in range(data_shape_0):
902
- if i % 5000 == 0: print(i)
903
-
904
- # Обработка target
905
- Delta = np.random.normal(0, abs(data_np[i, target_idx] * K_SKO))
906
- data_np[i, target_idx] += Delta
907
- if data_np[i, target_idx] <= 0:
908
- data_np[i, target_idx] = abs(np.random.normal(0, K_SKO))
909
-
910
- if Delta > 0: # Ошибки возросли
911
- for col_idx in LOG_cols_idx: # Уменьшаем логирование
912
- delta = abs(np.random.normal(0, abs(data_np[i, col_idx] * K_SKO)))
913
- data_np[i, col_idx] -= delta
914
- if data_np[i, col_idx] <= 0:
915
- data_np[i, col_idx] = abs(np.random.normal(0, K_SKO * 0.5))
916
- for col_idx in LACK_cols_idx: # Увеличиваем отсутствие логирования
917
- delta = abs(np.random.normal(0, abs(data_np[i, col_idx] * K_SKO)))
918
- data_np[i, col_idx] += delta
919
- if data_np[i, col_idx] <= 0:
920
- data_np[i, col_idx] = abs(np.random.normal(0, K_SKO))
921
- else: # Ошибки уменьшились
922
- for col_idx in LOG_cols_idx: # Увеличиваем логирование
923
- delta = abs(np.random.normal(0, abs(data_np[i, col_idx] * K_SKO)))
924
- data_np[i, col_idx] += delta
925
- if data_np[i, col_idx] <= 0:
926
- data_np[i, col_idx] = abs(np.random.normal(0, K_SKO))
927
- for col_idx in LACK_cols_idx: # Уменьшаем отсутствие логирования
928
- delta = abs(np.random.normal(0, abs(data_np[i, col_idx] * K_SKO)))
929
- data_np[i, col_idx] -= delta
930
- if data_np[i, col_idx] <= 0:
931
- data_np[i, col_idx] = abs(np.random.normal(0, K_SKO * 0.5))
932
-
933
- return data_np
934
-
935
- # Подготовка данных перед вызовом функции
936
- columns = data.columns.tolist()
937
- num_features = [col for col in columns if col != 'target']
938
- LACK_cols = [x for x in num_features if '_LACK' in x]
939
- LOG_cols = [x for x in num_features if not '_LACK' in x]
940
-
941
- # Получаем индексы колонок
942
- target_idx = columns.index('target')
943
- LOG_cols_idx = [columns.index(col) for col in LOG_cols]
944
- LACK_cols_idx = [columns.index(col) for col in LACK_cols]
945
-
946
- # Конвертируем DataFrame в numpy array
947
- data_np = data.to_numpy()
948
-
949
- # Вызываем Numba-функцию
950
- result_np = Zashumlenie_njit(data_np, target_idx, LOG_cols_idx, LACK_cols_idx)
951
-
952
- # Конвертируем обратно в DataFrame
953
- data = pd.DataFrame(result_np, columns=columns)
954
- #-------------------------------------------------------------------------------------------------------------------------
955
-
956
-
957
-
958
-
959
-
960
-
961
- # Умножение на число ------------------------------------------------------------------------------------------------
962
- #data = data / 10
963
- # -------------------------------------------------------------------------------------------------------------------
964
-
965
-
966
- # Удаление дублирующихся строк, оставлены первые вхождения
967
- data = data.drop_duplicates(subset=num_features)
968
- print('data.shape = ', data.shape)
969
-
970
- # Удаление строк из data не удовлетворяющих условиям: < data_Max и >= data_Min
971
- data = data.loc[data[target] < data_Max]
972
- #data = data.loc[data[target] >= data_Min]
973
- for col in num_features:
974
- data = data.loc[data[col] < data_Max]
975
- data.shape
976
- print('Удаление строк из data не удовлетворяющих условиям: < data_Max и >= data_Min')
977
- print('data.shape = ', data.shape)
978
-
979
- # Сохранение модифицированного датасета в файл
980
- #data.to_excel('Logging_Error_.xlsx', index=False)
981
- data.to_excel(data_save_path, index=False)
982
- print('Файл сохранён.')
983
-
984
-
985
-
986
-
987
- '''
988
- # Многомерный анализ и определение корреляций --------------------------------------------------------------------------
989
- correl = data.corr()
990
- cmap = sb.diverging_palette(220, 10, as_cmap = True)
991
-
992
- mask = np.zeros_like(correl, dtype = np.bool_)
993
- mask[np.triu_indices_from(mask)] = True
994
-
995
- f, ax = plt.subplots(figsize = (30, 30))
996
-
997
- sb.heatmap(correl, mask = mask, cmap = cmap, vmax = 0.9, center = 0, annot = True, square = True, linewidths = 0.2, cbar_kws = {"shrink": .5});
998
- # ----------------------------------------------------------------------------------------------------------------------
999
-
1000
- from sklearn.model_selection import train_test_split
1001
- # разбиение на признаки и целевую переменную
1002
- X = data.drop(columns=[target])
1003
- y = data[target]
1004
- print('X.shape = ', X.shape,' y.shape = ', y.shape)
1005
- #print(y)
1006
-
1007
- # заполнение пропусков
1008
- strategy = 'median'
1009
- nan_cols = X.columns[X.isna().any()].tolist()
1010
- for col in nan_cols:
1011
- #print(col)
1012
- imputer = SimpleImputer(strategy=strategy)
1013
- X[col] = imputer.fit_transform(np.array(X[col]).reshape(-1, 1))
1014
- print(X[col])
1015
-
1016
- # Преобразование X и y в массив numpy
1017
- X, y = np.array(X), np.array(y)
1018
-
1019
- # # Ограничение выбросов в данных
1020
- # for i in range(X.shape[0]):
1021
- # for j in range(X.shape[1]):
1022
- # if X[i][j] > X_max: X[i][j] = X_max + np.random.normal(0, SKO_random_normal, 1) # MO, SKO, Кол-во
1023
-
1024
- # for i in range(y.shape[0]):
1025
- # if y[i] > y_max: y[i] = y_max + np.random.normal(0, SKO_random_normal, 1) # MO, SKO, Кол-во
1026
-
1027
- # Визуализация входных данных модели -------------------------------------------------------------------------------------
1028
- plt.figure(figsize = (18,7))
1029
- #for i in range(10):
1030
- for i in range(len(X)):
1031
- plt.plot(X[i])
1032
- plt.show()
1033
- plt.close()
1034
-
1035
- # Визуализация целевых данных
1036
- plt.figure(figsize = (18,7))
1037
- #plt.plot(y[:100])
1038
- plt.plot(y)
1039
- plt.show()
1040
- plt.close()
1041
-
1042
- # Визуализация столбцов входных данных модели X_train
1043
- X_t = X.reshape(-1, X.shape[0])
1044
- # print('X_t.shape: ', X_t.shape)
1045
- plt.figure(figsize = (18,10))
1046
- for i in range(X_t.shape[0]):
1047
- plt.plot(X_t[i])
1048
- # plt.subplot(611)
1049
- # plt.plot(X_t[0])
1050
- plt.show()
1051
- plt.close()
1052
- '''
1053
-
1054
-
1055
-
1056
-
1057
-
1058
- # # Проверка качества модели на реальных (не синтезированных данных)
1059
- # # Загрузка готовой модели из файла или папки
1060
- # #*************************************************************************************************************
1061
- # model_name = 'Model_Logging_Error_LSTM_30102024.keras'
1062
- # print()
1063
- # print('Загрузка готовой модели из файла\n')
1064
- # model_ = keras.models.load_model(model_name)
1065
- # #model.summary()
1066
-
1067
- # #model_ = model
1068
-
1069
- # # Прогнозирование - тестирование качества модели на тестовых данных ************************************************************
1070
- # max_y = data_Max
1071
- # max_X = data_Max
1072
- # Dobavka = 0
1073
-
1074
- # X_test = X / max_X
1075
- # y_test = y
1076
-
1077
- # predictions = model_.predict(X_test)
1078
-
1079
- # # Возврат масштабированных прогнозных данных обратно к их фактическим значениям.
1080
- # # y_test = y_test.reshape(-1, 1)
1081
- # # y_test = scaler_y.inverse_transform(y_test)
1082
- # # predictions = scaler_y.inverse_transform(predictions)
1083
- # predictions = predictions * max_y
1084
- # predictions = predictions - Dobavka
1085
-
1086
- # # Не должно быть отрицательных значений
1087
- # for i in range(len(predictions)):
1088
- # if predictions[i] < 0: predictions[i] = 0
1089
- # #print('y = ', predictions)
1090
-
1091
- # def print_result_regression(y_true, y_pred):
1092
- # r2 = r2_score(y_true, y_pred)
1093
- # mae = mean_absolute_error(y_true, y_pred)
1094
- # rmse = mean_squared_error(y_true, y_pred)**0.5
1095
- # print(f'''
1096
- # r2: {r2:.4f}
1097
- # mae: {mae:.4f}
1098
- # rmse: {rmse:.4f}
1099
- # ''')
1100
- # return f'{r2:.4f}',f'{mae:.4f}',f'{rmse:.4f}'
1101
-
1102
- # # Контроль показателей качества работы модели по тестовой выборке
1103
- # r2, mae, rmse = print_result_regression(y_test, predictions)
1104
-
1105
- # # Вывод нескольких последних значений цели и прогноза
1106
- # print(' Цель Прогноз Отклонение')
1107
- # for i in range(len(predictions)-30, len(predictions)):
1108
- # print(f''' {y_test[i]:8.4f} {predictions[i][0]:8.4f} {abs(y_test[i] - predictions[i][0]):8.4f} ''')
1109
-