pandasのvalidationライブラリを公開しました
はじめに
pandasのDataFrameはかなり便利ですが、その構造を明示的に定義できないので変な値が混ざってることに気づきにくいです。
研究で使ってるプログラムで変な値が混ざってないかチェックしたい所があったのですが、validatorについて調べてみても特に良さそうなライブラリとかは見つからなかったので、pandas-validator
を作りました。
使い方
インストール
$ pip install pandas-validator
Seriesのバリデーション
DataFrameだけでなくSeriesのvalidationも可能です。
import pandas_validator as pv validator = pv.IntegerSeriesValidator(min_value=0, max_value=10) # バリデーションを通る例 series = pd.Series([0, 3, 6, 9]) print(validator.is_valid(series)) # 12は大きいためこのseriesはバリデーションを通りません series = pd.Series([0, 4, 8, 12]) validator.is_valid(series) # 整数型ではないためこのseriesはバリデーションを通りません series = pd.Series([0.0, 3.3, 6.6, 9.9]) validator.is_valid(series)
実装しているvalidatorは以下の3種類です。
- pandas_validator.IntegerSeriesValidator
- pandas_validator.FloatSeriesValidator
- pandas_validator.CharSeriesValidator
DataFrameのバリデーション
これがしたくてこのライブラリを作りました! DataFrameの構造をDjangoのFormクラスのように定義できます。
import pandas_validator as pv class SampleDataFrameValidator(pv.DataFrameValidator): label1 = pv.IntegerColumnValidator('label1', min_value=0, max_value=10) label2 = pv.FloatColumnValidator('label2', min_value=0, max_value=10) label3 = pv.CharColumnValidator('label3', min_length=0, max_length=4) validator = SampleDataFrameValidator()
後はSeriesのValidatorと同じようにis_vaild
メソッドにチェックしたいDataFrameオブジェクトを渡せばOKです。
ipython notebookで動かしてる例は↓です。
pandas-validator/pandas_validator_example_ja.ipynb at master · c-bata/pandas-validator · GitHub
Categorical Data
ライブラリを公開したらid:sinhrks さんがTwitterで反応してくれました。
確かに、データとして入れる値や型を制限したいってのはユースケースとしてありますね。離散値ならcategoricalが使えますが、連続値はできない
http://t.co/AbZ5csfQ1A
— sinh(r•x) (@sinhrks) May 22, 2015
なるほどこの機能は初めて知りました。 ざっと読む限り、性別や血液型など、出てくる値の種類が決まっているデータに対して有効なものみたい。例えば血液型だったらA, B, AB, O型以外のS型のような値は混じってほしくない(バリデーションしておきたい)。
pandas-validator
にも Django
の ChoiceField
みたいにいくつかの選択肢から選ぶようなvalidatorを実装する予定だったのですが、それは不要かもですね。
今後の予定
Panelのバリデーションは僕が必要としてなかったので今のところ対応予定は無いです。Githubのissueに上がったら対応すると思います。
- Documentちゃんと書く
- DatetimeValidator とかも必要なら実装
終わりに
pandasを使ったプログラムのテストを書くときにcsvのfixtureを用意してたのですが、factory_boyみたいに動的にfixtureを生成できるものがほしいので作成しようと考え中です。
この pandas-validator
と同じ形式でDataFrameを定義してそれにあうデータを生成する形にしたいですね。
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
- 作者: Wes McKinney,小林儀匡,鈴木宏尚,瀬戸山雅人,滝口開資,野上大介
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/12/26
- メディア: 大型本
- この商品を含むブログ (8件) を見る