データ測定で全部「分単位」に揃えちゃえば楽かと思ったらそうでもなく

日付をまたぐデータ測定をしていた時、日時の扱いであれこれ考えていたときのまとめです。適当に書き散らしただけなので、雑談程度のまとめとなります。


以下のような日付と時刻のデータがあります。
2018/12/07 11:34
2018/12/07 19:09
2018/12/08 03:21
2018/12/08 15:27
2018/12/09 01:34
連続データとして扱うには単位を統一する必要があるので、これらを分単位で書き直すことにします。日付部分の情報は削って「1日目、2日目、3日目…」と扱うことにします。

まず経過日数を「時(hour)」に変換してまとめます。
11:34
19:09
(3+24):21 → 27:21
(15+24):27 → 39:27
(1+24*2):34 → 49:34
要は経過日数をaとしてa*24をそれぞれの時刻に加算しています。1日目の場合は日数が経過していない(つまり0日目なのでa=0)ので0*24が加算されます。2日目は1日が経過しているのでa=1、1*24が加算となっていきます。

これではまだ時(hour)と分(minute)が分かれているので、これも分にまとめます。
11*60+34 → 694
19*60+09 → 1149
27*60+21 → 1641
39*60+27 → 2367
49*60+34 → 2974
経過時間と考えると始まりが「694」というのは直感的ではないので、始まりの「0分」として扱うことにします(つまり相対時間に書き直す)。
694 - 694 = 0
1149 - 694 = 455
1641 - 694 = 947
2367 - 694 = 1673
2974 - 694 = 2280
このように単位を合わせてしまえば連続データとして扱いやすくなります。あとから絶対時間に戻したくなる場合もあるので、起点の日時(2018/12/07 11:34)は別で記録しておけばいいでしょう。
めでたしめでたし。

と、簡単に考えると話はここで終わるのですが、より厳密に考えていくといくつか考慮すべき条件が増えていきます。。
まず月をまたぐ場合、月によって30日、31日、28日と分かれているので、「月→日」に変換する場合に条件分けして計算する必要があります。
また「うるう年」の場合は2月の扱いが変わるのでまた条件分けが必要です。
さらに秒単位まで考えると「うるう秒」の扱いが出てきます。

数日で終わるような実験データならこれらは考慮する必要がない場合が多いでしょうけど、最低限の知識としては押さえておく必要はあります(必要になるならないかは別として)。
実際にコンピューター上で日付や時刻のデータを扱う場合は、こういう諸条件が組み込まれているソフトや関数を使ってやるのがいいでしょう。まぁいまどきの表計算ソフトやプログラミング言語の関数など大抵のものは組み込まれているはず。
(追記: ネットを検索してみるとうるう秒に関しては考慮されてない的な解説が多いですね。もし考慮する必要があるのならちゃんと調べてから使った方がいいです)
自分であれこれ考えて変換していくより、すでに用意されているものを使ってデータを扱った方が時間は節約できますね(追記: より厳密な扱いが必要な場合はちゃんと調べるなり作ったりする必要はあります)。



話ついでの参考ページ

コメント

スポンサーリンク


このブログの人気の投稿

gnuplotでプロットなどの色をcolornameの指定で変更する

Ubuntu Softwareが起動しないのでいろいろと調べてみる(Ubuntu 20.04.1 LTS)

Pythonのformat()を使って1桁の16進数でも2桁で出力する方法

gnuplot : プロット画像のサイズ指定について(set sizeとの違い)

gnuplot : グラフにグリッド線を描く方法(set grid)