-
Notifications
You must be signed in to change notification settings - Fork 20
/
read_save_data.py
124 lines (119 loc) · 6.33 KB
/
read_save_data.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
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
# -*- coding: utf-8 -*-
"""
Created on Mon Jan 1 19:52:34 2018
@author: lankuohsing
"""
# In[]
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
# In[]
def read_train_data_and_scale(path,isCut=True,feature_range=(0,1)):
"""
根据给定的路径,读取其中多台发动机的运行数据(训练集),存在一个list中,list的每个元素是
一台发动机的运行数据(二维矩阵);同时将传感器数据归一化后的数据保存在csv文件中
"""
train_DataFrame=pd.read_excel(path,sheet_name=0,header=None)#读取Excel表格中的数据
train_np=train_DataFrame.as_matrix() #将train数据集放在一个NumPy array中
scaler = MinMaxScaler(copy=True,feature_range=feature_range)#copy=True保留原始数据矩阵
train_np_scaled=scaler.fit_transform(train_np[:,5:26])
train_np_scaled=np.hstack((train_np[:,0:5],train_np_scaled))
#将归一化的数据保存在csv文件中
np.savetxt(path+'_scaled_to_'+str(feature_range)+'1.csv', train_np_scaled, delimiter = ',')
unit_number_redundant=train_np_scaled[:,0] #提取出冗余的unit编号
unit_number=np.unique(unit_number_redundant) #删除unit编号中的冗余部分
unit_nums=unit_number.shape[0] #发动机编号数
#将每台发动机的运行数据存在一个二维列表中,将所有的二维列表存在一个list中
unit_number_list=[]
for i in range(0,unit_nums):
condition_i=train_np_scaled[:,0]==i+1#找出对应编号的数据下标集合
unit_index_i=np.where(condition_i)
unit_number_i_index=unit_index_i[0]
unit_number_i=train_np_scaled[unit_number_i_index,:]
if(isCut):
unit_number_i=unit_number_i[:,5:26]
unit_number_list.append(unit_number_i)
return unit_number_list,train_np,scaler.data_min_,scaler.data_max_
def read_test_data_and_scale(path, isCut,train_data_min_,train_data_max_):
"""
根据给定的路径,读取其中多台发动机的运行数据(测试集),存在一个list中,list的每个元素是
一台发动机的运行数据(二维矩阵);同时将传感器数据归一化后的数据保存在csv文件中
"""
#train_data_min_=np.reshape(train_data_min_,(1,len(train_data_min_)))
#train_data_max_=np.reshape(train_data_max_,(1,len(train_data_max_)))
test_DataFrame=pd.read_excel(path,sheet_name=0,header=None)#读取Excel表格中的数据
test_np=test_DataFrame.as_matrix() #将test数据集放在一个NumPy array中
test_np_scaled=test_np
for i in range(0,21):
if train_data_min_[i]==train_data_max_[i]:
test_np_scaled[:,5+i]=0
else:
test_np_scaled[:,5+i]=(test_np[:,5+i]-train_data_min_[i])/(train_data_max_[i]-train_data_min_[i])
#test_np_scaled=(test_np[:,5:26]-train_data_min_)/(train_data_max_-train_data_min_)
#test_np_scaled=np.hstack((test_np[:,0:5],test_np_scaled))
#将归一化的数据保存在csv文件中
np.savetxt(path+'_scaled'+'.csv', test_np_scaled, delimiter = ',')
unit_number_redundant=test_np_scaled[:,0] #提取出冗余的unit编号
unit_number=np.unique(unit_number_redundant) #删除unit编号中的冗余部分
unit_nums=unit_number.shape[0] #发动机编号数
#将每台发动机的运行数据存在一个二维列表中,将所有的二维列表存在一个list中
unit_number_list=[]
for i in range(0,unit_nums):
condition_i=test_np_scaled[:,0]==i+1#找出对应编号的数据下标集合
unit_index_i=np.where(condition_i)
unit_number_i_index=unit_index_i[0]
unit_number_i=test_np_scaled[unit_number_i_index,:]
if(isCut):
unit_number_i=unit_number_i[:,5:26]
unit_number_list.append(unit_number_i)
return unit_number_list,test_np
def read_scaled_train_data(path,isCut=True):
"""
根据给定的路径,读取其中多台发动机的运行数据(归一化后的),存在一个list中,
list的每个元素是一台发动机的运行数据(二维矩阵)
"""
train_scaled_DataFrame=pd.read_csv(path,header=None,encoding='utf-8')
train_scaled_np=train_scaled_DataFrame.as_matrix() #将train数据集放在一个NumPy array中
unit_number_redundant=train_scaled_np[:,0] #提取出冗余的unit编号
unit_number=np.unique(unit_number_redundant) #删除unit编号中的冗余部分
unit_nums=unit_number.shape[0] #发动机编号数
#将每台发动机的运行数据存在一个二维列表中,将所有的二维列表存在一个list中
unit_number_list=[]
for i in range(0,unit_nums):
condition_i=train_scaled_np[:,0]==i+1#找出对应编号的数据下标集合
unit_index_i=np.where(condition_i)
unit_number_i_index=unit_index_i[0]
unit_number_i=train_scaled_np[unit_number_i_index,:]
unit_number_list.append(unit_number_i)
return unit_number_list
def read_unit_data(path,isCut=True):
"""
适用于训练集和测试集
根据给定的路径,读取其中多台发动机的运行数据,存在一个list中,
list的每个元素是一台发动机的运行数据(二维矩阵)
"""
unit_DataFrame=pd.read_csv(path,header=None,encoding='utf-8')
unit_np=unit_DataFrame.as_matrix() #将数据集放在一个NumPy array中
unit_number_redundant=unit_np[:,0] #提取出冗余的unit编号
unit_number=np.unique(unit_number_redundant) #删除unit编号中的冗余部分
unit_nums=unit_number.shape[0] #发动机编号数
#将每台发动机的运行数据存在一个二维列表中,将所有的二维列表存在一个list中
unit_number_list=[]
for i in range(0,unit_nums):
condition_i=unit_np[:,0]==i+1#找出对应编号的数据下标集合
unit_index_i=np.where(condition_i)
unit_number_i_index=unit_index_i[0]
unit_number_i=unit_np[unit_number_i_index,:]
if(isCut):
unit_number_i=unit_number_i[:,5:unit_number_i.shape[1]]
unit_number_list.append(unit_number_i)
return unit_number_list
# In[]
if __name__=="__main__":
"""
feature_range=(0,1)#归一化的范围,类型为tuple
path="train_FD001.xlsx"
unit_number_list,train_np,feature_min,feature_max=read_train_data_and_scale(path)
"""
path='train_FD001.xlsx_scaled_to_(0, 1).csv'
unit_number_list=read_scaled_data(path,isCut=True)