Main Content

타임테이블 생성하기

타임테이블은 각 행에 시간값을 연결하는 테이블의 한 유형입니다. 테이블과 마찬가지로 타임테이블은 동일한 개수의 행을 갖는 열 방향 데이터 변수를 저장합니다. 타임테이블은 행 시간값을 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 이름-값 인수를 사용하여 행 시간값 벡터를 지정할 수도 있습니다. 이 이름-값 인수를 사용하면 timetableTime을 행 시간값 구성된 벡터의 이름으로 사용합니다.

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을 사용하십시오. 이 함수는 숫자형 값, 날짜/시간 및 문자열을 적절한 데이터형을 가진 변수로 읽어옵니다. 여기서 LossCustomers는 숫자형 배열입니다. 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"
      ⋮

가져오기 툴 사용법

마지막으로 가져오기 툴을 사용하여 스프레드시트 파일, 구분된 텍스트 파일 및 고정 너비 텍스트 파일에서 대화형 방식으로 데이터를 미리 보고 가져올 수 있습니다. 그러나 가져오기 툴은 데이터를 테이블로 가져올 수 있지만 데이터를 타임테이블로 직접 가져올 수는 없습니다.

가져오기 툴을 사용하여 타임테이블을 생성하려면 다음 단계를 따르십시오.

  1. 데이터를 미리 보고 테이블로 가져옵니다.

  2. 가져온 테이블을 table2timetable 함수를 사용하여 변환합니다.

참고 항목

함수

관련 항목