赞
踩
转载于:参考链接
西储大学轴承故障数据官网
python2 版本 cwru库github地址
Github数据下载地址
python2 可以直接安装使用CWRU库,该库的功能是下载数据,并且切分成可供训练和评估的训练集和测试集数据
pip安装:
$ pip install --user cwru
github下载源代码安装:
`$ python setup.py install
使用
import cwru
data = cwru.CWRU("12DriveEndFault", "1797", 384)
可以使用data.X_train, data.y_train, data.X_test, data.y_test, data.labels, data.nclasses 来训练和评估模型
CWRU的参数:
exp:‘12DriveEndFault’, ‘12FanEndFault’, ‘48DriveEndFault’
rpm:‘1797’, ‘1772’, ‘1750’, ‘1730’
length:信号的长度
由于python3 和python2 版本的差异,对原python2代码修改:
这产生的路径名和原文不同 生成到项目目录下
import os import glob import errno import random import urllib.request as urllib import numpy as np from scipy.io import loadmat class CWRU: def __init__(self, exp, rpm, length): if exp not in ('12DriveEndFault', '12FanEndFault', '48DriveEndFault'): print("wrong experiment name: {}".format(exp)) exit(1) if rpm not in ('1797', '1772', '1750', '1730'): print("wrong rpm value: {}".format(rpm)) exit(1) # root directory of all data rdir = os.path.join('Data/CWRU') print(rdir) fmeta = os.path.join(os.path.dirname(__file__), 'metadata.txt') all_lines = open(fmeta).readlines() lines = [] for line in all_lines: l = line.split() if (l[0] == exp or l[0] == 'NormalBaseline') and l[1] == rpm: lines.append(l) self.length = length # sequence length self._load_and_slice_data(rdir, lines) # shuffle training and test arrays self._shuffle() self.labels = tuple(line[2] for line in lines) self.nclasses = len(self.labels) # number of classes def _mkdir(self, path): try: os.makedirs(path) except OSError as exc: if exc.errno == errno.EEXIST and os.path.isdir(path): pass else: print("can't create directory '{}''".format(path)) exit(1) def _download(self, fpath, link): print("Downloading to: '{}'".format(fpath)) urllib.URLopener().retrieve(link, fpath) def _load_and_slice_data(self, rdir, infos): self.X_train = np.zeros((0, self.length)) self.X_test = np.zeros((0, self.length)) self.y_train = [] self.y_test = [] for idx, info in enumerate(infos): # directory of this file fdir = os.path.join(rdir, info[0], info[1]) self._mkdir(fdir) fpath = os.path.join(fdir, info[2] + '.mat') if not os.path.exists(fpath): self._download(fpath, info[3].rstrip('\n')) mat_dict = loadmat(fpath) # key = filter(lambda x: 'DE_time' in x, mat_dict.keys())[0] fliter_i = filter(lambda x: 'DE_time' in x, mat_dict.keys()) fliter_list = [item for item in fliter_i] key = fliter_list[0] time_series = mat_dict[key][:, 0] idx_last = -(time_series.shape[0] % self.length) clips = time_series[:idx_last].reshape(-1, self.length) n = clips.shape[0] n_split = int((3 * n / 4)) self.X_train = np.vstack((self.X_train, clips[:n_split])) self.X_test = np.vstack((self.X_test, clips[n_split:])) self.y_train += [idx] * n_split self.y_test += [idx] * (clips.shape[0] - n_split) def _shuffle(self): # shuffle training samples index = list(range(self.X_train.shape[0])) random.Random(0).shuffle(index) self.X_train = self.X_train[index] self.y_train = tuple(self.y_train[i] for i in index) # shuffle test samples index = list(range(self.X_test.shape[0])) random.Random(0).shuffle(index) self.X_test = self.X_test[index] self.y_test = tuple(self.y_test[i] for i in index)
由于下载出现302错误,所以自己打包下载了相关链接中的所有数据并且进行了数据转换
#include <bits/stdc++.h> #include <io.h> #include <string> #include <vector> #include <fstream> using namespace std; char a[100],b[100],c[100],d[100]; void getAllFiles(string path, vector<string>& files) { // 文件句柄 long hFile = 0; // 文件信息 struct _finddata_t fileinfo; string p; if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) { do { // 保存文件的全路径 files.push_back(p.assign(path).append("\\").append(fileinfo.name)); } while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1 _findclose(hFile); } } void make_dir(string dir) { if (_access(dir.c_str(), 0) == -1) { cout << dir << " is not existing" << endl; int flag = _mkdir(dir.c_str()); if (flag == 0) { cout << "make successfully" << endl; } else { cout << "make fsiled" << endl; } } else if (_access(dir.c_str(), 0) == 0) { cout << dir << " exists" << endl; } else { cout<<"erro!"<<endl; } } int CopyFile(string SourceFile,string NewFile) { ifstream in; ofstream out; in.open(SourceFile,ios::binary);//打开源文件 if(in.fail())//打开源文件失败 { cout<<"Error 1: Fail to open the source file."<<endl; in.close(); out.close(); return 0; } out.open(NewFile,ios::binary);//创建目标文件 if(out.fail())//创建文件失败 { cout<<"Error 2: Fail to create the new file."<<endl; out.close(); in.close(); return 0; } else//复制文件 { out<<in.rdbuf(); out.close(); in.close(); return 1; } } int main() { freopen("metadata.txt","r",stdin); int count1 = 0,count2 =0; while(scanf("%s %s %s %s",&a,&b,&c,&d)!=EOF) { count2++; int len=strlen(d),x=0; for(int i=0; i<len; i++) if(d[i]<='9' && d[i] >='0') x=x*10+d[i]-'0'; string A=string(a),B=string(b),C=string(c); cout<<A<<" "<<B<<" "<<C<<" "<<x<<endl; string filePath1 = "D:\\ACM_CODE\\ACMtask\\data"; string filePath2 = "D:\\ACM_CODE\\ACMtask\\datas"; vector<string> temp; int y=0; getAllFiles(filePath1, temp); for (int i = 0; i < temp.size(); i++ ) { y=0; // cout<<i<<" "<<temp[i]<<endl; for(int j=0; j<temp[i].length(); j++) { if(temp[i][j] >= '0' && temp[i][j] <= '9') y=y*10+temp[i][j]-'0'; else if(temp[i][j] =='.' && temp[i][j+1] =='m' && temp[i][j+2] =='a' && temp[i][j+3] =='t') { break; } else y=0; } if(x == y) { y=i; break; } } cout<<y<<" "<<temp[y]<<endl; string dir=filePath2+"\\"+A; make_dir(dir); dir=dir+"\\"+B; make_dir(dir); string source=temp[y]; string NewFile=dir+"\\"+C+".mat"; if(CopyFile(source,NewFile)) { cout<<"文件已成功复制..."<<endl; count1++; } else { cout<<"文件复制失败..."<<endl; } } printf("YES %d %d\n",count1,count2); return 0; }
这里提供下载分类好的数据集合
下载链接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。