2025年のデータバリデーション環境(Landscape)
(aeturrell.com)- 現時点(2025年)の主要なデータバリデーションツールの説明と状況別の推奨
- **データバリデーション(妥当性検証)**は、データの品質を自動または半自動で確認するプロセス
- データ型の確認、欠損値の数の確認、異常値の検出
- データフレームの行だけでなく、API入力値やフォーム送信値も検証可能
- ユーザーは、特定の列の値が特定の範囲内になければならない、といったルールを設定可能
- 検証失敗時: エラー発生、検証レポート作成後に手動または自動で処理可能
なぜデータバリデーションが重要なのか
- 公共機関の分析作業は次の2つに分かれる:
- アドホック分析 – 単発の分析作業
- 定期統計の作成 – 定期的に新しいデータを収集・処理
- データエラーが分析結果に影響する前に検証が必要
- データバリデーションは、エラーのリスクを減らし精度を高めるのに効果的
主要なデータバリデーションツール
1. Great Expectations
-
本番運用レベルの強力なデータバリデーションツール
-
オープンソースパッケージがあり、有料クラウドサービスも提供
-
高度な機能を提供:
- 検証失敗時にSlackメッセージを送るなどの自動化が可能
-
設定が複雑で、データサイエンスのスキルが必要になることが多い
-
サンプルコード:
import great_expectations as gx import pandas as pd context = gx.get_context() df = pd.read_csv("https://raw.githubusercontent.com/great-expectations/gx_tutorials/…;) data_source = context.data_sources.add_pandas("pandas") data_asset = data_source.add_dataframe_asset(name="pd dataframe asset") batch_definition = data_asset.add_batch_definition_whole_dataframe("batch definition") batch = batch_definition.get_batch(batch_parameters={"dataframe": df}) # 値が1〜6の範囲内かを検証 expectation = gx.expectations.ExpectColumnValuesToBeBetween(column="passenger_count", min_value=1, max_value=6) validation_result = batch.validate(expectation)検証失敗時のSlack通知設定例:
from gx.actions import SlackNotificationAction, UpdateDataDocsAction action_list = [ SlackNotificationAction( name="send_slack_notification_on_failed_expectations", slack_token="${validation_notification_slack_webhook}", slack_channel="${validation_notification_slack_channel}", notify_on="failure", show_failed_expectations=True, ), UpdateDataDocsAction(name="update_all_data_docs"), ]
2. Pointblank
- 2024年にリリースされた最新のPythonデータバリデーションツール(RStudio → Positが開発)
- Great Expectationsの影響を受けており、直感的な文法を提供
- Polars、Pandas、DuckDBなど多様なデータソースをサポート
- サンプルコード:
import pointblank as pb validation = ( pb.Validate(data=pb.load_dataset(dataset="small_table")) .col_vals_gt(columns="d", value=100) .col_vals_le(columns="c", value=5) .col_exists(columns=["date", "date_time"]) .interrogate() ) - 後続処理の自動化機能が不足 → 後続作業は手動で処理する必要がある
3. Pandera
-
Great Expectationsに似たAPIを提供
-
統計的仮説検定機能をサポート
-
Polars、Geopandas、Pysparkなど多様なデータソースをサポート
-
サンプルコード:
import pandas as pd import pandera as pa df = pd.DataFrame({ "column1": [1, 4, 0, 10, 9], "column2": [-1.3, -1.4, -2.9, -10.1, -20.4], "column3": ["value_1", "value_2", "value_3", "value_2", "value_1"], }) schema = pa.DataFrameSchema({ "column1": pa.Column(int, checks=pa.Check.le(10)), "column2": pa.Column(float, checks=pa.Check.lt(-1.2)), "column3": pa.Column(str, checks=[ pa.Check.str_startswith("value_"), pa.Check(lambda s: s.str.split("_", expand=True).shape[1] == 2) ]), }) validated_df = schema(df) -
統計的仮説検定の例:
from scipy import stats schema = pa.DataFrameSchema({ "height_in_feet": pa.Column(float, [ pa.Hypothesis.two_sample_ttest( sample1="M", sample2="F", groupby="sex", relationship="greater_than", alpha=0.05, equal_var=True ) ]), "sex": pa.Column(str) }) schema.validate(df)
4. Pydantic
- データフレームではなく辞書ベースの検証ツール
- JSONおよび非構造化データの検証に適している
- FastAPIのようなAPIフレームワークと統合可能
- サンプルコード:
from pydantic import BaseModel, PositiveInt from datetime import datetime class User(BaseModel): id: int name: str = 'John Doe' signup_ts: datetime | None tastes: dict[str, PositiveInt] external_data = { 'id': 123, 'signup_ts': '2019-06-01 12:22', 'tastes': {'wine': 9, 'cheese': 7, 'cabbage': '1'} } user = User(**external_data)
5. Cerberus
- 辞書ベースの検証ツール
- シンプルなルールベース設定
- True/False値を返す → エラーを投げない
- サンプルコード:
from cerberus import Validator schema = {'name': {'type': 'string'}} v = Validator(schema) document = {'name': 'john doe'} v.validate(document) # True
6. jsonschema
- JSONデータ検証ツール
- スキーマベースの定義
- サンプルコード:
from jsonschema import validate schema = { "type": "object", "properties": { "price": {"type": "number"}, "name": {"type": "string"} } } validate(instance={"name": "Eggs", "price": 34.99}, schema=schema)
公共部門ではどのツールを使うべきか
- データフレームまたはデータベースの検証:
- 本番システムで使用 → Great Expectationsを推奨
- シンプルな検証 → Panderaを推奨
- 最新ツールを試したい → Pointblankを推奨
- APIやユーザー入力の検証:
- 非構造化データ → Pydanticを推奨
- シンプルなJSON検証:
- jsonschemaを推奨
- 簡単な検証が必要なら:
- Cerberusを推奨
まだコメントはありません。