Main Content

timetable の結合とデータの同期

timetable の結合やデータの同期を行うには、さまざまな方法があります。timetable は垂直方向または水平方向に連結できますが、その場合、含まれる行時間または timetable 変数が同じでなければなりません。行時間や timetable 変数が異なる場合に timetable 同士を結合するには、関数 synchronize を使用します。synchronize は、すべての入力 timetable からのすべての変数を含む timetable を作成します。その後、入力 timetable のデータが出力 timetable の行時間に同期されます。synchronize は、出力 timetable の欠損要素を欠損データ インジケーター、最近傍からコピーした値、内挿値のいずれかで埋めることができます。synchronize は、timetable のデータを指定した時間ビンに集約することもできます。

timetable の垂直方向の連結

openPricesSmall から timetable を読み込んで、垂直方向に連結します。timetable は opWeek1opWeek2 です。2016 年 1 月の第 1 週と第 2 週のいくつかの株式の始値が含まれています。

load openPricesSmall

2 つの timetable を表示します。

opWeek1
opWeek1=5×2 timetable
            Time             AAPL       FB  
    ____________________    ______    ______

    08-Jan-2016 09:00:00     98.55     99.88
    07-Jan-2016 09:00:00     98.68     100.5
    06-Jan-2016 09:00:00    100.56    101.13
    05-Jan-2016 09:00:00    105.75    102.89
    04-Jan-2016 09:00:00    102.61    101.95

opWeek2
opWeek2=5×2 timetable
            Time             AAPL       FB  
    ____________________    ______    ______

    14-Jan-2016 09:00:00     97.96     95.85
    13-Jan-2016 09:00:00    100.32    100.58
    12-Jan-2016 09:00:00    100.55        99
    11-Jan-2016 09:00:00     98.97     97.91
    08-Jan-2016 09:00:00     98.55     99.88

timetable を連結します。同じ変数を含む timetable は垂直方向に連結できます。行時間は行にラベルを付け、timetable 変数には含まれません。1 つの timetable 内にある行時間は、順不同な場合や不定間隔の場合もあることに注意してください。たとえば、op には、週末にあたる日が含まれません。1 つの timetable に、重複する時間が含まれる場合もあります。op には、08-Jan-2016 09:00:00 の行が 2 行含まれています。

op = [opWeek2;opWeek1]
op=10×2 timetable
            Time             AAPL       FB  
    ____________________    ______    ______

    14-Jan-2016 09:00:00     97.96     95.85
    13-Jan-2016 09:00:00    100.32    100.58
    12-Jan-2016 09:00:00    100.55        99
    11-Jan-2016 09:00:00     98.97     97.91
    08-Jan-2016 09:00:00     98.55     99.88
    08-Jan-2016 09:00:00     98.55     99.88
    07-Jan-2016 09:00:00     98.68     100.5
    06-Jan-2016 09:00:00    100.56    101.13
    05-Jan-2016 09:00:00    105.75    102.89
    04-Jan-2016 09:00:00    102.61    101.95

timetable の水平方向の連結

timetable を水平方向に連結することもできます。連結する timetable は、行時間が同じで、変数が異なっていなければなりません。

timetable opOtherStocks を表示します。この timetable は opWeek1 と同じ行時間を含みますが、変数は異なる株式のものです。

opOtherStocks
opOtherStocks=5×2 timetable
            Time            MSFT     TWTR 
    ____________________    _____    _____

    08-Jan-2016 09:00:00    52.37    20.51
    07-Jan-2016 09:00:00     52.7       21
    06-Jan-2016 09:00:00    54.32    21.62
    05-Jan-2016 09:00:00    54.93    22.79
    04-Jan-2016 09:00:00    54.32    22.64

opWeek1opOtherStock を連結します。出力 timetable には、1 セットの行時間と、両方の timetable の変数が含まれます。

op = [opWeek1 opOtherStocks]
op=5×4 timetable
            Time             AAPL       FB      MSFT     TWTR 
    ____________________    ______    ______    _____    _____

    08-Jan-2016 09:00:00     98.55     99.88    52.37    20.51
    07-Jan-2016 09:00:00     98.68     100.5     52.7       21
    06-Jan-2016 09:00:00    100.56    101.13    54.32    21.62
    05-Jan-2016 09:00:00    105.75    102.89    54.93    22.79
    04-Jan-2016 09:00:00    102.61    101.95    54.32    22.64

timetable の同期と欠損データの指定

大気質データと気象測定値を 2 つの異なる timetable から読み込んで同期します。測定値の日付範囲は 2015 年 11 月 15 日から 2015 年 11 月 19 日までです。大気質データは屋内のセンサーから、気象測定値は屋外のセンサーから取得されています。

load indoors
load outdoors

各 timetable の最初の 5 行を表示します。さまざまな時刻に取得されたさまざまな数量の測定値が含まれています。

indoors(1:5,:)
ans=5×2 timetable
           Time            Humidity    AirQuality
    ___________________    ________    __________

    2015-11-15 00:00:24       36           80    
    2015-11-15 01:13:35       36           80    
    2015-11-15 02:26:47       37           79    
    2015-11-15 03:39:59       37           82    
    2015-11-15 04:53:11       36           80    

outdoors(1:5,:)
ans=5×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________

    2015-11-15 00:00:24        49          51.3          29.61   
    2015-11-15 01:30:24      48.9          51.5          29.61   
    2015-11-15 03:00:24      48.9          51.5          29.61   
    2015-11-15 04:30:24      48.8          51.5          29.61   
    2015-11-15 06:00:24      48.7          51.5           29.6   

timetable を同期します。出力 timetable tt には両方の timetable からのすべての時刻が含まれます。synchronize は、tt 内に配置するデータ値がない場合、欠損データ インジケーターを配置します。両方の入力 timetable に Humidity などの同じ名前の変数がある場合、synchronize は両方の変数の名前を変更し、両方を出力 timetable に追加します。

tt = synchronize(indoors,outdoors);
tt(1:5,:)
ans=5×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:24           36               80                49               51.3          29.61   
    2015-11-15 01:13:35           36               80               NaN                NaN            NaN   
    2015-11-15 01:30:24          NaN              NaN              48.9               51.5          29.61   
    2015-11-15 02:26:47           37               79               NaN                NaN            NaN   
    2015-11-15 03:00:24          NaN              NaN              48.9               51.5          29.61   

データ値の同期と内挿

timetable を同期し、線形内挿を使用して、timetable の欠損要素を埋めます。両方の timetable のすべての時間を含む時間ベクトルに同期するには、出力時間に "union" を指定します。

ttLinear = synchronize(indoors,outdoors,"union","linear");
ttLinear(1:5,:)
ans=5×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:24            36                80               49               51.3         29.61   
    2015-11-15 01:13:35            36                80           48.919             51.463         29.61   
    2015-11-15 01:30:24         36.23             79.77             48.9               51.5         29.61   
    2015-11-15 02:26:47            37                79             48.9               51.5         29.61   
    2015-11-15 03:00:24            37            80.378             48.9               51.5         29.61   

規則的な時間への同期

1 時間ごとの時間ベクトルに timetable を同期します。入力 timetable には不規則な行時間がありました。出力 timetable では、1 時間のタイム ステップで行時間が規則的になっています。

ttHourly = synchronize(indoors,outdoors,"hourly","linear");
ttHourly(1:5,:)
ans=5×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:00             36               80               49             51.299         29.61   
    2015-11-15 01:00:00             36               80           48.934             51.432         29.61   
    2015-11-15 02:00:00         36.634           79.366             48.9               51.5         29.61   
    2015-11-15 03:00:00             37           80.361             48.9               51.5         29.61   
    2015-11-15 04:00:00         36.727           81.453           48.834               51.5         29.61   

timetable を 30 分のタイム ステップに同期します。入力引数 "regular" と、名前と値の引数 TimeStep を使用して、一定のタイム ステップを指定します。

ttHalfHour = synchronize(indoors,outdoors,"regular","linear",TimeStep=minutes(30));
ttHalfHour(1:5,:)
ans=5×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:00             36               80               49             51.299         29.61   
    2015-11-15 00:30:00             36               80           48.967             51.366         29.61   
    2015-11-15 01:00:00             36               80           48.934             51.432         29.61   
    2015-11-15 01:30:00         36.224           79.776             48.9             51.499         29.61   
    2015-11-15 02:00:00         36.634           79.366             48.9               51.5         29.61   

代替方法として、30 分間隔を指定する時間ベクトルに timetable を同期できます。

tv = [datetime(2015,11,15):minutes(30):datetime(2015,11,18)];
tv.Format = indoors.Time.Format;
ttHalfHour = synchronize(indoors,outdoors,tv,"linear");
ttHalfHour(1:5,:)
ans=5×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:00             36               80               49             51.299         29.61   
    2015-11-15 00:30:00             36               80           48.967             51.366         29.61   
    2015-11-15 01:00:00             36               80           48.934             51.432         29.61   
    2015-11-15 01:30:00         36.224           79.776             48.9             51.499         29.61   
    2015-11-15 02:00:00         36.634           79.366             48.9               51.5         29.61   

データ値の同期と集約

timetable を同期して、出力 timetable のすべての変数の日次平均を計算します。

ttDaily = synchronize(indoors,outdoors,"daily","mean");
ttDaily
ttDaily=4×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:00          36.5            80.05            48.931             51.394         29.607  
    2015-11-16 00:00:00         36.85            80.35            47.924             51.571         29.611  
    2015-11-17 00:00:00         36.85            79.45             48.45             51.238         29.613  
    2015-11-18 00:00:00           NaN              NaN              49.5               50.8          29.61  

timetable を 6 時間間隔に同期して、各間隔の平均値を計算します。

tt6Hours = synchronize(indoors,outdoors,"regular","mean",TimeStep=hours(6));
tt6Hours(1:5,:)
ans=5×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:00          36.4             80.2              48.9              51.45          29.61  
    2015-11-15 06:00:00          36.4             79.8              48.9              51.45           29.6  
    2015-11-15 12:00:00          36.6             80.4            49.025              51.45          29.61  
    2015-11-15 18:00:00          36.6             79.8              48.9             51.225         29.607  
    2015-11-16 00:00:00          36.6             80.2              48.5               51.4          29.61  

代替方法として、同じ 6 時間間隔をもつ時間ベクトルを指定します。

tv = [datetime(2015,11,15):hours(6):datetime(2015,11,18)];
tv.Format = indoors.Time.Format;
tt6Hours = synchronize(indoors,outdoors,tv,"mean");
tt6Hours(1:5,:)
ans=5×5 timetable
           Time            Humidity_indoors    AirQuality    Humidity_outdoors    TemperatureF    PressureHg
    ___________________    ________________    __________    _________________    ____________    __________

    2015-11-15 00:00:00          36.4             80.2              48.9              51.45          29.61  
    2015-11-15 06:00:00          36.4             79.8              48.9              51.45           29.6  
    2015-11-15 12:00:00          36.6             80.4            49.025              51.45          29.61  
    2015-11-15 18:00:00          36.6             79.8              48.9             51.225         29.607  
    2015-11-16 00:00:00          36.6             80.2              48.5               51.4          29.61  

参考

| | |

関連するトピック