以下、本発明の構成を図面に示す最良の形態に基づいて詳細に説明する。
図1から図4に、本発明の時系列データの保存及び抽出方法の実施形態の一例を示す。
本発明の時系列データの保存及び抽出方法は、図1のフローに示すように、大きくは、時系列データの保存に関する処理としてデータを間引いて抽出するための間引きタグの設定(S1)、データへの間引きタグの付与(S2)及び短時間で大きい変化が起きているイベントデータの検出(S3)、並びに時系列データの抽出に関する処理として時系列データを利用するためのデータの抽出と合成(S4)からなる。
以下に、まず、時系列データの保存に関する処理(S1〜S3)について図2に示すフローに従って説明する。
最初に、間引きタグの設定(S1)について説明する。
間引きタグは時系列データからデータを間引いて抽出する際に利用するものであり、各データに一つの間引きタグを付与する。間引きタグは、時刻のオーダーの種類を表すAタグと、時刻のオーダーの中での区切り(以下適宜、時刻の区切りと表記する)の種類を表すBタグとで構成する。間引きタグは、各データを取得した時刻に対して付与するものであり、もともとのデータの取得間隔には依存しない。そのため、データの取得間隔が変動した場合にも柔軟に対応することができる。
本実施形態では、Aタグである時刻のオーダーの種類として、秒、分、時、日、月及び年を設定する(S1−1)。なお、後述するように、日、月、年も特定の時点を表すものとして定義することにより時刻のオーダーとして扱う。また、秒、分及び時は日本国の標準時刻を用い、日及び月は日本国の暦を用い、年は西暦を用いる。
なお、時刻のオーダーの種類は、前記の秒、分、時、日、月、年には限られず、時系列データの内容や種類により作業者が適当な時刻のオーダーの種類を設定する。例えば、時刻のオーダーの種類として前記に加えて週を設定しても良い。また、前記のうち作業者が不要と判断した時刻のオーダーの種類は設定しなくても良い。更に、もともとのデータの取得間隔よりも小さい時刻のオーダーの種類は設定しない。具体的には例えば、もともとのデータの取得間隔が1時間毎であれば秒オーダーや分オーダーは設定しない。
AタグもBタグも具体的には数値を用いて表す。本実施形態では、AタグもBタグも一桁の整数を用いて表す。
Aタグの値は、秒オーダーは0、分オーダーは1、時オーダーは2、日オーダーは3、月オーダーは4、年オーダーは5とする。また、以降では、Aタグの値が大きい方の時刻のオーダーの種類を上位の時刻のオーダーの種類と呼び、小さい方を下位の時刻のオーダーの種類と呼ぶ。具体的には例えば、分オーダーは、秒オーダーに対しては上位の時刻のオーダーの種類であり、時オーダーに対しては下位の時刻のオーダーの種類である。
次に、Bタグの設定(S1−2)について説明する。前記の通り、Bタグは時刻のオーダーの中での区切りの種類を表すものであり、時刻のオーダーの種類のそれぞれについて設定する。
本実施形態では、秒オーダーの中での区切りの種類は、1秒毎、5秒毎、10秒毎、20秒毎、30秒毎とする。また、分オーダーの中での区切りの種類は、1分毎、5分毎、10分毎、20分毎、30分毎とする。更に、時オーダーの中での区切りの種類は、1時間毎、2時間毎、3時間毎、4時間毎、6時間毎、12時間毎とする。
Bタグの値は、秒オーダーの中での区切りの種類については、1秒毎は0、5秒毎は1、10秒毎は2、20秒毎は3、30秒毎は4とする。また、分オーダーの中での区切りの種類については、1分毎は0、5分毎は1、10分毎は2、20分毎は3、30分毎は4とする。更に、時オーダーの中での区切りの種類については、1時間毎は0、2時間毎は1、3時間毎は2、4時間毎は3、6時間毎は4、12時間毎は5とする。また、以降では、時刻のオーダーの種類が同じもの同士でBタグの値が大きい方の時刻の区切りの種類を上位の時刻の区切りの種類と呼び、小さい方を下位の時刻の区切りの種類と呼ぶ。具体的には例えば、分オーダーについて、5分毎は、1分毎に対しては上位の時刻の区切りの種類であり、10分毎に対しては下位の時刻の区切りの種類である。
ここで、例えば秒オーダーの中での区切りの種類の5秒毎とは、5秒、10秒、15秒、20秒、25秒、30秒、35秒、40秒、45秒、50秒、55秒、60秒のことをいい、これらについては原則としてBタグの値は前記の通り1となる。しかしながら、複数の時刻の区切りの種類に該当する場合には、最も上位の時刻の区切りの種類を優先する。具体的には例えば、10秒は時刻の区切りの種類の5秒毎に該当すると共に10秒毎にも該当するので、より上位の時刻の区切りの種類である10秒毎を優先してBタグの値は2となる。また、20秒については、時刻の区切りの種類の5秒毎と10秒毎に該当し、更に20秒毎にも該当するので、最も上位の時刻の区切りの種類である20秒毎を優先してBタグの値は3となる。
また、ある時刻のオーダーの時刻の区切りに該当する時点がより上位の時刻のオーダーの種類の時刻の区切りにも該当する場合には、時刻のオーダーの種類をより上位の時刻のオーダーの種類とした上でその上位の時刻のオーダーの種類の中での時刻の区切りの種類を設定する。具体的には例えば、秒オーダーの60秒は時刻のオーダーの種類を分オーダーとした上で分オーダーの中での時刻の区切りの種類を設定する。そして更に秒オーダーの60秒が分オーダーの60分にも該当している場合には時刻のオーダーの種類を時オーダーとした上で時オーダーの中での時刻の区切りの種類を設定する。
以上の結果、秒オーダー、分オーダー、時オーダーのそれぞれのAタグの値とBタグの値は表1(A)、(B)、(C)の通りになる。
更に、本実施形態では、日オーダーの中での区切りの種類は、1日毎、5日毎、10日毎、15日毎とする。また、月オーダーの中での区切りの種類は、1月毎、2月毎、3月毎、6月毎とする。更に、年オーダーの中での区切りの種類は、1年毎、2年毎、5年毎とする。なお、本実施形態では、年オーダーのBタグの設定には西暦の下一桁を用いる。
Bタグの値は、日オーダーの中での区切りの種類については、1日毎は0、5日毎は1、10日毎は2、15日毎は3とする。また、月オーダーの中での区切りの種類については、1月毎は0、2月毎は1、3月毎は2、6月毎は3とする。更に、年オーダーの中での区切りの種類については、1年毎は0、2年毎は1、5年毎は2とする。
以上の結果、日オーダー、月オーダー、年オーダーのそれぞれのAタグの値とBタグの値は表2(A)、(B)、(C)の通りになる。
更に、1/10秒オーダー、1/100秒オーダー、1/1000秒オーダーについても間引きタグを設定する場合には、例えば表3(A)、(B)、(C)のように設定する。
また、本実施形態では、Aタグ及びBタグの値並びに(式1)を用いて間引きタグを二桁の整数で表す。これにより、後述するように、間引きタグを用いてデータを抽出する際の指定が簡便になる。
G=a×10+b …(式1)
ここに、G:間引きタグの値、a:Aタグの値、b:Bタグの値。
なお、Aタグの値a並びにBタグの値bの桁数は一桁には限られず二桁以上であっても良く、間引きタグの値Gの桁数は三桁以上であっても良い。更に、Aタグの値aの桁数とBタグの値bの桁数は同じであっても異なっていてもどちらでも良い。ここで、Bタグの値bの桁数が一桁でない場合には(式1)をBタグの値bの桁数に合わせて適切に設定することにより間引きタグを任意の桁数の整数で表現することができる。具体的には例えば、Bタグの値bの桁数が二桁の場合には(式1)をG=a×100+bのように設定する。
以上述べた方法によって各データに二桁の整数からなる間引きタグを付与することにより作業者が必要とする時間間隔のデータのみを時系列データから抽出することができる。なお、以降では、間引きタグの値Gを基に元の時系列データから抽出したデータを間引きデータと呼ぶ。
具体的には例えば、間引きタグの値Gが10以上のデータを抽出すると1分間隔の間引きデータが得られ、間引きタグの値Gが12以上のデータを抽出すると10分間隔の間引きデータが得られる。また、間引きタグの値Gが13以上で且つ14でないデータを抽出すると20分間隔の間引きデータが得られる。
なお、本実施形態では、Aタグの値aとBタグの値bとから間引きタグの値Gを算出するようにしているが、間引きタグのAタグとBタグとしてそのまま利用するようにしても良い。この場合には例えば、Aタグの値aが1以上のデータを抽出すると1分間隔の間引きデータが得られ、Aタグの値aが1以上で且つBタグの値bが2以上のデータを抽出すると10分間隔の間引きデータが得られ、更にAタグの値aが1以上であってBタグの値が3以上で且つ4でないデータを抽出すると20分間隔の間引きデータが得られる。
ここで、本発明では、それぞれの時刻のオーダーの種類の時刻の区切りに対応するデータは特定の時点のデータとして定義する。本実施形態では、秒オーダーのデータは毎秒丁度の時点のデータ、分オーダーのデータは毎分丁度の時点のデータ、時オーダーのデータは毎時丁度の時点のデータとする。したがって具体的には、時オーダーの3時のデータは3時00分00秒丁度の時点のデータとなる。
更に、日オーダー、月オーダー、年オーダーのデータもそれぞれを特定の時点のデータとして定義する。本実施形態では、日オーダーのデータはその日の午前0時丁度の時点、月オーダーのデータはその月の1日(ついたち)午前0時丁度の時点、年オーダーのデータはその年の1月1日午前0時丁度の時点のデータとする。したがって具体的には、年オーダーの5年のデータは西暦の下一桁が5である年の1月1日午前0時丁度の時点のデータとする。
ここで、上記の特定の時点はオフセットを設定して一定時間だけずらすようにしても良い。上記の特定の時点をオフセットによりずらすことにより、データの規準となる特定の時点を個々のデータの取得状況に適応させることができる。具体的には例えば、時オーダーについてオフセットをプラス15分とし、時オーダーのデータを毎時15分丁度の時点のデータとしても良い。なお、オフセットは、分オーダーについてはプラス1〜59秒、時オーダーについてはプラス1〜59分、日オーダーについてはプラス1〜23時間、月オーダーについてはプラス1〜27日、年オーダーについてはプラス1〜11月の範囲の整数値で設定する。
続いて、データへの間引きタグの付与(S2)について説明する。
まず、間引きタグを付与するデータDnの時刻TnとデータDnの直前に取得したデータDn−1の時刻Tn−1との中間の時刻Tn−1/2、並びにデータDnの時刻TnとデータDnの直後に取得したデータDn+1の時刻Tn+1との中間の時刻Tn+1/2を算出する(S2−1、S2−2)。なお、時刻Tn−1/2から時刻Tn+1/2までをデータDnの範囲と呼ぶ。また、本実施形態では、一番最初に取得したデータと一番最後に取得したデータについてはこのデータDnの範囲が設定できないため間引きタグを付与していない。
具体例として、例えば、間引きタグを付与するデータD2の時刻が14時44分であり、データD2の直前に取得したデータD1の時刻が14時41分でデータD2の直後に取得したデータD3の時刻が14時57分の場合には、データD2の範囲は14時42分30秒から14時50分30秒までとなる。
続いて、データDnの範囲に時刻の区切りが入っているか否かを判断する(S2−3)。そして、データDnの範囲に時刻の区切りが入っている場合(S2−3;Yes)には次の処理(S2−4)に進む。一方、データDnの範囲に時刻の区切りが入っていない場合(S2−3;No)には、データDnには間引きタグを付与せずにデータDnに対する間引きタグの付与の処理を終了する(S2−9)。
先の具体例では、データD2の範囲の14時42分30秒から14時50分30秒までに分オーダーの時刻の区切りの14時45分及び14時50分並びに秒オーダーの時刻の区切りが入っている(S2−3;Yes)ので次の処理(S2−4)に進む。
データDnの範囲に時刻の区切りが入っている場合(S2−3;Yes)には、データDnの範囲に入っている時刻の区切りの種類のうち最も上位の時刻のオーダーの種類の中で最も上位の時刻の区切りの種類Siを選定する(S2−4)。そして、その時刻の区切りの種類Siの時刻の区切りSi・kを選定する(S2−5)。
先の具体例では、まず、データD2の範囲に入っている時刻の区切りの種類の最も上位の時刻のオーダーの種類は分オーダーである。そして、分オーダーの時刻の区切り14時45分の時刻の区切りの種類は5分毎であり、時刻の区切り14時50分の時刻の区切りの種類は10分毎である。したがって、最も上位の時刻の区切りの種類として10分毎を選定する(S2−4)。そして、時刻の区切りとして14時50分を選定する(S2−5)。
なお、データDnの範囲に最も上位の時刻の区切りの種類Siの時刻の区切りが複数個ある場合、具体的には例えば、時刻の区切りSi・kの直前の時刻の区切りSi・k−1や直後の時刻の区切りSi・k+1等がデータDnの範囲にある場合には、それぞれについて以降のS2−6からS2−10までの処理を行う。そして、最終的に複数の間引きタグが付与され得る場合には、複数の間引きタグのそれぞれの時刻の区切りのうち時刻が最も早い時刻の区切りに対応する間引きタグを付与する。
次に、時刻の区切りの種類Siの時刻の区切りSi・kとその直前の時刻の区切りSi・k−1との中間の時刻Si・k−1/2、並びに時刻の区切りSi・kとその直後の時刻の区切りSi・k+1との中間の時刻Si・k+1/2を算出する(S2−6)。なお、時刻Si・k−1/2から時刻Si・k+1/2までを時刻の区切りSi・kの範囲と呼ぶ。
先の具体例では、時刻の区切りの種類10分毎の時刻の区切り14時50分の直前の時刻の区切りは14時40分で直後の時刻の区切りは15時00分であるので、時刻の区切り14時50分の範囲は14時45分から14時55分までとなる。
続いて、時刻の区切りSi・kの範囲に間引きタグを付与するデータDnの時刻Tnが入っているか否かを判断する(S2−7)。そして、時刻Tnが入っている場合(S2−7;Yes)には、時刻の区切りSi・kの間引きタグの値GをデータDnに付与する(S2−10)。
一方、時刻の区切りSi・kの範囲に時刻Tnが入っていない場合(S2−7;No)には、データDnの範囲に時刻の区切りの種類Siの下位の時刻の区切りの種類が入っているか否かを判断する(S2−8)。この際、時刻の区切りの種類Siの一つ下位の時刻の区切りの種類Si−1が入っているか否かを判断し、入っていない場合には更に一つ下位の時刻の区切りの種類Si−2が入っているか否かを判断するというように、時刻の区切りの種類として設定している全ての時刻の区切りの種類について上位から順に判断する。更に、ある時刻のオーダーの種類の中で設定している全ての時刻の区切りの種類についての判断に続いて一つ下位の時刻のオーダーの種類の中で設定している全ての時刻の区切りの種類について判断するというように、時刻のオーダーの種類として設定している全ての時刻のオーダーの種類について上位から順に時刻の区切りの種類が入っているか否かを判断する。
そして、データDnの範囲に時刻の区切りの種類Siの下位の時刻の区切りの種類が入っている場合(S2−8;Yes)には、その時刻の区切りの種類の時刻の区切りを選定する処理(S2−5)に戻る。
一方、データDnの範囲に下位の時刻の区切りの種類が入っていない場合(S2−8;No)には、データDnには間引きタグを付与せずにデータDnに対する間引きタグの付与の処理を終了する(S2−9)。
先の具体例では、時刻の区切り14時50分の範囲の14時45分から14時55分にデータD2の時刻14時44分は入っていない(S2−7;No)。そこで、データD2の範囲の14時42分30秒から14時50分30秒に時刻の区切りの種類10分毎の下位の時刻の区切りの種類が入っているか否かを判断すると(S2−8)、S2−4でみたように一つ下位の時刻の区切りの種類である5分毎が入っている(S2−8;Yes)のでその時刻の区切りの種類の時刻の区切りを選定する処理(S2−5)に戻る。
そして、時刻の区切りの種類5分毎の時刻の区切りは14時45分であり(S2−5)、直前の時刻の区切りは14時40分で直後の時刻の区切りは14時50分であるから時刻の区切りの範囲は14時42分30秒から14時47分30秒までとなる(S2−6)。そうすると時刻の区切りの範囲にデータD2の時刻14時44分が入っている(S2−7;Yes)ので、データD2は時刻のオーダーの種類が分で時刻の区切りの種類が5分毎となって間引きタグの値Gは11となる(S2−10)。
上記のS2−1からS2−10までの処理は時系列データを構成する全てのデータ毎に行う。なお、データへの間引きタグの付与は、既に取得済みでデータベース等に保存している時系列データに対して間引きタグを一括して後付けするようにしても良いし、データを新たに取得してデータベース等に保存する際に逐次的に間引きタグを付与するようにしても良い。
続いて、時系列データのうち短時間で大きい変化が起きているデータの検出(S3)について説明する。
長期間の時系列データを利用する際に単にデータを間引いて抽出するだけでは短時間でのデータの値の大きな変化を見落としてしまう可能性がある。具体的には、図4(A)に示すように、もともと図中の白丸と黒丸の時系列データが得られていた場合に、黒丸の間引きデータ2だけを抽出して白丸のデータ1をまったく使わないとすると短時間3におけるデータの値の大きな変化を見落としてしまうことになる。
そこで、本発明では、前述の間引きによるデータの抽出に加え、時系列データのうち短時間で大きい変化が起きているデータの抽出を行う。なお、以降では、短時間のうちにデータの値に大きな変化を引き起こす原因のことをイベントと呼び、イベントに対応して短時間で大きく変化している部分のデータのことをイベントデータと呼ぶ。したがって、ここでの処理はイベントデータを検出することである。
イベントデータの検出はデータの1階微分値や2階微分値を基に行う。そのため、まず、データの1階微分値や2階微分値を算出する(S3−1)。
具体的には、1階微分値を算出するデータをデータDn、データDnの直後に取得したデータをデータDn+1とすると、データDnの1階微分値D'nを(式2)により算出する。
D'n=(Vn+1−Vn)/(Tn+1−Tn) …(式2)
ここに、D'n:データDnの1階微分値、Vn+1:データDn+1の値、Vn:データDnの値、Tn+1:データDn+1の時刻、Tn:データDnの時刻。なお、時刻Tn+1やTnの単位はもともとのデータの取得間隔に合わせて設定し、同一の単位とする。具体的には例えば、もともとのデータの取得間隔が数分間隔であればどちらも分とし、一日に一回の取得間隔であればどちらも日とする。
更に、データDn+1の直後に取得したデータをデータDn+2とすると、データDn+1の1階微分値D'n+1を(式3)により算出する。
D'n+1=(Vn+2−Vn+1)/(Tn+2−Tn+1) …(式3)
ここに、D'n+1:データDn+1の1階微分値、Vn+2:データDn+2の値、Vn+1:データDn+1の値、Tn+2:データDn+2の時刻、Tn+1:データDn+1の時刻。
そして、データDnの2階微分値D''nを(式4)により算出する。
D''n=(D'n+1−D'n)/{(Tn+2−Tn)/2} …(式4)
ここに、D''n:データDnの2階微分値、D'n+1:データDn+1の1階微分値、D'n:データDnの1階微分値、Tn+2:データDn+2の時刻、Tn:データDnの時刻。
ここで、取得したデータには、イベントによるものではないが、例えば計測機器の計測誤差等によるノイズと呼ばれるデータの変動が含まれている場合がある。したがって、取得したデータの計測値をそのまま用いて1階微分値や2階微分値(以下適宜、単に微分値と表記する)を算出した場合、このノイズをイベントと誤認してしまうことも考えられる。そのため、データの微分値を算出する際に移動平均値を用いるようにしても良い。
具体的には、データDnの直前に取得したデータをデータDn−1とすると、データDnの移動平均値Mnを(式5)により算出し、データDn+1の移動平均値Mn+1を(式6)により算出する。
Mn=(Vn−1+Vn+Vn+1)/3 …(式5)
ここに、Mn:データDnの移動平均値、Vn−1:データDn−1の値、Vn:データDnの値、Vn+1:データDn+1の値。
Mn+1=(Vn+Vn+1+Vn+2)/3 …(式6)
ここに、Mn+1:データDn+1の移動平均値、Vn:データDnの値、Vn+1:データDn+1の値、Vn+2:データDn+2の値。
そして、移動平均値を用いたデータDnの1階微分値DM'nを(式7)により算出する。
DM'n=(Mn+1−Mn)/(Tn+1−Tn) …(式7)
ここに、DM'n:移動平均値を用いたデータDnの1階微分値、Mn+1:データDn+1の移動平均値、Mn:データDnの移動平均値、Tn+1:データDn+1の時刻、Tn:データDnの時刻。
更に、データDn+2の直後に取得したデータをデータDn+3とすると、データDn+2の移動平均値Mn+2を(式8)により算出する。
Mn+2=(Vn+1+Vn+2+Vn+3)/3 …(式8)
ここに、Mn+2:データDn+2の移動平均値、Vn+1:データDn+1の値、Vn+2:データDn+2の値、Vn+3:データDn+3の値。
そして、移動平均値を用いたデータDn+1の1階微分値DM'n+1を(式9)により算出する。
DM'n+1=(Mn+2−Mn+1)/(Tn+2−Tn+1) …(式9)
ここに、DM'n+1:移動平均値を用いたデータDn+1の1階微分値、Mn+2:データDn+2の移動平均値、Mn+1:データDn+1の移動平均値、Tn+2:データDn+2の時刻、Tn+1:データDn+1の時刻。
そして、移動平均値を用いたデータDnの2階微分値DM''nを(式10)により算出する。
DM''n=(DM'n+1−DM'n)/{(Tn+2−Tn)/2} …(式10)
ここに、DM''n:移動平均値を用いたデータDnの2階微分値、DM'n+1:移動平均値を用いたデータDn+1の1階微分値、DM'n:移動平均値を用いたデータDnの1階微分値、Tn+2:データDn+2の時刻、Tn:データDnの時刻。
そして、1階微分値、2階微分値、移動平均値を用いた1階微分値、移動平均値を用いた2階微分値(以降では、移動平均値を用いた微分値も含めて単に微分値と表記する)のうちのいずれか一つ若しくは二つ以上を算出し、算出した値をデータに付与する。
上記のS3−1の処理は時系列データを構成する全てのデータ毎に行う。ただし、例えば一番最初に取得したデータや一番最後に取得したデータ等について、微分値を算出するデータの前後のデータであって微分値の算出に必要なデータがない場合には微分値を付与しない。なお、データへの微分値の付与は、既に取得済みでデータベース等に保存している時系列データに対して微分値を一括して後付けするようにしても良いし、データを新たに取得してデータベース等に保存する際に逐次的に微分値を付与するようにしても良い。
次に、イベントの生起を判別するための閾値(以下、イベント判別閾値と表記する)を設定する(S3−2)。
イベント判別閾値はS3−1でデータ毎に付与した微分値を基にイベントの発生と終了を判別するための閾値であって、具体的には、微分値の絶対値がこの閾値以上になった場合にイベントが発生したと判別し、その後に微分値の絶対値がこの閾値未満になった場合にイベントが終了したと判別する。
イベント判別閾値は、例えば、データの内容や値の大きさ、或いは注目すべきイベントの種類とそのイベントに対応して想定されるデータの値の変化の大きさ等を考慮して作業者が適当なイベント判別閾値を設定する。
若しくは、S3−1で算出した微分値の統計情報を利用してイベント判別閾値を設定するようにしても良い。具体的には例えば、まず、時系列データを構成する全てのデータについて微分値を算出し、微分値の絶対値を大きい順に並べた微分値の順位データを作成する。そして、例えば作業者が微分値の絶対値が大きい上位10%を抽出したい場合には上位10%の順位に該当する微分値の絶対値をイベント判別閾値として設定するようにしても良い。
なお、イベントの検出のためには、データの1階微分値、2階微分値、移動平均値を用いた1階微分値、移動平均値を用いた2階微分値のいずれか一つのみを算出すると共にそのいずれか一つについてイベント判別閾値を設定するようにしても良いし、又は二つ以上の微分値を算出すると共にそれぞれについてイベント判別閾値を設定するようにしても良い。
以上の処理を行うことにより、図4の具体例の場合には、図4(B)に示すように、中黒二重丸のイベントデータ4を抽出することが可能となり、短時間3におけるデータの値の大きな変化を見落とすことなく時系列データを利用することが可能となる。
以上のS1−1からS3−2までの処理によりデータ毎に原則として間引きタグと微分値のどちらか一方又は両方が付与され、データ毎の間引きタグ並びに微分値としてデータと対応させて保存する(S3−3)ことにより、時系列データの保存に関する処理は終了する。
次に、時系列データの抽出に関する処理である時系列データを利用するための間引きデータ及びイベントデータの抽出とそれらデータの合成(S4)について図3に示すフローに従って説明する。
まず、時系列データの抽出期間を設定する(S4−1)。時系列データの抽出期間は、例えば、もともとの時系列データの収集期間や作業の目的に対応して必要とされる時系列データの期間を考慮して作業者が適当な期間を設定する。
そして、S2でデータ毎に付与した間引きタグの値Gに基づいて間引きデータの抽出を行う(S4−2、S4−3)。
時系列データから間引きデータを抽出するための間引きタグの条件は、例えば、作業者が必要とするデータの時間間隔に基づいて設定する。必要とするデータの時間間隔は、例えば、もともとの時系列データの取得間隔や作業の目的並びに時系列データの抽出期間等を考慮して作業者が適当なデータの時間間隔を決定する。そして、例えば、作業者が必要とするデータの時間間隔が10分間隔であれば間引きタグの条件として間引きタグの値Gが12以上であることを設定し、日毎のデータが必要であれば間引きタグの値Gが30以上であることを設定する。
また、S4−1で設定した時系列データの抽出期間と間引きデータとして抽出するデータ数の上限とから(式11)により算出した時間間隔Iを基に間引きタグの条件を設定するようにしても良い。
I=S/N …(式11)
ここに、I:時間間隔、S:時系列データの抽出期間、N:間引きデータとして抽出するデータ数の上限。なお、I及びSの単位は例えば[分]など時間の単位であって両者は同一の単位とする。
ここで、間引きデータとして抽出するデータ数の上限は、例えば、処理・加工等することができるデータ数の上限及びイベントデータとして抽出されるデータ数の想定に基づいて作業者が適当な間引きデータ数の上限を決定する。
そして、(式11)により算出した時間間隔I以上であって且つ最も小さい時刻の区切りの種類を選定する。
具体的には例えば、時系列データの抽出期間が1年間で、間引きデータとして抽出するデータ数の上限を5000個とした場合には、時系列データの抽出期間Sが525600[分]となるので(式11)から時間間隔Iは105.12[分]となる。したがって、表1の中から105.12[分]以上であって且つ最も小さい時刻の区切りの種類を選定すると2時間毎となる。よって、間引きタグの条件は、間引きタグの値Gが21以上で且つ22でないこととなる。
そして、データに付与した間引きタグの値Gが間引きタグの条件を満たす場合(S4−3;Yes)にはそのデータを抽出する(S4−6)。一方、間引きタグの値Gが間引きタグの条件を満たさない場合(S4−3;No)には次の処理(S4−4)に移る。
続いて、イベントデータの抽出をS3−1でデータ毎に付与した微分値とS3−2で設定したイベント判別閾値を比較することにより行う(S4−4)。
そして、微分値の絶対値がイベント判別閾値以上の場合(S4−4;Yes)にはそのデータを抽出する(S4−6)。一方、微分値の絶対値がイベント判別閾値未満の場合(S4−4;No)にはそのデータは抽出しない(S4−5)。
上記のS4−2からS4−6までの処理を時系列データを構成する全てのデータ毎に行い、間引きデータ及びイベントデータを抽出する。そして抽出した全てのデータを時刻順に並べる(S4−7)ことにより間引き条件に合致すると共にイベントに対応したデータが抽出された時系列データが得られ、時系列データの抽出に関する処理は終了する。
上述の時系列データの保存及び抽出方法は時系列データの保存及び抽出プログラム13をコンピュータ上で実行することによっても実現される。この実施の一例を以下に示す。
時系列データの保存及び抽出プログラム13を実行するための時系列データの保存及び抽出装置5の全体構成を図5に示す。時系列データの保存及び抽出装置5は、制御部6、記憶部7、入力部8、表示部9及びメモリ10を備え相互にバス等の信号回線により接続されている。また、時系列データの保存及び抽出装置5にはデータベース11及び保存用データベース12が通信回線等により接続されており、その通信回線等を介して相互にデータや制御指令等の信号の送受信(出入力)が行われる。
制御部6は 記憶部7に記憶されている時系列データの保存及び抽出プログラム13により時系列データの保存及び抽出装置5全体の制御並びに時系列データの保存及び抽出に係る演算を行うものであり、例えばCPUである。記憶部7は少なくともデータやプログラムを記憶可能な装置であり、例えばハードディスクである。入力部8は少なくとも作業者の命令を制御部6に与えるためのインターフェイスであり、例えばキーボードである。表示部9は制御部6の制御により文字や図形等の表示を行うものであり、例えばディスプレイである。メモリ10は制御部6が各種制御を実行する際に作業領域となるメモリ空間となる。データベース11や保存用データベース12は少なくともデータを記憶可能な装置であり、例えばデータサーバである。
時系列データの保存及び抽出装置5の制御部6は、時系列データの保存及び抽出プログラム13を実行することにより、データに付与する間引きタグを設定するタグ設定部6a、データの範囲の時刻を算出する第一の時刻算出部6b、データの範囲に時刻の区切りが入っているか否かを判断する第一の時刻の区切り判定部6c、最も上位の時刻のオーダーの種類の中で最も上位の時刻の区切りの種類を選定する選定部6d、時刻の区切りの範囲の時刻を算出する第二の時刻算出部6e、時刻の区切りの範囲にデータの時刻が入っているか否かを判断するデータの時刻判定部6f、データに間引きタグを付与するタグ付与部6g、データの範囲に下位の時刻の区切りの種類が入っているか否かを判断する第二の時刻の区切り判定部6h、データの微分値を算出する微分値算出部6i、イベント判別閾値を設定する閾値設定部6j、時系列データの中から間引きデータを抽出する間引きデータ抽出部6k、時系列データの中からイベントデータを抽出するイベントデータ抽出部6mが構成される。
なお、データベース11には、例えば各種の計測機器が計測した複数時点の計測データや演算機器が算出した複数時点の統計データが時系列データとして保管されている。そして、この時系列データを構成する各データにはデータ値とデータ時刻情報とが少なくとも含まれている。
まず、時系列データを保存する際(S1〜S3)の時系列データの保存及び抽出プログラム13の処理内容について説明する。
制御部6のタグ設定部6aは、Aタグ及びBタグの設定の内容を例えば入力部8により入力して予め記憶部7に記憶しておく(S1−1、S1−2)。更に、時刻のオーダーの種類毎の時刻の区切りの種類別に(式1)を用いて間引きタグの値Gを算出すると共に算出した間引きタグの値Gを記憶部7又はメモリ10に記憶する。なお、Aタグ及びBタグの設定の内容とは、時刻のオーダーの種類とその種類別のAタグの値、及び時刻のオーダーの種類毎の時刻の区切りの種類とその種類別のBタグの値である。
次に、制御部6の第一の時刻算出部6bは、データDn−1、Dn、Dn+1をデータベース11から読み込み(S2−1)、データDnの範囲の時刻Tn−1/2と時刻Tn+1/2を算出する(S2−2)。そして、データDn−1、Dn、Dn+1をメモリ10に記憶すると共に算出した時刻Tn−1/2と時刻Tn+1/2を記憶部7又はメモリ10に記憶する。
続いて、制御部6の第一の時刻の区切り判定部6cは、記憶部7に記憶しているAタグ及びBタグの設定の内容及びS2−1で記憶部7又はメモリ10に記憶した時刻Tn−1/2と時刻Tn+1/2を読み込む。そして、データDnの範囲である時刻Tn−1/2から時刻Tn+1/2の間に時刻の区切りが入っているか否かを判断する(S2−3)。
そして、データDnの範囲に時刻の区切りが入っていない場合(S2−3;No)には、データDnには間引きタグを付与せずにデータDnに対する間引きタグの付与の処理を終了する(S2−9)。なお、この場合は、データDnはタグが付与されない状態で保存用データベース12に保存される。
一方、データDnの範囲に時刻の区切りが入っている場合(S2−3;Yes)には、制御部6の第一の時刻の区切り判定部6cの判定結果に基づき、制御部6の選定部6dは、データDnの範囲に入っている時刻の区切りの種類のうち最も上位の時刻のオーダーの種類の中で最も上位の時刻の区切りの種類Siを選定する(S2−4)と共にその時刻の区切りの種類Siの時刻の区切りSi・kを選定する(S2−5)。そして、選定した時刻の区切りの種類Si及び時刻の区切りSi・kを記憶部7又はメモリ10に記憶する。
次に、制御部6の第二の時刻算出部6eは、記憶部7に記憶しているAタグ及びBタグの設定の内容並びにS2−4及びS2−5で記憶部7又はメモリ10に記憶した時刻の区切りの種類Si及び時刻の区切りSi・kを読み込む。そして、時刻の区切りSi・kの範囲の時刻Si・k−1/2と時刻Si・k+1/2を算出する(S2−6)。更に、算出した時刻Si・k−1/2及び時刻Si・k+1/2を記憶部7又はメモリ10に記憶する。
次に、制御部6のデータの時刻判定部6fは、S2−1でメモリ10に記憶したデータDn並びにS2−6で記憶部7又はメモリ10に記憶した時刻Si・k−1/2及び時刻Si・k+1/2を読み込み、時刻の区切りSi・kの範囲である時刻Si・k−1/2から時刻Si・k+1/2の間にデータDnの時刻Tnが入っているか否かを判断する(S2−7)。
そして、時刻の区切りSi・kの範囲に時刻Tnが入っている場合(S2−7;Yes)には、制御部6のデータの時刻判定部6fの判定結果に基づき、タグ付与部6gはS1−1・S1−2で記憶部7又はメモリ10に記憶した時刻のオーダーの種類毎の時刻の区切りの種類別の間引きタグの値Gの中から時刻の区切りSi・kの間引きタグの値Gを読み出してデータDnの間引きタグの値とし(S2−10)、データDn及び間引きタグの値Gを保存用データベース12に記憶する。なお、本実施形態では、間引きタグの付与が終了したデータを保存用データベース12に保存するようにしているが、もともとの時系列データが保管されているデータベース11に保存するようにしても良いし、時系列データの保存及び抽出装置5の記憶部7に保存するようにしても良い。
一方、時刻の区切りSi・kの範囲に時刻Tnが入っていない場合(S2−7;No)には、制御部6の第二の時刻の区切り判定部6hは、記憶部7に記憶しているAタグ及びBタグの設定の内容及びS2−2で記憶部7又はメモリ10に記憶した時刻Tn−1/2と時刻Tn+1/2を読み込む。そして、データDnの範囲である時刻Tn−1/2から時刻Tn+1/2の間に時刻の区切りの種類Siの下位の時刻の区切りの種類が入っているか否かを判断する(S2−8)。
そして、データDnの範囲に下位の時刻の区切りの種類が入っている場合(S2−8;Yes)には、制御部6の第二の時刻の区切り判定部6hの判定結果に基づき、選定部6dがその時刻の区切りの種類の時刻の区切りを選定する処理(S2−5)に戻る。
一方、データDnの範囲に下位の時刻の区切りの種類が入っていない場合(S2−8;No)には、データDnには間引きタグを付与せずにデータDnに対する間引きタグの付与の処理を終了する(S2−9)。なお、この場合は、データDnはタグが付与されない状態で保存用データベース12に保存される。
時系列データの保存及び抽出プログラム13は上記のS2−1からS2−10までの処理をデータベース11に保管されている時系列データを構成する全てのデータ毎に行い、全てのデータについてS2−1からS2−10までの処理が終了した場合に間引きタグの付与の処理を終了する。
次に、制御部6の微分値算出部6iは、データDnとDn+1をメモリ10又はデータベース11から読み込み、(式2)によりデータDnの1階微分値D'nを算出する。更にデータDn+2をデータベース11から読み込み、(式3)によりデータDn+1の1階微分値D'n+1を算出して(式4)によりデータDnの2階微分値D''nを算出する(S3−1)。
また、移動平均値を用いたデータDnの1階微分値DM'nを算出する場合には、制御部6の微分値算出部6iは、データDn−1、Dn、Dn+1、Dn+2、Dn+3をメモリ10又はデータベース11から読み込み、(式5)によりデータDnの移動平均値Mnを算出すると共に(式6)によりデータDn+1の移動平均値Mn+1を算出して(式7)により移動平均値を用いたデータDnの1階微分値DM'nを算出する。更に、(式8)によりデータDn+2の移動平均値Mn+2を算出すると共に(式9)により移動平均値を用いたデータDn+1の1階微分値DM'n+1を算出して(式10)により移動平均値を用いたデータDnの2階微分値DM''nを算出する(S3−1)。
そして、算出した微分値をデータDnの微分値として保存用データベース12に保存する。なお、S3−1で算出する微分値の種類については、例えば、時系列データの保存及び抽出プログラム13上前述の全ての微分値を必ず算出するようにしても良いし、又は算出する微分値の種類の指定を要求する内容のメッセージをS3−1で処理する段階で表示部9に表示すると共に作業者の指定を入力部8を介して微分値算出部6iに与えるようにしても良い。
時系列データの保存及び抽出プログラム13は上記のS3−1の処理をデータベース11に保存されている時系列データを構成する全てのデータ毎に行い、全てのデータについてS3−1の処理が終了した場合に微分値の算出の処理を終了する。
次に、イベント判別閾値の設定(S3−2)について、微分値の統計情報を利用して閾値を設定する場合には、制御部6の閾値設定部6jは、保存用データベース12に保存されている時系列データを構成する全てのデータについて微分値を読み込み、微分値の絶対値を大きい順に並べたデータを作成する。そして、微分値の上位割合の順位に該当する微分値の絶対値をイベント判別閾値として設定し、設定したイベント判別閾値を記憶部7に記憶する。なお、微分値の上位割合は、例えば、予め入力部8により入力して記憶部7に記憶した値を読み込むようにしても良いし、又は微分値の上位割合の指定を要求する内容のメッセージをS3−2を処理する段階で表示部9に表示すると共に作業者が指定した値を入力部8を介して閾値設定部6jに与えるようにしても良い。
一方、イベント判別閾値の設定(S3−2)について、微分値の統計情報を利用しない場合には、例えば、イベント判別閾値を入力部8により入力して記憶部7に予め記憶しておくようにしても良いし、又はイベント判別閾値の指定を要求する内容のメッセージを後述するS4−4を処理する段階で表示部9に表示すると共に作業者が指定する値を入力部8を介して制御部6のイベントデータ抽出部6mに与えるようにしても良い。
以上のS1−1からS3−2までの処理によりデータ毎に原則として間引きタグと微分値のどちらか一方又は両方が付与され、データ毎の間引きタグ、微分値としてデータと対応させて保存用データベース12に保存する(S3−3)ことにより、時系列データの保存に関する処理は終了する。
続いて、上記により保存された時系列データを利用するためにデータを抽出及び合成する際(S4)の時系列データの保存及び抽出プログラム13の処理内容について説明する。
制御部6の間引きデータ抽出部6kは、時系列データの抽出期間Sの指定を要求する内容のメッセージを表示部9に表示すると共に作業者が指定する値を入力部8を介して入力する(S4−1)。そして、時系列データの抽出期間Sの値を記憶部7又はメモリ10に記憶する。
次に、制御部6の間引きデータ抽出部6kは、保存用データベース12に保存しているデータ毎のデータの値並びに間引きタグの値及び微分値を読み込み(S4−2)、間引きタグの値が間引きタグの条件を満たすか否かを判断する(S4−3)。ここで、間引きタグの条件の設定方法としては、例えば、以下の二つの方法が考えられる。
一つの方法は、まず、S4−1の時系列データの抽出期間Sの値の入力の後に間引きデータの時間間隔の指定を要求する内容のメッセージを表示部9に表示すると共に作業者が指定する時間間隔を入力部8を介して間引きデータ抽出部6kに与える。また、間引きデータ抽出部6kはS1−1・S1−2で記憶部7又はメモリ10に記憶した時刻のオーダーの種類毎の時刻の区切りの種類別の間引きタグの値Gを読み込む。そして、作業者の指定の時間間隔に合う間引きタグの値Gを選定して間引きタグの条件として設定する。
もう一つの方法は、まず、S4−1の時系列データの抽出期間Sの値の入力の後に間引きデータとして抽出するデータ数の上限Nの指定を要求する内容のメッセージを表示部9に表示すると共に作業者が指定する値を入力部8を介して間引きデータ抽出部6kに与える。また、間引きデータ抽出部6kはS4−1で記憶部7又はメモリ10に記憶した時系列データの抽出期間Sの値を読み込む。そして、間引きデータ抽出部6kは(式11)により時間間隔Iを算出する。更に、間引きデータ抽出部6kはS1−1・S1−2で記憶部7又はメモリ10に記憶した時刻のオーダーの種類毎の時刻の区切りの種類別の間引きタグの値Gを読み込み、時間間隔I以上であって且つ最も小さい時刻の区切りの種類の間引きタグの値Gを選定して間引きタグの条件として設定する。
そして、データの間引きタグの値が間引きタグの条件を満たす場合(S4−3;Yes)には、制御部6の間引きデータ抽出部6kはそのデータを抽出対象のデータとして記憶部7に記憶する(S4−6)。
一方、データの間引きタグの値が間引きタグの条件を満たさない場合(S4−3;No)には、制御部6の間引きデータ抽出部6kは保存用データベース12から読み込んだデータの値並びに間引きタグの値及び微分値を制御部6のイベントデータ抽出部6mに与える。
イベントデータ抽出部6mはデータの微分値がイベント判別閾値以上か否かを判断する(S4−4)。ここで、イベント判別閾値については、前述の通り、例えば、S3−2で記憶部7に記憶した微分値の統計情報に基づくイベント判別閾値を読み込むようにしても良いし、入力部8により入力して記憶部7に予め記憶しておいたイベント判別閾値を読み込むようにしても良いし、又はイベント判別閾値の指定を要求する内容のメッセージをS4−4を処理する段階で表示部9に表示すると共に作業者が指定する値を入力部8を介してイベントデータ抽出部6mに与えるようにしても良い。
そして、データの微分値の絶対値がイベント判別閾値以上の場合(S4−4;Yes)には、制御部6のイベントデータ抽出部6mはこのデータを抽出対象のデータとして記憶部7に記憶する(S4−6)。
一方、データの微分値の絶対値がイベント判別閾値未満の場合(S4−4;No)には、このデータを抽出対象のデータとはしないでこのデータについてのデータ抽出の処理を終了する(S4−5)。なお、この場合は、このデータは記憶部7には記憶されない。
時系列データの保存及び抽出プログラム13は上記のS4−2からS4−6までの処理を保存用データベース12に保存されている時系列データを構成する全てのデータ毎に行い、全てのデータについてS4−2からS4−6までの処理が終了した場合に時系列データの抽出の処理を終了する。
なお、このようにして保存用データベース12から抽出されて記憶部7に記憶された抽出データは、例えば、抽出データの推移の状況を表す折れ線グラフ等を描画するデータとして利用しても良いし、抽出データについての統計値を算出するデータとして利用しても良い。また更に、このように例えばグラフを描画したり統計値を算出したりする機能を本発明の時系列データの保存及び抽出プログラム13に追加するようにしても良い。
なお、上述の形態は本発明の好適な形態の一例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々変形実施可能である。