타임테이블 생성하기
타임테이블은 각 행에 시간값을 연결하는 테이블의 한 유형입니다. 테이블과 마찬가지로 타임테이블은 동일한 개수의 행을 갖는 열 방향 데이터 변수를 저장합니다. 타임테이블은 행 시간값을 datetime
형 또는 duration
형 값으로 구성된 벡터로 저장합니다. 또한 타임테이블은 하나 이상의 타임테이블에서 타임스탬프가 지정된 데이터를 정렬하고, 결합하고, 이 데이터를 사용하여 계산을 수행할 수 있는 시간 관련 함수를 지원합니다.
MATLAB®에서는 여러 가지 방법으로 타임테이블을 생성하고 여기에 데이터를 할당할 수 있습니다.
timetable
함수를 사용하여 행 시간값 벡터와 데이터 배열에서 타임테이블을 생성합니다.점 표기법을 사용하여 기존 타임테이블에 변수를 추가합니다.
빈 타임테이블에 변수를 할당합니다.
타임테이블을 사전할당하고 나중에 데이터를 채웁니다.
array2timetable
,table2timetable
,timeseries2timetable
함수를 사용하여 변수를 타임테이블로 변환합니다.readtimetable
함수를 사용하여 파일에서 타임테이블을 읽어옵니다.가져오기 툴을 사용하여 데이터를 테이블로 가져옵니다. 그런 다음
table2timetable
을 사용하여 그 테이블을 변환합니다.Simulink® 사용자의 경우:
extractTimetable
(Simulink) 함수를 사용하여Simulink.SimulationData.Dataset
객체에서 타임테이블을 추출합니다.
어떤 방법을 선택할지는 데이터의 특성 그리고 코드에서 타임테이블을 어떻게 사용할 것인지에 따라 결정합니다.
입력 배열에서 타임테이블 생성하기
timetable
함수를 사용하여 행 시간값 벡터와 데이터 배열에서 타임테이블을 생성할 수 있습니다. 예를 들어, 다양한 시간에서의 기상 조건이 포함된 타임테이블을 생성합니다.
먼저, 행 시간값 벡터를 만듭니다. 이 벡터는 datetime
형 또는 duration
형 벡터일 수 있습니다. 그런 다음 온도, 기압, 강수량, 폭풍 지속 시간 측정값을 갖는 데이터 배열을 만듭니다.
MeasurementTime = datetime(["2023-12-18 08:03:05"; "2023-12-18 10:03:17"; "2023-12-18 12:03:13"]); Temperature = [37.3; 39.1; 42.3]; Pressure = [29.4; 29.6; 30.0]; Precipitation = [0.1; 0.9; 0.0]; StormDuration = [hours(1); hours(2); NaN];
이제 타임테이블을 데이터에 대한 컨테이너로 만듭니다. timetable
함수는 입력 인수 변수 이름을 타임테이블 변수 이름으로 사용합니다. 또한 첫 번째 입력 인수는 행 시간값 벡터의 이름을 제공합니다. 행 시간값 벡터는 타임테이블 변수가 아닙니다. 그보다 변수 이름이 변수에 레이블을 지정하는 메타데이터인 것처럼 행 시간값은 행에 레이블을 지정하는 메타데이터입니다. 따라서 결과 타임테이블은 3×4 타임테이블이 됩니다.
weather = timetable(MeasurementTime,Temperature,Pressure,Precipitation,StormDuration)
weather=3×4 timetable
MeasurementTime Temperature Pressure Precipitation StormDuration
____________________ ___________ ________ _____________ _____________
18-Dec-2023 08:03:05 37.3 29.4 0.1 1 hr
18-Dec-2023 10:03:17 39.1 29.6 0.9 2 hr
18-Dec-2023 12:03:13 42.3 30 0 NaN hr
RowTimes
이름-값 인수를 사용하여 행 시간값 벡터를 지정할 수도 있습니다. 이 이름-값 인수를 사용하면 timetable
은 Time
을 행 시간값 구성된 벡터의 이름으로 사용합니다.
weather = timetable(Temperature,Pressure,Precipitation,StormDuration,RowTimes=MeasurementTime)
weather=3×4 timetable
Time Temperature Pressure Precipitation StormDuration
____________________ ___________ ________ _____________ _____________
18-Dec-2023 08:03:05 37.3 29.4 0.1 1 hr
18-Dec-2023 10:03:17 39.1 29.6 0.9 2 hr
18-Dec-2023 12:03:13 42.3 30 0 NaN hr
점 표기법을 사용하여 타임테이블에 변수 추가하기
타임테이블을 만든 후에는 점 표기법을 사용하여 언제든지 새 변수를 추가할 수 있습니다. 점 표기법은 이름(예: T.varname
)으로 타임테이블 변수를 참조할 수 있습니다. 여기서 T
는 타임테이블이고 varname
은 변수 이름입니다.
예를 들어, weather
에 풍속으로 구성된 배열을 추가해 보겠습니다.
w = [15; 27; 22.8]; weather.WindSpeed = w
weather=3×5 timetable
Time Temperature Pressure Precipitation StormDuration WindSpeed
____________________ ___________ ________ _____________ _____________ _________
18-Dec-2023 08:03:05 37.3 29.4 0.1 1 hr 15
18-Dec-2023 10:03:17 39.1 29.6 0.9 2 hr 27
18-Dec-2023 12:03:13 42.3 30 0 NaN hr 22.8
변수를 빈 타임테이블에 추가하기
타임테이블을 만드는 또 다른 방법은 먼저 행 시간값만 가진 빈 타임테이블을 만든 후 여기에 변수를 추가하는 것입니다. 예를 들어, 기상 조건으로 구성된 타임테이블의 다른 버전을 만듭니다. 이번에는 점 표기법을 사용하여 변수를 추가합니다.
먼저, 행 시간값 벡터만 사용해서 timetable
을 호출하여 빈 타임테이블을 만듭니다. 타임테이블에 변수가 없으므로 결과는 빈 타임테이블입니다.
weather2 = timetable(MeasurementTime)
weather2 = 3x0 empty timetable MeasurementTime ____________________ 18-Dec-2023 08:03:05 18-Dec-2023 10:03:17 18-Dec-2023 12:03:13
(인수 없이 timetable
을 호출할 수 있지만 그 결과는 행 시간값도 없는 빈 타임테이블입니다. 이런 식으로 생성한 0×0 타임테이블은 행 시간값을 추가해야 하므로 행 시간값 벡터를 지정해서 빈 타임테이블을 생성하는 것보다 비효율적입니다.)
점 표기법을 사용하여 빈 타임테이블에 변수를 추가합니다. WindSpeed
변수에 대한 할당에서 보이는 것처럼 타임테이블 변수 이름이 작업 공간의 배열 이름과 일치할 필요는 없습니다.
weather2.Temperature = Temperature; weather2.Pressure = Pressure; weather2.Precipitation = Precipitation; weather2.StormDuration = StormDuration; weather2.WindSpeed = w
weather2=3×5 timetable
MeasurementTime Temperature Pressure Precipitation StormDuration WindSpeed
____________________ ___________ ________ _____________ _____________ _________
18-Dec-2023 08:03:05 37.3 29.4 0.1 1 hr 15
18-Dec-2023 10:03:17 39.1 29.6 0.9 2 hr 27
18-Dec-2023 12:03:13 42.3 30 0 NaN hr 22.8
타임테이블 사전할당하기
타임테이블에 저장하려는 데이터의 크기와 데이터형을 알지만 데이터를 할당하는 것은 나중에 할 계획인 경우 타임테이블에 공간을 사전할당한 다음 빈 행에 값을 할당하는 것이 더 효율적일 수 있습니다.
예를 들어, 서로 다른 관측소의 시간, 온도 및 풍속 측정값이 포함된 4×3 타임테이블에 공간을 사전할당하려면 timetable
함수를 사용하십시오. 타임테이블에 행 시간값을 첨자로 사용할 수 있도록 행 시간값을 제공해야 합니다. 그러나 입력 데이터 배열을 제공하는 대신 타임테이블 변수의 크기와 데이터형을 지정합니다. 타임테이블 변수에 이름을 제공하려면 VariableNames
이름-값 인수를 지정하십시오. 사전할당은 데이터형에 적합한 디폴트 값으로 타임테이블 변수를 채웁니다.
d = datetime(2023,6,1:4)'; sz = [4 3]; varTypes = ["double","double","string"]; varNames = ["Temperature","WindSpeed","Station"]; TT = timetable(Size=sz, ... VariableTypes=varTypes, ... RowTimes=d, ... VariableNames=varNames)
TT=4×3 timetable
Time Temperature WindSpeed Station
___________ ___________ _________ _________
01-Jun-2023 0 0 <missing>
02-Jun-2023 0 0 <missing>
03-Jun-2023 0 0 <missing>
04-Jun-2023 0 0 <missing>
한 번에 한 행에 데이터를 할당할 수 있습니다. 한 줄의 데이터 값을 셀형 배열로 지정합니다.
TT(datetime("2023-06-01"),:) = {48.2,13.33,"S1"}
TT=4×3 timetable
Time Temperature WindSpeed Station
___________ ___________ _________ _________
01-Jun-2023 48.2 13.33 "S1"
02-Jun-2023 0 0 <missing>
03-Jun-2023 0 0 <missing>
04-Jun-2023 0 0 <missing>
타임테이블을 사전할당할 때 벡터에서 행 시간값을 제공하는 대신, 필요한 행 시간값을 생성하기 위한 샘플 레이트나 시간 스텝을 지정할 수 있습니다. 기본적으로 이러한 타임테이블의 행 시간값은 0초로 시작합니다. 예를 들어, TimeStep
이름-값 인수를 사용하여 행 시간값의 시간 스텝이 0.1초인 3×2 타임테이블을 사전할당해 보겠습니다.
TT = timetable(Size=[3 2], ... VariableTypes=["double","double"], ... TimeStep=seconds(0.1))
TT=3×2 timetable
Time Var1 Var2
_______ ____ ____
0 sec 0 0
0.1 sec 0 0
0.2 sec 0 0
첫 번째 행의 행 시간값이 0초가 아닌 타임테이블을 사전할당하려면 StartTime
이름-값 인수를 지정하십시오. StartTime
의 값은 datetime
형 또는 duration
형 스칼라일 수 있습니다. StartTime
을 지정하는 경우 SampleRate
또는 TimeStep
도 지정하여 샘플 레이트나 시간 스텝을 설정해야 합니다. 예를 들어, 15초에 시작하는 1000Hz의 샘플 레이트를 사용하여 타임테이블을 사전할당해 보겠습니다.
TT = timetable(Size=[3 3], ... VariableTypes=["uint64","double","double"], ... SampleRate=1000, ... StartTime=seconds(15))
TT=3×3 timetable
Time Var1 Var2 Var3
__________ ____ ____ ____
15 sec 0 0 0
15.001 sec 0 0 0
15.002 sec 0 0 0
변수를 타임테이블로 변환하기
타임테이블을 생성하는 또 다른 방법은 배열이나 테이블을 변환하는 것입니다.
예를 들어, array2timetable
함수를 사용하여 배열을 타임테이블로 변환해 보겠습니다. 행 시간값을 추가하기 위한 시작 시간과 샘플 레이트를 지정합니다.
X = rand(5,3); TT = array2timetable(X,StartTime=seconds(10),SampleRate=500)
TT=5×3 timetable
Time X1 X2 X3
__________ _______ _______ _______
10 sec 0.81472 0.09754 0.15761
10.002 sec 0.90579 0.2785 0.97059
10.004 sec 0.12699 0.54688 0.95717
10.006 sec 0.91338 0.95751 0.48538
10.008 sec 0.63236 0.96489 0.80028
array2timetable
을 사용하면 시작 시간을 사용하거나 사용하지 않고 샘플 레이트나 시간 스텝을 지정할 수 있습니다. 또는 행 시간값 벡터를 지정할 수 있습니다.
이와 유사하게, table2timetable
함수를 사용하여 테이블을 타임테이블로 변환할 수 있습니다. 예를 들어, 테이블을 생성한 다음 행 시간값을 추가해 보겠습니다.
Reading1 = [98; 97.5; 97.9; 98.1; 97.9]; Reading2 = [120; 111; 119; 117; 116]; T = table(Reading1,Reading2)
T=5×2 table
Reading1 Reading2
________ ________
98 120
97.5 111
97.9 119
98.1 117
97.9 116
Time = seconds(1:1:5); TT = table2timetable(T,RowTimes=Time)
TT=5×2 timetable
Time Reading1 Reading2
_____ ________ ________
1 sec 98 120
2 sec 97.5 111
3 sec 97.9 119
4 sec 98.1 117
5 sec 97.9 116
table2timetable
을 사용하면 행 시간값 벡터를 지정할 수 있고 또는 시작 시간을 사용하거나 사용하지 않고 샘플 레이트나 시간 스텝을 지정할 수 있습니다.
단, 테이블에 이미 날짜와 시간이 있으면 다른 인수 없이 table2timetable
을 호출할 수 있습니다. 이 함수는 테이블의 첫 번째 datetime
형 또는 duration
형 변수를 출력 타임테이블의 행 시간값 벡터로 변환합니다.
예를 들어, datetime
형 변수를 갖는 테이블을 만들어 보겠습니다. 그런 다음 타임테이블로 변환합니다. T
는 3×4 테이블인 반면, TT
에서는 MeasurementTime
이 행 시간값 벡터가 되므로 TT
는 3×3 타임테이블입니다.
T = table(Temperature,Pressure,MeasurementTime,StormDuration)
T=3×4 table
Temperature Pressure MeasurementTime StormDuration
___________ ________ ____________________ _____________
37.3 29.4 18-Dec-2023 08:03:05 1 hr
39.1 29.6 18-Dec-2023 10:03:17 2 hr
42.3 30 18-Dec-2023 12:03:13 NaN hr
TT = table2timetable(T)
TT=3×3 timetable
MeasurementTime Temperature Pressure StormDuration
____________________ ___________ ________ _____________
18-Dec-2023 08:03:05 37.3 29.4 1 hr
18-Dec-2023 10:03:17 39.1 29.6 2 hr
18-Dec-2023 12:03:13 42.3 30 NaN hr
timeseries
배열을 타임테이블로 변환하기
timeseries
데이터형은 MATLAB에서 시계열 데이터 작업을 하기 위한 또 다른 데이터형입니다. timetable
데이터형은 시계열 데이터 작업을 할 경우 권장되는 데이터형입니다. timeseries
배열을 타임테이블로 변환하려면 timeseries2timetable
함수를 사용하십시오.
입력값이
timeseries
객체이면 출력값은 하나의 변수를 갖는 타임테이블입니다.입력값이
timeseries
객체로 구성된 배열이면 출력값은 2개 이상의 변수를 갖는 타임테이블입니다.
예를 들어, timeseries
객체로 구성된 배열을 만들어 보겠습니다. 이 배열을 타임테이블로 변환합니다.
ts1 = timeseries(rand(5,1),[0 10 20 30 40],Name="Series_1"); ts2 = timeseries(rand(5,1),[0 10 20 30 40],Name="Series_2"); ts3 = timeseries(rand(5,1),[0 10 20 30 40],Name="Series_3"); ts = [ts1 ts2 ts3]
1x3 timeseries array with properties: Events Name UserData Data DataInfo Time TimeInfo Quality QualityInfo IsTimeFirst TreatNaNasMissing Length
TT = timeseries2timetable(ts)
TT=5×3 timetable
Time Series_1 Series_2 Series_3
______ ________ ________ ________
0 sec 0.14189 0.65574 0.75774
10 sec 0.42176 0.035712 0.74313
20 sec 0.91574 0.84913 0.39223
30 sec 0.79221 0.93399 0.65548
40 sec 0.95949 0.67874 0.17119
파일에서 타임테이블 읽어오기
CSV(쉼표로 구분된 값) 파일 또는 Excel® 스프레드시트에서 테이블 형식 데이터를 타임테이블로 읽어오려면 readtimetable
함수를 사용하십시오.
예를 들어, 샘플 파일 outages.csv
에는 일련의 정전에 대한 데이터가 포함되어 있습니다. outages.csv
의 첫 번째 라인에는 열 이름이 있습니다. 파일의 나머지 부분에는 각 정전에 대한 쉼표로 구분된 데이터 값이 포함되어 있습니다. 여기에는 처음 몇 개 행이 표시되어 있습니다.
Region,OutageTime,Loss,Customers,RestorationTime,Cause SouthWest,2002-02-01 12:18,458.9772218,1820159.482,2002-02-07 16:50,winter storm SouthEast,2003-01-23 00:49,530.1399497,212035.3001,,winter storm SouthEast,2003-02-07 21:15,289.4035493,142938.6282,2003-02-17 08:14,winter storm West,2004-04-06 05:44,434.8053524,340371.0338,2004-04-06 06:10,equipment fault MidWest,2002-03-16 06:18,186.4367788,212754.055,2002-03-18 23:23,severe storm ...
outages.csv
의 데이터를 타임테이블로 가져오려면 readtimetable
을 사용하십시오. 이 함수는 숫자형 값, 날짜/시간 및 문자열을 적절한 데이터형을 가진 변수로 읽어옵니다. 여기서 Loss
및 Customers
는 숫자형 배열입니다. readtimetable
은 입력 파일의 OutageTime
열과 RestorationTime
열에 있는 텍스트의 날짜/시간 형식을 인식하여 이 두 열을 datetime
형 배열로 가져옵니다. 입력 파일에서 OutageTime
이 날짜와 시간 값이 포함된 첫 번째 열이므로 readtimetable
은 이 열을 출력 타임테이블의 행 시간값 벡터로 변환합니다. outages.csv
파일에는 6개의 열이 있지만 readtimetable
은 이 파일을 1개의 행 시간값 벡터와 5개의 변수가 있는 타임테이블로 변환합니다.
outages = readtimetable("outages.csv",TextType="string")
outages=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
____________________ ___________ ______ __________ ____________________ _________________
01-Feb-2002 12:18:00 "SouthWest" 458.98 1.8202e+06 07-Feb-2002 16:50:00 "winter storm"
23-Jan-2003 00:49:00 "SouthEast" 530.14 2.1204e+05 NaT "winter storm"
07-Feb-2003 21:15:00 "SouthEast" 289.4 1.4294e+05 17-Feb-2003 08:14:00 "winter storm"
06-Apr-2004 05:44:00 "West" 434.81 3.4037e+05 06-Apr-2004 06:10:00 "equipment fault"
16-Mar-2002 06:18:00 "MidWest" 186.44 2.1275e+05 18-Mar-2002 23:23:00 "severe storm"
18-Jun-2003 02:49:00 "West" 0 0 18-Jun-2003 10:54:00 "attack"
20-Jun-2004 14:39:00 "West" 231.29 NaN 20-Jun-2004 19:16:00 "equipment fault"
06-Jun-2002 19:28:00 "West" 311.86 NaN 07-Jun-2002 00:51:00 "equipment fault"
16-Jul-2003 16:23:00 "NorthEast" 239.93 49434 17-Jul-2003 01:12:00 "fire"
27-Sep-2004 11:09:00 "MidWest" 286.72 66104 27-Sep-2004 16:37:00 "equipment fault"
05-Sep-2004 17:48:00 "SouthEast" 73.387 36073 05-Sep-2004 20:46:00 "equipment fault"
21-May-2004 21:45:00 "West" 159.99 NaN 22-May-2004 04:23:00 "equipment fault"
01-Sep-2002 18:22:00 "SouthEast" 95.917 36759 01-Sep-2002 19:12:00 "severe storm"
27-Sep-2003 07:32:00 "SouthEast" NaN 3.5517e+05 04-Oct-2003 07:02:00 "severe storm"
12-Nov-2003 06:12:00 "West" 254.09 9.2429e+05 17-Nov-2003 02:04:00 "winter storm"
18-Sep-2004 05:54:00 "NorthEast" 0 0 NaT "equipment fault"
⋮
가져오기 툴 사용법
마지막으로 가져오기 툴을 사용하여 스프레드시트 파일, 구분된 텍스트 파일 및 고정 너비 텍스트 파일에서 대화형 방식으로 데이터를 미리 보고 가져올 수 있습니다. 그러나 가져오기 툴은 데이터를 테이블로 가져올 수 있지만 데이터를 타임테이블로 직접 가져올 수는 없습니다.
가져오기 툴을 사용하여 타임테이블을 생성하려면 다음 단계를 따르십시오.
데이터를 미리 보고 테이블로 가져옵니다.
가져온 테이블을
table2timetable
함수를 사용하여 변환합니다.