0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

比較の前に時刻の来歴を分類する:欠損をFalseで潰さないPython例

0
Posted at

AIで作成した草稿と合成データの小さな例です。製品コードを公開したものではありません。

データを比較するとき、取得時刻がないレコードを「イベント後」と同じFalseにまとめると、時刻が不明だった事実を失います。ここではpre_event、not_pre_event、unknownを分けます。境界時刻と同時の記録も、事前保存には含めません。

from datetime import datetime, timezone

def before_event(saved_at, event_at):
    if saved_at is None or event_at is None:
        return "unknown"
    if saved_at.tzinfo is None or event_at.tzinfo is None:
        raise ValueError("timezone required")
    saved = saved_at.astimezone(timezone.utc)
    event = event_at.astimezone(timezone.utc)
    return "pre_event" if saved < event else "not_pre_event"

この関数は時刻の前後だけを分類します。データソースが正しいことや、保存時刻が改変されていないことは証明しません。実際に「事前」と呼ぶには、当時の保存記録を別に確認する必要があります。

確認したい境界は、取得時刻なし、イベント時刻なし、同時刻、タイムゾーンのない値、異なるオフセットで表した同一時刻です。比較の入口でunknownを残すと、後段の集計で除外理由を説明できます。

前日の記事が扱った比較キーとは別に、この記事は不明な時刻を二値に押し込まない点に絞りました。型や戻り値を増やす理由が、欠損の意味を保つためであることが大切です。

関連する読み方の例として、開発しているSIGNUM HQの無料診断を末尾に一つだけ置きます。この記事のコードが同サービスの実装だという意味ではありません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?