주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

텍스트 파일에 있는 데이터를 사용하는 파일 앙상블 데이터저장소

예측 정비 알고리즘을 설계할 때는 쉼표로 구분된 값(CSV)과 같은 일반 텍스트 형식으로 된 시스템 데이터를 사용하게 되는 경우가 많습니다. 이 예제에서는 fileEnsembleDatastore 객체를 만들어서 이러한 형식으로 저장된 데이터의 앙상블을 관리하는 데 사용하는 방법을 보여줍니다.

앙상블 데이터

압축된 데이터를 예제에서 사용하기 위해 추출합니다.

unzip fleetdata.zip  % extract compressed files

앙상블은 각각 자동차 한 대에 대응하는 데이터를 포함하는 열 개의 파일 fleetdata_01.txt, ..., fleetdata_10.txt로 구성됩니다. 각 파일은 다음 값에 대한 일일 측정값에 해당하는 다섯 개의 레이블 없는 데이터 열을 포함합니다.

  • 그날의 끝에 측정한 주행 기록계 측정값(마일)

  • 그날에 소비된 연료(갤런)

  • 그날의 최대 rpm

  • 그날의 최대 엔진 온도(섭씨)

  • 그날의 끝의 엔진 점검등 상태(0 = 꺼짐, 1 = 켜짐)

각 파일은 80~120일 분량의 운행 데이터를 포함합니다. 데이터 세트는 이 예제를 위해 인공적으로 만들어졌으며 실제 자동차 데이터에 대응되지 않습니다.

앙상블 데이터저장소 구성

데이터를 관리할 fileEnsembleDatastore 객체를 만듭니다.

location = pwd;
extension = '.txt';
fensemble = fileEnsembleDatastore(location,extension);

제공된 함수 readFleetData.m을 사용하여 파일에서 데이터를 읽어 들이도록 앙상블 데이터저장소를 구성합니다.

fensemble.ReadFcn = @readFleetData;

데이터 파일의 열에 레이블이 지정되어 있지 않으므로 함수 readFleetData가 대응되는 데이터에 미리 정의된 레이블을 지정해 줍니다. 앙상블 데이터 변수와 readFleetData에 정의된 레이블가 일치하도록 구성하십시오.

fensemble.DataVariables = ["Odometer";"FuelConsump";"MaxRPM";"MaxTemp";"EngineLight"];

함수 readFleetData는 파일 이름을 구문 분석하여 데이터가 수집된 자동차의 ID(1~10)를 반환합니다. 이 ID는 앙상블 독립 변수입니다.

fensemble.IndependentVariables = "ID";

모든 데이터 변수와 독립 변수를 앙상블 데이터저장소에서 읽어 올 선택된 변수로 지정합니다.

fensemble.SelectedVariables = [fensemble.IndependentVariables;fensemble.DataVariables];
fensemble
fensemble = 
  fileEnsembleDatastore with properties:

                 ReadFcn: @readFleetData
        WriteToMemberFcn: []
           DataVariables: [5×1 string]
    IndependentVariables: "ID"
      ConditionVariables: [0×0 string]
       SelectedVariables: [6×1 string]
                ReadSize: 1
              NumMembers: 10
          LastMemberRead: [0×0 string]
                   Files: [10×1 string]

앙상블 데이터 읽기

앙상블 데이터저장소에 대해 read를 호출하면 이 명령은 readFleetData를 사용하여 첫 번째 앙상블 멤버에서 선택된 변수를 읽어 들입니다.

data1 = read(fensemble)
data1=1×6 table
    ID        Odometer            FuelConsump            MaxRPM               MaxTemp            EngineLight   
    __    _________________    _________________    _________________    _________________    _________________

    1     {120×1 timetable}    {120×1 timetable}    {120×1 timetable}    {120×1 timetable}    {120×1 timetable}

주행 기록계 데이터를 검토하고 플로팅합니다.

odo1 = data1.Odometer{1}
odo1=120×1 timetable
     Time       Var1 
    _______    ______

    0 days     180.04
    1 day      266.76
    2 days     396.01
    3 days     535.19
    4 days     574.31
    5 days     714.82
    6 days     714.82
    7 days     821.44
    8 days     1030.5
    9 days     1213.4
    10 days    1303.4
    11 days    1416.9
    12 days    1513.5
    13 days    1513.5
    14 days    1697.1
    15 days    1804.6
      ⋮

plot(odo1.Time,odo1.Var1)

Figure contains an axes object. The axes object contains an object of type line.

이 자동차 멤버의 평균 연비를 계산합니다. 이 값은 그날의 주행 기록계 측정값을 소비된 총 연료로 나눈 값입니다.

fuelConsump1 = data1.FuelConsump{1}.Var1;
totalConsump1 = sum(fuelConsump1);
totalMiles1 = odo1.Var1(end);
mpg1 = totalMiles1/totalConsump1
mpg1 = 
22.3086

모든 앙상블 멤버의 데이터 일괄 처리하기

read를 다시 호출하면 이 명령은 다음 앙상블 멤버에서 데이터를 읽어 들이고 fensembleLastMemberRead로 넘어가서 해당 앙상블의 파일 이름을 반영합니다. 처리 단계를 반복하여 해당 멤버의 평균 연비를 계산할 수 있습니다. 실제 현장에서는 데이터의 읽기 및 처리 과정을 자동화하는 것이 더 유용합니다. 이렇게 하려면 앙상블 데이터저장소를 어떤 데이터도 읽히지 않은 상태로 재설정하십시오. 그런 다음 앙상블을 순회하면서 각 멤버에 대해 읽기 및 처리 단계를 수행하여 각 자동차의 ID와 평균 연비를 포함하는 테이블을 반환합니다. (Parallel Computing Toolbox™가 설치되어 있는 경우 이 툴박스를 사용하여 대규모 데이터 앙상블의 처리 속도를 높일 수 있습니다.)

reset(fensemble)
mpgData = zeros(10,2);    % preallocate array for 10 ensemble members
ct = 1;
while hasdata(fensemble)
    data = read(fensemble);
    odo = data.Odometer{1}.Var1;
    fuelConsump = data.FuelConsump{1}.Var1;
    totalConsump = sum(fuelConsump);
    mpg = odo(end)/totalConsump1;
    ID = data.ID;
    mpgData(ct,:) = [ID,mpg];
    ct = ct + 1;
end
mpgTable = array2table(mpgData,'VariableNames',{'ID','mpg'})
mpgTable=10×2 table
    ID     mpg  
    __    ______

     1    22.309
     2    19.327
     3    20.816
     4    27.464
     5    18.848
     6    22.517
     7    27.018
     8    27.284
     9    17.149
    10     26.37

참고 항목

|

도움말 항목