CSV分析で必須の入力チェックを6つに分ける
空ファイルや重複時刻を安全に検出する実装の観点
情報表示・学習目的の解説です。安全上重要な設備の制御や保証には使用しないでください。
計算より前に入力の検証を行う
データが不正なまま分析を続けると、もっともらしいグラフだけが出力され、後から誤りに気づきにくくなります。CSVの読み込み段階では、必須列、各行の状態、日時形式、順序、重複、終了時刻の少なくとも6点を確認します。
エラーを無視して勝手に時刻を補ったり、状態を変換したりしない方針なら、結果を説明するときも入力との対応が明確です。
具体的な6項目
必須列 timestamp/status があること、1行以上あること、状態が定義済みの3値に限られること、時刻にタイムゾーンが付くこと、時刻の昇順と重複なしを満たすこと、最後の区間の終了時刻が最終イベントより後であることです。
状態は大文字へ正規化する運用が可能ですが、誤字を別の意味として受け入れるのは避けます。
テストの作り方
正常なCSVで期待値を比較するだけでなく、不正なCSVが例外になることを確認します。ここで紹介する方針は、MacでテストしたPython製ダッシュボードの入力仕様に基づいています。
計算値は小数表記の丸めによって差が出る場合があるため、原値と表示値を分けて扱うことも大切です。
確認用メモ・例
if not events:
raise ValueError('CSV must contain at least one row')
if len({t for t, status in events}) != len(events):
raise ValueError('duplicate timestamps')一次資料
記事の説明と、個別環境で動作保証されることは異なります。実機の仕様・状態を確認して使ってください。