Чистое расписание с пропавшими без вести, копией, или неоднородные времена

Этот пример показывает, как создать обычное расписание из того, которое имеет пропавших без вести, копию, или неоднородные времена. Расписание является типом таблицы, которая сопоставляет метку времени, или время строки, с каждой строкой данных. В обычном расписании времена строки сортируются и уникальны, и отличаться тем же шагом постоянного времени. Пример также показывает, как экспортировать данные из расписания для использования с другими функциями.

Расписания могут быть неправильными. Они могут содержать строки, которые не сортируются по их временам строки. Расписания могут содержать несколько строк с тем же временем строки, хотя строки могут иметь различные значения данных. Даже когда времена строки сортируются и уникальны, они могут отличаться временными шагами различных размеров. Расписания могут даже содержать NaT или значения NaN, чтобы указать недостающее время строки.

Расписания обеспечивают много различных способов разрешить то, чтобы избегать, копию, или неоднородные времена, и передискретизировать или агрегированные данные к регулярным временам строки.

  • Чтобы найти недостающие времена строки, используйте ismissing.

  • Чтобы удалить недостающие времена и данные, используйте rmmissing.

  • Чтобы отсортировать расписание к его временам строки, используйте sortrows.

  • Чтобы сделать расписание с уникальными и отсортированными временами строки, используйте unique и retime.

  • Чтобы удалить дублирующиеся времена, задайте уникальный временной вектор и используйте retime.

  • Чтобы сделать обычное расписание, задайте вектор постоянного времени и используйте retime.

Загрузка расписания

Загрузите демонстрационное расписание из MAT-файла badTimes, который содержит погодные измерения, принятые несколько часов 9 июня 2016. Расписание включает температуру, ливень и измерения скорости ветра, проведенные в неправильные времена в течение того дня.

load badTimes
TT
TT=12×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    NaT                       56       0         0   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 04:12:00    58.8     NaN       NaN   

Удаление строк с недостающими временами

Удалите строки, которые имеют NaT или отсутствующее значение, как время строки. Чтобы найти отсутствующие значения в векторе времен строки, используйте функцию ismissing. ismissing возвращает логический вектор, который содержит 1 везде, где TT.Time имеет отсутствующее значение. Индексируйте назад в расписание, чтобы сохранить только те строки, которые не имеют отсутствующих значений как времен строки. Присвойте те строки TT2.

TF = ismissing(TT.Time);
TT2 = TT(~TF,:);
TT2
TT2=11×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 04:12:00    58.8     NaN       NaN   

Этот метод удаляет только строки, которые имеют недостающие времена строки. Табличные переменные могут все еще иметь недостающие значения данных. Например, последняя строка TT2 имеет значения NaN для переменных Rain и Windspeed.

Удаление строк с недостающими временами или недостающими данными

Можно удалить недостающие времена строки и пропускающий значения данных с помощью функции rmmissing. rmmissing удаляет любую строку расписания, которая имеет недостающее время строки, пропуская значения данных или обоих.

Отобразите недостающее время строки и пропускающий значения данных TT. Затем удалите все отсутствующие значения из TT.

TT
TT=12×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    NaT                       56       0         0   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 04:12:00    58.8     NaN       NaN   

TT = rmmissing(TT)
TT=10×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   

Сортировка расписания и определяет, является ли это регулярным

Определите, сортируется ли TT. Затем отсортируйте расписание на его временах строки с помощью функции sortrows.

TF = issorted(TT)
TF = logical
   0

TT = sortrows(TT)
TT=10×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   

Определите, является ли TT регулярным. Обычное расписание имеет тот же временной интервал между временами строки подряд. Даже отсортированное расписание может иметь временные шаги, которые не универсальны.

TF = isregular(TT)
TF = logical
   0

Отобразите различия между временами строки.

diff(TT.Time)
ans = 9x1 duration array
   00:57:53
   01:58:19
   00:49:47
   00:00:00
   00:00:00
   00:00:00
   01:04:47
   00:00:00
   00:00:00

Удаление дублирующихся строк

Расписания могут иметь дублирующиеся строки. Строки расписания являются копиями, если у них есть те же времена строки и те же значения данных. В этом примере последние две строки TT являются копиями.

Чтобы удалить дублирующиеся строки, используйте функцию unique. unique возвращает уникальные строки и сортирует их к их временам строки.

TT = unique(TT)
TT=9×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   

Нахождение строк с дублирующимися временами и различными данными

Расписания могут иметь строки с временами дублирующейся строки, но различными значениями данных. В этом примере TT имеет несколько строк с теми же временами строки, но различными значениями.

Найдите строки, которые имеют времена дублирующейся строки. Во-первых, отсортируйте времена строки и найдите времена подряд, которые не имеют никакого различия между ними. Времена без различия между ними являются копиями. Индексируйте назад в вектор времен строки и возвратите уникальный набор времен, которые идентифицируют времена дублирующейся строки в TT.

dupTimes = sort(TT.Time);
TF = (diff(dupTimes) == 0);
dupTimes = dupTimes(TF);
dupTimes = unique(dupTimes)
dupTimes = 2x1 datetime array
   09-Jun-2016 08:49:10
   09-Jun-2016 09:53:57

Индексируйте в расписание, чтобы отобразить строки с временами дублирующейся строки. Когда вы индексируете на временах, выходное расписание содержит все строки с соответствием с временами строки.

TT(dupTimes,:)
ans=6×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 08:49:10    67.2    0.01       2.7   
    09-Jun-2016 08:49:10    75.8    0.01       2.7   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 09:53:57      59    0.03       3.4   
    09-Jun-2016 09:53:57      67    0.03       3.4   

Выбор First and Last Rows with Duplicate Times

Выберите любого первое и последняя из строк с временами дублирующейся строки с помощью функций retime и unique.

Во-первых, создайте вектор уникальных времен строки от TT с помощью функции unique.

uniqueTimes = unique(TT.Time);

Выберите первую строку из каждого набора строк, которые имеют дублирующиеся времена.

TT2 = retime(TT,uniqueTimes)
TT2=5×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 08:49:10      62    0.01       2.7   
    09-Jun-2016 09:53:57      59    0.03       3.4   

Выберите последние строки из каждого набора строк, которые имеют дублирующиеся времена. Задайте метод 'previous' retime, чтобы скопировать данные из последней строки. Когда вы задаете 'previous', затем retime запускается в конце вектора времен строки и остановок, когда это сталкивается со временем дублирующейся строки. Затем это копирует данные из той строки.

TT2 = retime(TT,uniqueTimes,'previous')
TT2=5×4 timetable
            Time            Temp    Rain    WindSpeed
    ____________________    ____    ____    _________

    09-Jun-2016 05:03:11    66.2    0.05         3   
    09-Jun-2016 06:01:04      73    0.01       2.3   
    09-Jun-2016 07:59:23      59    0.08       0.9   
    09-Jun-2016 08:49:10      82    0.01       2.7   
    09-Jun-2016 09:53:57      67    0.03       3.4   

Агрегированные данные от всех строк с дублирующимися временами

Агрегированные данные из строк, которые имеют времена дублирующейся строки. Например, можно вычислить средние значения нескольких измерений того же количества, взятого одновременно.

Вычислите среднюю температуру, ливень и скорость ветра для строк с временами дублирующейся строки с помощью функции retime.

TT = retime(TT,uniqueTimes,'mean')
TT=5×4 timetable
            Time            Temp     Rain    WindSpeed
    ____________________    _____    ____    _________

    09-Jun-2016 05:03:11     66.2    0.05         3   
    09-Jun-2016 06:01:04       73    0.01       2.3   
    09-Jun-2016 07:59:23       59    0.08       0.9   
    09-Jun-2016 08:49:10    71.75    0.01       2.7   
    09-Jun-2016 09:53:57       63    0.03       3.4   

Создание расписания обычным

Создайте обычное расписание с помощью retime. Интерполируйте данные на регулярный почасовый временной вектор. Чтобы использовать линейную интерполяцию, задайте 'linear'. Каждый раз строки в TT начинается на часе, и между временами строки подряд существует одночасовой интервал.

TT = retime(TT,'hourly','linear')
TT=6×4 timetable
            Time             Temp       Rain      WindSpeed
    ____________________    ______    ________    _________

    09-Jun-2016 05:00:00    65.826      0.0522     3.0385  
    09-Jun-2016 06:00:00    72.875    0.010737     2.3129  
    09-Jun-2016 07:00:00    66.027    0.044867     1.6027  
    09-Jun-2016 08:00:00    59.158    0.079133     0.9223  
    09-Jun-2016 09:00:00    70.287    0.013344     2.8171  
    09-Jun-2016 10:00:00    62.183    0.031868     3.4654  

Вместо того, чтобы использовать предопределенный временной шаг, такой как 'hourly', можно задать собственный временной шаг. Чтобы задать временной шаг 30 минут, используйте входной параметр 'regular' и аргумент пары "имя-значение" 'TimeStep'. Можно задать временной шаг любого размера как длительность или календарное значение длительности.

TT = retime(TT,'regular','linear','TimeStep',minutes(30))
TT=11×4 timetable
            Time             Temp       Rain      WindSpeed
    ____________________    ______    ________    _________

    09-Jun-2016 05:00:00    65.826      0.0522     3.0385  
    09-Jun-2016 05:30:00     69.35    0.031468     2.6757  
    09-Jun-2016 06:00:00    72.875    0.010737     2.3129  
    09-Jun-2016 06:30:00    69.451    0.027802     1.9578  
    09-Jun-2016 07:00:00    66.027    0.044867     1.6027  
    09-Jun-2016 07:30:00    62.592       0.062     1.2625  
    09-Jun-2016 08:00:00    59.158    0.079133     0.9223  
    09-Jun-2016 08:30:00    64.722    0.046239     1.8697  
    09-Jun-2016 09:00:00    70.287    0.013344     2.8171  
    09-Jun-2016 09:30:00    66.235    0.022606     3.1412  
    09-Jun-2016 10:00:00    62.183    0.031868     3.4654  

Извлечение регулярных данных расписания

Можно экспортировать данные о расписании для использования с функциями, чтобы анализировать данные, которые расположены с равными интервалами вовремя. Например, Econometrics Toolbox™ и Signal Processing Toolbox™ имеют функции, которые можно использовать для последующего анализа на расположенных с равными интервалами данных.

Извлеките данные о расписании как массив. Можно использовать свойство Variables возвратить данные как массив, когда табличные переменные могут быть конкатенированы.

A = TT.Variables
A = 11×3

   65.8260    0.0522    3.0385
   69.3504    0.0315    2.6757
   72.8747    0.0107    2.3129
   69.4507    0.0278    1.9578
   66.0266    0.0449    1.6027
   62.5923    0.0620    1.2625
   59.1579    0.0791    0.9223
   64.7224    0.0462    1.8697
   70.2868    0.0133    2.8171
   66.2348    0.0226    3.1412
      ⋮

TT.Variables эквивалентен использованию изогнутого синтаксиса фигурной скобки, TT{:,:}, чтобы получить доступ ко всем переменным.

A2 = TT{:,:}
A2 = 11×3

   65.8260    0.0522    3.0385
   69.3504    0.0315    2.6757
   72.8747    0.0107    2.3129
   69.4507    0.0278    1.9578
   66.0266    0.0449    1.6027
   62.5923    0.0620    1.2625
   59.1579    0.0791    0.9223
   64.7224    0.0462    1.8697
   70.2868    0.0133    2.8171
   66.2348    0.0226    3.1412
      ⋮

Смотрите также

| | | | | | | | |

Похожие темы