ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

欠損または重複する時間および非等間隔の時間をもつ timetable の整理

この例では、欠損または重複する時間および非等間隔の時間をもつ timetable から "規則的な" timetable を作成する方法を示します。timetable は table の一種で、データの各行にタイムスタンプ、つまり "行時間" が関連付けられています。規則的な timetable では、行時間が一意であり、一定のタイム ステップの間隔を置いて並べ替えられています。この例では、他の関数で使用するために timetable からデータをエクスポートする方法も示します。

timetable は不規則な場合もあります。行時間で並べ替えられてない行を含むことがあります。timetable に同じ行時間の行が複数含まれることもあり、それらの行にあるデータ値が異なる場合もあります。行時間は、並べ替えられて一意であっても、サイズの異なるタイム ステップにより変化することがあります。また、timetable には欠損行時間を示す NaT または NaN の値が含まれることもあります。

timetable には、欠損時間、重複する時間または非等間隔の時間を解決したり、データを規則的な行時間にリサンプリングしたり集計するためのさまざまな方法が用意されています。

  • 欠損している行時間を見つけるには、ismissing を使用します。

  • 欠損している時間およびデータを削除するには、rmmissing を使用します。

  • timetable をその行時間で並べ替えるには、sortrows を使用します。

  • 一意の並べ替えられた行時間をもつ timetable を作成するには、uniqueretime を使用します。

  • 重複する時間を削除するには、一意の時間ベクトルを指定して retime を使用します。

  • 規則的な timetable を作成するには、規則的な時間ベクトルを指定して retime を使用します。

timetable の読み込み

MAT ファイル badTimes から、2016 年 6 月 9 日の数時間にわたって取得した気象測定値を含むサンプルの timetable を読み込みます。この timetable には、この日の不規則な時間に取得した気温、降水量、風速の測定値が含まれています。

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 は、TT.Time が欠損値をもつ位置に 1 を含む logical ベクトルを返します。timetable に再度インデックスを付けて、行時間として欠損値を含まない行のみを保持します。それらの行を 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 の最後の行で、変数 RainWindspeedNaN 値が含まれています。

欠損時間または欠損データをもつ行の削除

関数 rmmissing を使用して欠損行時間および欠損データ値を削除できます。rmmissing は、欠損行時間または欠損データ値、あるいはその両方をもつ timetable 行を削除します。

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   

timetable の並べ替えと規則的な timetable かどうかの判別

TT が並べ替えられているかどうかを判別します。次に、関数 sortrows を使用して、行時間を基準として timetable を並べ替えます。

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 が規則的かどうかを判別します。規則的な timetable では、連続する行時間の間隔が同じです。並べ替えられた timetable であっても、等間隔でないタイム ステップをもつことがあります。

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

重複行の削除

timetable は重複行をもつ場合があります。timetable の行は、行時間とデータ値が同じ場合に重複となります。この例では、TT の最後の 2 行が重複しています。

重複行を削除するには、関数 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   

重複する時間と異なるデータをもつ行の検索

timetable には、行時間が重複していてデータ値が異なる行が含まれる場合があります。この例では、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

timetable にインデックスを付け、行時間が重複する行を表示します。時間を基準としてインデックスを付けると、出力 timetable に、行時間が一致するすべての行が含まれます。

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   

時間が重複する最初と最後の行の選択

関数 unique および retime を使用して、行時間が重複する最初と最後の行を選択します。

まず、関数 unique を使用して TT から一意な行時間のベクトルを作成します。

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   

時間が重複する行の各セットから最後の行を選択します。retime のメソッドに 'previous' を指定して、最後の行からデータをコピーします。'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   

規則的な timetable の作成

retime を使用して規則的な timetable を作成します。データを内挿して規則的な 1 時間ごとの時間ベクトルにします。線形内挿を使用するには、'linear' を指定します。TT の各行時間は毎正時に始まり、連続する行時間の間に 1 時間の間隔があります。

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' を使用します。任意のサイズのタイム ステップを duration またはカレンダー期間の値として指定できます。

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  

規則的な timetable のデータの抽出

関数で使用するため timetable のデータをエクスポートして、規則的な時間間隔を置いたデータを解析できます。たとえば、Econometrics Toolbox™ および Signal Processing Toolbox™ には、等間隔のデータをさらに解析するための関数が含まれています。

timetable のデータを配列として抽出します。これらの table 変数が連結可能な場合は、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
      ⋮

参考

| | | | | | | | |

関連するトピック