【Python】機械学習で日付(datetime)を扱う際に理解すべきことと手法を全部まとめる

Posted: , Category: Python , プログラミング言語

機械学習でPythonを用いて時系列データを扱う際には、日付オブジェクト(Datetime)オブジェクトを扱うことになると思いますが、その扱い方について意外と習熟している人は少ないように思います。

また、Datetimeといっても、文字列の日付があったり、フォーマットがあったり、pandasで扱える日付やmatplotlibで、グラフの軸にしたい時の日付など、同じ日付であっても、使えるメソッドが違うことも多々あり、初心者の人は毎回同じことをググっている…みたいなこともありがちではないでしょうか。

今回は機械学習やデータ分析をする際に、頻繁に利用する日付周りの操作や、そもそものPythonにおけるDatetimeオブジェクトについて解説します。

まずは、必要なライブラリをここでインポートしておきます。

以降の操作では、このライブラリはインポートされている前提で、解説を進めていきます。

from datetime import datetime as dt
from datetime import timedelta as td

DateTimeの基本的な使い方

DateTimeの初期化(コンストラクタ)

dt(2020, 1, 3)

DateTimeの初期化は引数に、year, month, dayを与えるだけでできます。hour, minute, secondはオプション引数なので与えなくても大丈夫です。

オプション引数を与えない場合は、0時0分0秒としてDateTimeオブジェクトが生成されます。

DateTime周りで意外と知らない扱い方

2つの日時の間の日数を取得する

2つの日付の間の日数を得ることができます。

a = dt(2020, 10, 11, 1, 12, 32)
b = dt(2020, 11, 21, 1, 23, 21)
# b - a でTimeDeltaオブジェクトが生成される。
# b -a => datetime.timedelta(days=41, seconds=649)

(b - a).days # => 41

2つの日時の間の日付のリストを取得する

a = dt(2020, 10, 11, 1, 12, 32)
b = dt(2020, 10, 14, 1, 23, 21)

c = [a.replace(hour=0, minute=0, second=0, microsecond=0) + td(days=i) for i in range((b-a).days)]
c 
# => [datetime.datetime(2020, 10, 11, 0, 0),
# datetime.datetime(2020, 10, 12, 0, 0),
# datetime.datetime(2020, 10, 13, 0, 0)]

0時0分0秒に丸める

0時0分0秒で丸める場合は次のように行います。

a = dt(2020, 10, 11, 1, 12, 32)
a.replace(hour=0, minute=0, second=0, microsecond=0)
# => datetime.datetime(2020, 10, 11, 0, 0)

matplotlibでの日付の目盛りを扱う方法

matplitlibで日付の目盛りを扱う場合は、少し癖があるので注意が必要です。

matplitlibで日付の目盛りを扱う際には、mdatesモジュールを利用します。

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

関連タグ:
機械学習と情報技術