Расписание является типом таблицы, которая сопоставляет время с каждой строкой. Можно выбрать основанные на времени подмножества его данных несколькими способами:
Найдите времена в определенном диапазоне с помощью timerange или withtol функции.
Совпадайте с повторяющимися единицами времени, такими как дни или месяцы, с помощью компонентов datetime массивы.
Передискретизируйте или данные группы с retime функция.
Например, считайте файл примера outages.csv, содержа данные, представляющие отключения электричества электроэнергетики в Соединенных Штатах от 2002–2014. Вектор времен строки, OutageTime, указывает, когда отключения электричества произошли. readtimetable функционируйте импортирует его как datetime массив. Отобразите первые пять строк.
TT = readtimetable('outages.csv');
head(TT,5)ans=5×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
________________ _____________ ______ __________ ________________ ___________________
2002-02-01 12:18 {'SouthWest'} 458.98 1.8202e+06 2002-02-07 16:50 {'winter storm' }
2003-01-23 00:49 {'SouthEast'} 530.14 2.1204e+05 NaT {'winter storm' }
2003-02-07 21:15 {'SouthEast'} 289.4 1.4294e+05 2003-02-17 08:14 {'winter storm' }
2004-04-06 05:44 {'West' } 434.81 3.4037e+05 2004-04-06 06:10 {'equipment fault'}
2002-03-16 06:18 {'MidWest' } 186.44 2.1275e+05 2002-03-18 23:23 {'severe storm' }
Перед R2019a, считанными табличными данными с readtable и преобразуйте его в расписание с помощью table2timetable.
Чтобы найти данные в определенной области значений, можно использовать timerange функция, которая задает основанные на времени индексы для индексации. Например, задайте область значений в течение лета 2008 года, которое запустилось 20 июня и закончилось 21 сентября. По умолчанию, timerange задает полуоткрытый интервал, который закрывается слева и открытый справа, поэтому задайте дату окончания как 22 сентября.
TR = timerange("2008-06-20","2008-09-22")
TR = timetable timerange subscript: Select timetable rows with times in the half-open interval: [20-Jun-2008 00:00:00, 22-Sep-2008 00:00:00) See Select Timetable Data by Row Time and Variable Type.
Найдите отключения электричества, которые произошли в той области значений, и затем постройте количество клиентов, затрагиваемых в зависимости от времени.
summer08 = TT(TR,:);
stem(summer08.OutageTime,summer08.Customers)
ylabel("Customers")
Несколько отключений электричества во время той области значений времени оказали высокое потребительское влияние. Расширьте область значений до периода времени, который охватывает целый год 2 008, и ищите столь же высокие числа.
TR = timerange("2008","years"); all08 = TT(TR,:); high08 = all08(all08.Customers > 500000,:); stem(high08.OutageTime,high08.Customers) ylabel('Customers')

timerange функция также полезна для выбора определенных дат. Выбор времен путем сравнения datetime значения могут дать вводящие в заблуждение результаты потому что весь datetime значения включают оба компонента даты и времени. Однако, когда вы задаете только компонент даты datetime значение, компонент времени установлен в полночь. Поэтому несмотря на то, что существуют данные с 26 июня, сравнение как этот не возвращает результатов.
any(summer08.OutageTime == datetime("2008-06-26"))ans = logical
0
Вместо этого можно использовать timerange.
TR = timerange("2008-06-26","days"); june26 = summer08(TR,:)
june26=1×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
________________ _____________ ______ _________ ________________ _________________
2008-06-26 22:36 {'NorthEast'} 425.21 93612 2008-06-27 06:53 {'thunder storm'}
Другой способ задать область значений состоит в том, чтобы задать допуск около времени с помощью withtol. Например, найдите строки с лета 2008 года где OutageTime в течение трех дней после Дня труда, 1 сентября.
WT = withtol("2008-09-01",days(3));
nearSep1 = summer08(WT,:)nearSep1=4×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
________________ _____________ ______ _________ ________________ ___________________
2008-09-01 23:35 {'SouthEast'} 206.27 2.27e+05 NaT {'equipment fault'}
2008-09-01 00:18 {'MidWest' } 510.05 74213 2008-09-01 14:07 {'thunder storm' }
2008-09-02 19:01 {'MidWest' } NaN 2.215e+05 2008-09-03 02:58 {'severe storm' }
2008-08-29 20:25 {'West' } NaN 31624 2008-09-01 01:51 {'wind' }
Также можно использовать модули datetime значения, такие как часы или дни, чтобы идентифицировать строки для логической индексации. Этот метод может быть полезен для определения периодических интервалов.
Например, найдите значения OutageTime чьи компоненты месяца имеют значения 3 или меньше, соответствуя январю, февралю и марту каждого года. Используйте получившийся логический массив, чтобы индексировать в TT.
TR = (month(TT.OutageTime) <= 3); winterTT = TT(TR,:); head(winterTT,5)
ans=5×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
________________ _____________ ______ __________ ________________ ________________
2002-02-01 12:18 {'SouthWest'} 458.98 1.8202e+06 2002-02-07 16:50 {'winter storm'}
2003-01-23 00:49 {'SouthEast'} 530.14 2.1204e+05 NaT {'winter storm'}
2003-02-07 21:15 {'SouthEast'} 289.4 1.4294e+05 2003-02-17 08:14 {'winter storm'}
2002-03-16 06:18 {'MidWest' } 186.44 2.1275e+05 2002-03-18 23:23 {'severe storm'}
2005-02-04 08:18 {'MidWest' } NaN NaN 2005-02-04 19:51 {'attack' }
Создайте круговую диаграмму причин зимы. pie функция принимает только числовой или categorical входные параметры, поэтому сначала преобразуйте Cause к categorical.
winterTT.Cause = categorical(winterTT.Cause);
pie(winterTT.Cause)
title("Causes of Outages, January to March");
retime функция настраивает времена строки, чтобы создать заданные интервалы, или путем передискретизации или группировки значений. Его предопределенные интервалы лежат в диапазоне от секунд до лет, и можно задать, как обработать то, чтобы избегать или несколько значений для интервалов. Например, можно выбрать первое наблюдение с каждой недели или считать наблюдения в четверти.
Для данных об отключении электричества можно использовать retime найти общие количества в течение каждого года. Во-первых, создайте расписание только с числовыми переменными. Затем вызовите retime и задайте ежегодный интервал, комбинируя несколько значений с помощью суммы. Выход ссорится в течение каждого года, содержа общие суммы убытков и общих клиентов, затронутых в течение того года.
numTT = TT(:,vartype("numeric")); numTT = retime(numTT,"yearly","sum"); head(numTT,5)
ans=5×2 timetable
OutageTime Loss Customers
________________ _____ __________
2002-01-01 00:00 81335 1.3052e+07
2003-01-01 00:00 58036 1.396e+07
2004-01-01 00:00 51014 1.5523e+07
2005-01-01 00:00 33980 8.7334e+06
2006-01-01 00:00 35129 2.5729e+07
Создайте столбчатую диаграмму количества клиентов, затрагиваемых каждый год.
bar(numTT.OutageTime,numTT.Customers) xlabel("Year") ylabel("Customers")

Можно использовать времена строки расписания с другим datetime или duration значения, чтобы выполнить вычисления. Например, вычислите длительность отключений электроэнергии, перечисленных в данных об отключении электричества. Затем вычислите ежемесячные медианы длительности отключения электричества и постройте их.
Сначала добавьте длительность отключения электричества в TT путем вычитания времен строки (которые являются запусками отключений электроэнергии) от RestorationTime (которые являются концами отключений электроэнергии). Измените формат OutageDuration отобразить длительность отключений электричества в днях. Отобразите первые пять строк TT.
TT.OutageDuration = TT.RestorationTime - TT.OutageTime;
TT.OutageDuration.Format = 'd';
head(TT,5)ans=5×6 timetable
OutageTime Region Loss Customers RestorationTime Cause OutageDuration
________________ _____________ ______ __________ ________________ ___________________ ______________
2002-02-01 12:18 {'SouthWest'} 458.98 1.8202e+06 2002-02-07 16:50 {'winter storm' } 6.1889 days
2003-01-23 00:49 {'SouthEast'} 530.14 2.1204e+05 NaT {'winter storm' } NaN days
2003-02-07 21:15 {'SouthEast'} 289.4 1.4294e+05 2003-02-17 08:14 {'winter storm' } 9.4576 days
2004-04-06 05:44 {'West' } 434.81 3.4037e+05 2004-04-06 06:10 {'equipment fault'} 0.018056 days
2002-03-16 06:18 {'MidWest' } 186.44 2.1275e+05 2002-03-18 23:23 {'severe storm' } 2.7118 days
Создайте расписание, которое имеет только длительность отключения электричества. Некоторые строки TT имейте отсутствующие значения, NaT, в течение времен восстановления, ведя к NaN значения в OutageDuration. Удалить NaN значения от medianTT, используйте rmmissing функция. Затем используйте retime вычислить ежемесячную среднюю длительность отключения электричества. Отобразите первые пять строк medianTT.
medianTT = TT(:,"OutageDuration"); medianTT = rmmissing(medianTT); medianTT = retime(medianTT,'monthly',@median); head(medianTT,5)
ans=5×1 timetable
OutageTime OutageDuration
________________ ______________
2002-02-01 00:00 6.1889 days
2002-03-01 00:00 2.7472 days
2002-04-01 00:00 NaN days
2002-05-01 00:00 0.72917 days
2002-06-01 00:00 0.22431 days
Создайте ступенчатый график ежемесячной средней длительности отключения электричества.
stairs(medianTT.OutageTime,medianTT.OutageDuration) xlabel("Year") ylabel("Median Duration (days)")

categorical | timetable | retime | timerange | readtimetable | month | withtol | rmmissing | vartype | datetime | duration | NaT