当前位置:   article > 正文

西储大学轴承故障数据 python3使用_cwru.cwru(['12driveendfault'], ['1772', '1750', '1

cwru.cwru(['12driveendfault'], ['1772', '1750', '1730'], window_size)

转载于:参考链接
西储大学轴承故障数据官网
python2 版本 cwru库github地址
Github数据下载地址
python2 可以直接安装使用CWRU库,该库的功能是下载数据,并且切分成可供训练和评估的训练集和测试集数据

python2安装方式:

pip安装:

$ pip install --user cwru

github下载源代码安装:
`$ python setup.py install
使用

import cwru
data = cwru.CWRU("12DriveEndFault", "1797", 384)
  • 1
  • 2

可以使用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版本:

由于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)
  • 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

由于下载出现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;
}

  • 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
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146

这里提供下载分类好的数据集合
下载链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/202656
推荐阅读
相关标签
  

闽ICP备14008679号