西貯大学ベアリング障害データpython 3使用
50654 ワード
参考链接西储大学軸受け故障データ官网python 2版本cwru库githubアドレスGithubデータダウンロードアドレスpython 2直接インストール使用CWRU库、この库の机能はデータをダウンロードするので、しかも训练と评価の训练セットとテストセットの数据に分けることができます
python 2のインストール方法:
pipインストール:
githubダウンロードソースコードインストール:`$python setup.py install使用
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:信号の長さ
python 3バージョン:
python 3とpython 2のバージョンの違いにより、元のpython 2コードを変更します.このパス名と原文の違いはプロジェクトディレクトリの下に生成されます.
ダウンロードに302エラーが発生したため、関連リンクのすべてのデータをパッケージしてダウンロードし、データ変換を行った.
ここでは、分類されたデータセットをダウンロードするリンクを提供します.
python 2のインストール方法:
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:信号の長さ
python 3バージョン:
python 3とpython 2のバージョンの違いにより、元のpython 2コードを変更します.このパス名と原文の違いはプロジェクトディレクトリの下に生成されます.
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('
'))
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
#include
#include
#include
#include
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<
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
",count1,count2);
return 0;
}
ここでは、分類されたデータセットをダウンロードするリンクを提供します.