Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データフレームのバリデーションを実現するためのpandera入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 データフレームのバリデーションを実現するためのpandera入門

Avatar for Daiki Katsuragawa

Daiki Katsuragawa

May 15, 2022
Tweet

More Decks by Daiki Katsuragawa

Other Decks in Programming

Transcript

  1. 課題②:他者・未来の自分がコードから内容を読み取れない 4 import pandas as pd from sklearn.datasets import load_iris

    data = load_iris() iris = pd.DataFrame(data.data, columns=data.feature_names) iris["target"] = data.target iris.head() irisにはどんな情報が 格納されている?
  2. 課題を解決する“pandera” • “pandera”とは ◦ データフレームのスキーマ(構造)を定義することで データフレームのバリデーションを実現するライブラリ • 課題①:意図しない値を格納してしまう ◦ バリデーションにより意図しない値の格納を防ぐ

    • 課題②:他者・未来の自分がコードから内容を読み取れない ◦ スキーマを明示的に記述することでコードから内容の読み取りが可能に ※大きく利用方法は2種あるが、今回は“Schema Models”を紹介 5 !pip install pandera
  3. panderaの利用例〜アヤメ(iris)のデータセットの準備〜 6 import pandas as pd from sklearn.datasets import load_iris

    data = load_iris() iris = pd.DataFrame(data.data, columns=data.feature_names) iris["target"] = data.target iris = iris.rename( columns={ "sepal length (cm)": "sepal_length", "sepal width (cm)": "sepal_width", "petal length (cm)": "petal_length", "petal width (cm)": "petal_width", } )
  4. import pandera as pa from pandera.typing import Series class IrisSchema(pa.SchemaModel):

    sepal_length: Series[float] = pa.Field(gt=0, le=8) sepal_width: Series[float] = pa.Field(gt=0, le=5) petal_length: Series[float] = pa.Field(gt=0, le=7) petal_width: Series[float] = pa.Field(gt=0, le=3) target: Series[int] = pa.Field(isin=[0, 1, 2]) class Config: name = "BaseSchema" strict = True coerce = True panderaの利用例〜スキーマの定義〜 9 0/1/2(カテゴリ) 現実的な値
  5. invalid_record = { "sepal_length": 5.8, "sepal_width": 3.0, "petal_length": 4.35, "petal_width":

    1.3, "target": 3, # invalid value } invalid_iris = iris.append(invalid_record, ignore_index=True) invalid_iris["target"] = invalid_iris["target"].astype(int) panderaの利用例〜意図しないレコードの追加〜 11
  6. panderaの利用例〜バリデーション(エラー)〜 13 invalid_iris = IrisSchema.validate(invalid_iris) --------------------------------------------------------------------------- SchemaError Traceback (most recent

    call last) (省略) SchemaError: <Schema Column(name=target, type=DataType(int64))> failed element-wise validator 0: <Check isin: isin({0, 1, 2})> failure cases: index failure_case 0 150 3 indexが150のレコードでエラー
  7. まとめ • データフレーム(pandas.DataFrame) ◦ 表形式のデータの取り込み、加工、集計、分析に利用 ◦ データ分析/機械学習などで活躍 ◦ 課題①:意図しない値を格納してしまう ◦

    課題②:他者・未来の自分がコードから内容を読み取れない • 課題を解決する“pandera” ◦ データフレームのスキーマ(構造)を定義することで データフレームのバリデーションを実現するライブラリ ◦ 課題①:バリデーションにより意図しない値の格納を防ぐ ◦ 課題②:スキーマを明示的に記述することでコードから内容の読み取りが可能に 14 参考記事:https://qiita.com/daikikatsuragawa/items/d0516db16f930c5e582f