コンピュータにおける日付データの表現について|データ分析用語を解説

AUTHOR :   ギックス

本記事は、株式会社ギックスの運営していた分析情報サイト graffe/グラーフ より移設されました(2019/7/1)

その日付は、どんな方法で表現されていますか?

みなさんはデータを分析する時に日付データを扱うことが多いと思います。とある日付と一致するデータを結合したり、あるデータの集合を年ごとや月ごとに集計して合計をだしたり、いろいろなシーンで日付データを取り扱っていらっしゃる事でしょう。ここで、今日はみなさんに質問をさせてください。
「その日付データはどんな方法で表現されていますか?」
という質問です。
「A月B日だよ」「yyyy年MM月dd日 HH時mm分ss秒だよ」とお答えくださるでしょうか?実は、それらは「日付を文字にしたときの”表示形式”」なのです。今日一緒に考えていきたいのは「そのデータはコンピュータの中でそんな方法で表現されていますか?」ということです。別の言い方をすると「みなさんが日付データとして扱っているそのデータは、コンピュータ内部でも日付として扱われていますか?」という質問と同じなのです。以下に代表的な日付データの表現方法(=扱われ方)を紹介させていただきながら、この質問の答えを説明させてください。

日付データを「文字列」として扱う

たとえば、「2015年1月2日3時4分5秒という時間」を「“2015/01/02 03:04:05″という文字列」で表現する扱い方です。この扱い方がある意味「最も一般的な扱い方」であると言えるかもしれません。もちろんこの表現方法が悪いということはまったくありません。しかしこの表現方法は「コンピュータの内部では日付として扱われていない」表現方法なのです。そして、それによって「便利ではない事」がいくつかあるのです。もちろん便利な事もあるので以下に「便利なこと」と「不便なこと」を挙げてみます。

[便利なこと]

  • 見やすい:これは重要な要素です。後述する「コンピュータの内部で日付として扱われる表現方法」は人の目から見ると日付として認識しづらいので「パッと見わかりやすい」この方法にはやはりメリットがあります。

[不便なこと]

  • 日付を足せない/引けない:たとえば「X日後のデータが見たい」など「日付を足したい」と思ったことはありませんか?日付が文字列として扱われていると日付に対する加減処理という比較的難しい計算を自分自身で行わなければならないので(月またぎやうるう年など)、分析作業の効率の側面からは不便であるといえるでしょう。
  • 週ごとなどの集計処理:年ごとや月ごとの集計処理は文字列の中から年や月の文字を抽出することで不便なく集計処理を行う事ができますが、週に関する集計処理に関しては曜日を算出する処理が必要になるため、やや煩雑になります。
  • 文字列の書式が「完全に一致」していないと処理できない:「”2015/01/02 03:04:05″という文字列」で処理する場合「”2015/1/2 3:4:5″というゼロ省略の文字列」は「文字列として一致しない」ので別の集計データとして扱われます。この不一致による間違いは非常に心配な間違いです。大量データ集計処理にはリソースコストがかかります(時間もしくは費用)。この間違いによって集計処理をやり直さなければならない状態というのは分析プロセスにとって注意しなければならないポイントの一つです。

日付データを「数値」(エポック時間)として扱う

上記の「不便なこと」を解決する方法の一つがこの方法です。文字列を「数値」として扱います。多くの場合「エポック時間」と呼ばれる表現方法を使っています(エポック時間はUNIX時間ともよばれます)。これは「多くのコンピュータがその内部で時間を取り扱う方法」と同じ方法で、時間を「1970年1月1日 00時00分00秒からの経過時間」で表す方法です。例として「エポック秒」を例に挙げます。「エポック秒」は「1970年1月1日 00時00分00秒からの経過秒数」です。「2015年1月2日3時4分5秒」という時間を「エポック秒」であらわすと「1420135445」という数値になります。この方法であれば、日付というデータを「計算可能な数値」として扱っているので「日付の加算・減算」を容易に行う事ができます。また集計処理に関しても「1日は86400秒」「1週間は604800秒」というように集計対象の値範囲がわかっているので効率的に集計処理を行う事ができます。反面日付が単なる数字、しかも桁数の大きい数字で表されるので人間にとっての「パッと見のわかりや」は文字列表現と比べて劣ります。

日付データを「数値」(Excel日付値)として扱う

みなさんもよくお使いのExcel。このExcelも上記と同様日付を数値として扱っているのですが、その日付数値は独自の扱い方をしています。Excelを使っていて日付や数値の変換が意図しない値を示したことはないでしょうか?それは元データとExcel内部の日付データとの変換に起因することが多々あります。以下にExcel内における日付データの扱われ方を簡単に説明します。日付データの取り扱いにおいて問題があった時「こんなことをExcelは内部で行っている」ということだけでも覚えておいていただけると便利です。

  1. 日付「1900年1月0日 0時00分0秒」を、「数値の0」とする。
  2. ここから「1日」を「数値の1」として、加算していった数値が、日付となる。
  3. つまり、「1900年1月1日 0時00分0秒」は、「数値の1」となる。
  4. 上記bのとおり「1日」=「数値の1」なので、時分秒に相当する数値は以下のとおりとなる。
1時間  =1÷24  =0.0416666666666667
1分  =1÷24÷60  =0.00069444444444
1秒  =1÷24÷60÷60  =0.00001157407407

上記の例に照らし合わせると、日付「2015年1月2日3時4分5秒」は、数値「42006.1278356481」となります。
ちなみにExcelでは1899年以前の日付計算はうまくいかないので注意が必要です。企業の創業年数を算出したい場合などには注意が必要ですね。
 
今回はコンピュータにおける日付データの取り扱いについて説明しました。上記のような違いを事前に認識してあらかじめ便利な形式で日付データを扱うことで、分析作業を効率的に行う事ができると考えています。
データ分析用語:索引

SERVICE