pandas によるデータ加工時の
注意点やライブラリの話
Masashi Shibata
October 10 2015, PyCon JP 2015
@c_bata_
明石高専 専攻科
akashi.py 主催
PyCon APAC/Taiwan 2015
BePROUD で Django
研究で pandas ← 今日はこれ
データ分析に対するイメージ
色々計算して結果が数値
問題の切り分けが困難
バグの存在に気がつきにくい
ユニットテスト
最低限、テストに記述された振舞いは満たすはず
ある程度、怪しい箇所の予測ができそう
それでもおかしい
テストケースに漏れがある?
デバッガを使ってみたけど原因は分からず
テストケースに漏れがある?
デバッガを使ってみたけど原因は分からず
それでもおかしい
対象データの一部に変な値が混ざってた
何故気づけなかったのか
フィクスチャデータと実データは違う
ユニットテストの限界
大量の入力ファイル
デバッガの限界
pandas-validator
https://github.com/c-bata/pandas-validator
$ pip install pandas_validator
使い方
import pandas_validator as pv
class SampleDataFrameValidator(pv.DataFrameValidator):
row_num = 20
axis_x = pv.IntegerColumnValidator('axis_x', min_value=0, max_value=10)
axis_y = pv.IntegerColumnValidator('axis_y', min_value=0, max_value=10)
speed = pv.FloatColumnValidator('speed', min_value=0)
pressure = pv.FloatColumnValidator('pressure', min_value=0, max_value=1)
validator = SampleDataFrameValidator()
使い方
import pandas as pd
df = pd.DataFrame({
'axis_x': [6, 5, 6, 3, 4, ...],
'axis_y': [3, 2, 5, 1, 9, ...],
'speed': [3.2, 3.5, 3.3, 3.7, 3.2, ...],
'pressure': [0.2, 0.2, 0.1, 0.7, 0.6, ...]
})
validator.is_valid(df) # True.
わかったこと
ユニットテストやデバッガでは検出が困難
DataFrame はイレギュラーな値を許容
データが正しいとは限らない
今後やりたいこと
DataFrame の構造を明示的に記述
Django のように Fixture データの生成など
Sprint!
with @sinhrks
pandas コードリーディング
PR を送っていこう

pandasによるデータ加工時の注意点やライブラリの話