2017-01-10 3 views
1

У меня есть набор данных с данными о сбоях в системе управления. Эти данные имеют следующую структуру:Поиск повторений в больших наборах данных

TYPE OF FAILURE (string), START DATE (dd/mm/yyyy), START TIME (hh/mm/ss), DURATION (ss), LOCALIZATION (string), WORKING TEAM (A,B,C), SHIFT (morning, afternoon, night) 

Таблица с данными имеет 555000 строк. Во-первых, я хотел бы проанализировать, есть ли повторяющиеся последовательности отказов относительно параметра START DATE. В основном я хотел бы найти что-то вроде этого:

Неисправность 1 появилась 10 марта. Сбой 2 появился 15 марта. Между ними есть 5 дней. Затем Failure 1 появился 10 апреля и 15 апреля, а также 5 дней между ними. После неудачи 1 появились 10 мая и 15 мая, а также 5 дней между ними. Однако Failure 1 может появиться и в разные даты, но для меня интересно знать, что существует более сильная возможность того, что Failure 2 появится через 5 дней после Failure 1 и что между этими событиями (F1-> F2) будет один месяц.

Я не знаю, достаточно ли разъяснений. Однако я ищу подходящие методы/алгоритмы, с помощью которых я смогу извлечь такие последовательности из данных, описанных выше. Не могли бы вы указать мне некоторые методы? Или просто давайте объединимся друг с другом :). Любая помощь оценивается.

PS: Я планирую реализовать это в C# или MATLAB (зависит от подходящего метода) Спасибо.

ответ

0

Ваш файл выглядит как большой CSV для этого MATLAB имеет хорошую реализацию с Data Store

https://es.mathworks.com/help/matlab/import_export/what-is-a-datastore.html

И имеет этот инструмент для работы с большими файлами:

https://es.mathworks.com/help/matlab/large-files-and-big-data.html

А также взгляните на работу with tables in matlab

В лету ур случае вы можете работать что-то вроде этого:

образец файла airlinessmall.csv (123524 строк)

Year,Month,DayofMonth,DayOfWeek,DepTime,CRSDepTime,ArrTime,CRSArrTime,UniqueCarrier,FlightNum,TailNum,ActualElapsedTime,CRSElapsedTime,AirTime,ArrDelay,DepDelay,Origin,Dest,Distance,TaxiIn,TaxiOut,Cancelled,CancellationCode,Diverted,CarrierDelay,WeatherDelay,NASDelay,SecurityDelay,LateAircraftDelay 
1987,10,21,3,642,630,735,727,PS,1503,NA,53,57,NA,8,12,LAX,SJC,308,NA,NA,0,NA,0,NA,NA,NA,NA,NA 
1987,10,26,1,1021,1020,1124,1116,PS,1550,NA,63,56,NA,8,1,SJC,BUR,296,NA,NA,0,NA,0,NA,NA,NA,NA,NA 
1987,10,23,5,2055,2035,2218,2157,PS,1589,NA,83,82,NA,21,20,SAN,SMF,480,NA,NA,0,NA,0,NA,NA,NA,NA,NA 
1987,10,23,5,1332,1320,1431,1418,PS,1655,NA,59,58,NA,13,12,BUR,SJC,296,NA,NA,0,NA,0,NA,NA,NA,NA,NA 
1987,10,22,4,629,630,746,742,PS,1702,NA,77,72,NA,4,-1,SMF,LAX,373,NA,NA,0,NA,0,NA,NA,NA,NA,NA 
1987,10,28,3,1446,1343,1547,1448,PS,1729,NA,61,65,NA,59,63,LAX,SJC,308,NA,NA,0,NA,0,NA,NA,NA,NA,NA 
1987,10,8,4,928,930,1052,1049,PS,1763,NA,84,79,NA,3,-2,SAN,SFO,447,NA,NA,0,NA,0,NA,NA,NA,NA,NA 
1987,10,10,6,859,900,1134,1123,PS,1800,NA,155,143,NA,11,-1,SEA,LAX,954,NA,NA,0,NA,0,NA,NA,NA,NA,NA 

... 

С хранилища данных УИ может работать с данными в виде таблиц и получить переменные нужно, так, например, для получения среднего значения задержек прибытия:

>> ds = datastore('airlinesmall.csv','TreatAsMissing','NA'); 
>> ds.MissingValue = 0; 
>> ds.SelectedVariableNames = 'ArrDelay'; 
>> data = preview(ds) 

data = 

    ArrDelay 
    ________ 

    8  
    8  
    21  
    13  
    4  
    59  
    3  
    11  

>> data % this is a table 

data = 

    ArrDelay 
    ________ 

    8  
    8  
    21  
    13  
    4  
    59  
    3  
    11  

>> sums = []; 
counts = []; 
while hasdata(ds) 
    T = read(ds); % this is a table, but this is not all loaded in memory 

    sums(end+1) = sum(T.ArrDelay); 
    counts(end+1) = length(T.ArrDelay); 
end 

>> avgArrivalDelay = sum(sums)/sum(counts) 

avgArrivalDelay = 

    6.9670 

Давайте работать с вашим образцом. проверить этот файл:

sample.csv

TYPE OF FAILURE, START DATE, START TIME, DURATION, LOCALIZATION, WORKING TEAM, SHIFT 
failure 1, 06/01/2017, 12/13/20, 300, Area 1, A, morning 
failure 2, 06/01/2017, 12/13/20, 300, Area 1, A, night 
failure 3, 06/01/2017, 12/13/20, 400, Area 1, A, afternoon 
failure 1, 08/01/2017, 12/13/20, 300, Area 1, A, morning 
failure 2, 09/01/2017, 12/13/20, 300, Area 1, A, morning 
failure 3, 09/01/2017, 12/13/20, 300, Area 1, A, night 
failure 3, 09/01/2017, 14/13/20, 200, Area 1, A, morning 
failure 1, 10/01/2017, 12/13/20, 300, Area 1, A, morning 
failure 1, 12/01/2017, 12/13/20, 300, Area 1, A, afternoon 
failure 2, 12/01/2017, 12/13/20, 500, Area 1, A, morning 
failure 1, 14/01/2017, 12/13/20, 300, Area 1, A, night 

Вы можете увидеть, что отказ 1 каждые два дня, давайте посмотрим это:

>> ds = tabularTextDatastore('sample.csv') 
Warning: Variable names were modified to make them valid MATLAB identifiers. 

ds = 

    TabularTextDatastore with properties: 

         Files: { 
          '/home/anquegi/learn/matlab/stackoverflow/sample.csv' 
          } 
       FileEncoding: 'UTF-8' 
      ReadVariableNames: true 
       VariableNames: {'TYPEOFFAILURE', 'STARTDATE', 'STARTTIME' ... and 4 more} 

    Text Format Properties: 
      NumHeaderLines: 0 
        Delimiter: ',' 
       RowDelimiter: '\r\n' 
      TreatAsMissing: '' 
       MissingValue: NaN 

    Advanced Text Format Properties: 
      TextscanFormats: {'%q', '%q', '%q' ... and 4 more} 
     ExponentCharacters: 'eEdD' 
       CommentStyle: '' 
       Whitespace: ' \b\t' 
    MultipleDelimitersAsOne: false 

    Properties that control the table returned by preview, read, readall: 
     SelectedVariableNames: {'TYPEOFFAILURE', 'STARTDATE', 'STARTTIME' ... and 4 more} 
      SelectedFormats: {'%q', '%q', '%q' ... and 4 more} 
        ReadSize: 20000 rows 

>> ds.SelectedVariableNames = {'TYPEOFFAILURE', 'STARTDATE', 'STARTTIME', 'DURATION', 'LOCALIZATION', 'WORKINGTEAM', 'SHIFT'} 

ds = 

    TabularTextDatastore with properties: 

         Files: { 
          '/home/anquegi/learn/matlab/stackoverflow/sample.csv' 
          } 
       FileEncoding: 'UTF-8' 
      ReadVariableNames: true 
       VariableNames: {'TYPEOFFAILURE', 'STARTDATE', 'STARTTIME' ... and 4 more} 

    Text Format Properties: 
      NumHeaderLines: 0 
        Delimiter: ',' 
       RowDelimiter: '\r\n' 
      TreatAsMissing: '' 
       MissingValue: NaN 

    Advanced Text Format Properties: 
      TextscanFormats: {'%q', '%q', '%q' ... and 4 more} 
     ExponentCharacters: 'eEdD' 
       CommentStyle: '' 
       Whitespace: ' \b\t' 
    MultipleDelimitersAsOne: false 

    Properties that control the table returned by preview, read, readall: 
     SelectedVariableNames: {'TYPEOFFAILURE', 'STARTDATE', 'STARTTIME' ... and 4 more} 
      SelectedFormats: {'%q', '%q', '%q' ... and 4 more} 
        ReadSize: 20000 rows 

>> reset(ds) 
accum = []; 
while hasdata(ds) 
    T = read(ds); 
    accum = datetime(T(strcmp(T.TYPEOFFAILURE,'failure 1'),:).STARTDATE, 'InputFormat','dd/MM/yyyy'); 
    mean(diff(accum)) 
end 

ans = 

    48:00:00 

% точно через каждые 48 часов, а затем вы можете попробовать с каждой штукой вы хотите

+0

Благодарим за хороший намек :). Я обязательно посмотрю на Хранилище данных для Matlab. Однако я искал также алгоритмическую часть моего вопроса. Можете ли вы рассказать мне об этом?:) –

+0

Конечно, я дам попробовать, вы можете вставить пример файла, 5-6 строк и пример, примененный к этому файлу. – anquegi

+0

Отредактировано для работы с вашими примерными данными, если оно помогает не забывать о повышении или подарочном ответе vcorrect – anquegi