整体代码如下:
出的图是bearing1-1的acc_00001.csv的图,让读者观察一下数据是什么样的。
后面就是把PHM challenge 2012数据集进行合并整理,例如把bearing1-1中2803个acc文件合并成一个文件,并转换成mat格式,命名为bearing1-1.mat。
运行程序,直接可以得到bearing1_1.mat,bearing1_2.mat,…,bearing3_3.mat
注:需要提前在 'D:\ysu\databank\phm_data’下建立一个名字为mat的文件夹,不然会出错。也就是说mat这个文件夹和Learning_set这个文件夹是同一维度。
import os
import scipy.io
from matplotlib import pyplot as plt
from PIL import Image
import numpy as np
import pandas as pd
from IPython.display import clear_output
'读取某工况下某个轴承的某个采样数据csv文件,并观察'
d = pd.read_csv('D:\\ysu\\databank\\phm_data\\Learning_set\\Bearing1_1\\acc_00001.csv',
header=None,sep=',')
plt.figure(figsize=(20,5))
plt.subplot(121)
plt.plot(d.iloc[:,-2])
plt.title('Horizontal_vibration_signals')
plt.subplot(122)
plt.plot(d.iloc[:,-1])
plt.title('Vertical_vibration_signals')
plt.show()
def get_a_bearings_data(folder):
''' 获取某个工况下某个轴承的全部n个csv文件中的数据,返回numpy数组
dp:bearings_x_x的folder
return:folder下n个csv文件中的数据,shape:[n*32768,2]=[文件个数*采样点数,通道数]'''
names = os.listdir(folder)
is_acc = ['acc' in name for name in names]
names = names[:sum(is_acc)]
files = [os.path.join(folder,f) for f in names]
# Bearing1_4 的csv文件的分隔符是分号:';'
print(pd.read_csv(files[0],header=None).shape)
sep = ';' if pd.read_csv(files[0],header=None).shape[-1]==1 else ','
h = [pd.read_csv(f,header=None,sep=sep).iloc[:,-2] for f in files]
v = [pd.read_csv(f,header=None,sep=sep).iloc[:,-1] for f in files]
H = np.concatenate(h)
V = np.concatenate(v)
print(H.shape,V.shape)
return np.stack([H,V],axis=-1)
p = 'D:\\ysu\\databank\\phm_data'
for i in ['Learning_set','Full_Test_Set']:
pp = os.path.join(p,i)
for j in os.listdir(pp):
ppp = os.path.join(pp,j)
print(ppp)
data = get_a_bearings_data(ppp)
save_name = p + '\\mat\\' + j+'.mat'
print(save_name)
scipy.io.savemat(save_name,{'h':data[:,0], 'v':data[:,1]}) # 写入mat文件
print('\n')
代码来自GitHub。链接: https://github.com/famer3riots/PHM-RUL-Prediction-by-EM.