-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPrepareData.py
90 lines (78 loc) · 3.84 KB
/
PrepareData.py
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
from ARappServer.DBinterface import AR_db
import pandas as pd
import numpy as np
def _prepareData(objectID,limit = 10):
'''
Извлечение данных и их подготовка для подачи на вход нейросети
:param objectID: id физического объекта
:param limit: колическтво данных, извлекаемых из БД
:return: извлечённые данные типа DataFrame
'''
labels = ["temp1"]
data = AR_db.getManyByID(objectID,limit=limit)
preparedData = []
for item in data:
temp = []
for label in labels:
temp.append(item[label])
preparedData.append(temp)
df = pd.DataFrame(preparedData,columns=labels)
return df
def _reshapeData(dataFrame,window = 10):
'''
Представление данных для подачи на вход нейросети LSTM
:param dataFrame: входной датафрейм данных
:param window: размер окна, по умолчанию равен 10
:return: два массива типа NumPy: массив с историческими данными
и данными, необходимые для соотнесения обучения, т.е подаваемых на выход LSTM
data_past - input
data_next - output - предсказанные данные
'''
data_past = []
data_next = []
for i in range(window, len(dataFrame)):
data_past.append(dataFrame.iloc[i - window:i])
data_next.append(dataFrame.iloc[i])
return np.array(data_past), np.array(data_next)
def prepareDataForTrain(ObjectID,quantity,window = 10):
'''
Подготовка данных для обучения нейронной сети LSTM
:param ObjectID: id физического объекта
:param quantity: количество извлекаемых данных
:param window: размер окна обучения
:return: два массива типа NumPy: массив с историческими данными
и данными, необходимые для соотнесения обучения, т.е подаваемых на выход LSTM
data_past - input
data_next - output - предсказанные данные
'''
dataFrame = _prepareData(ObjectID,quantity)
data_past,data_next = _reshapeData(dataFrame, window=window)
return data_past,data_next
def prepareDataForPredict(ObjectID,window = 10):
'''
Подготовка данных для предсказания
нейронная сеть - LSTM
:param ObjectID: id физического объекта
:param window: размер окна обучения и
по совместительству количество извлекаемых данных
:return: массива типа NumPy с последними историческими данными
'''
dataFrame = _prepareData(ObjectID, window)
data = np.array([dataFrame])
return data
def prepareDataForTest(ObjectID,quantity,window = 10):
'''
Подготовка данных для предсказания
нейронная сеть - LSTM
:param ObjectID: id физического объекта
:param window: размер окна обучения и
по совместительству количество извлекаемых данных
:return: массива типа NumPy с последними историческими данными
'''
dataFrame = _prepareData(ObjectID, quantity)
data_past, data_next = _reshapeData(dataFrame, window=window)
dataFrame = _prepareData(ObjectID, window)
return np.array(data_past),data_next
if __name__ == "__main__":
x,y = prepareDataForTrain(1,6,3)
# x = prepareDataForPredict(1)