Click here to load reader
Upload
masashi-shibata
View
15.896
Download
0
Embed Size (px)
Citation preview
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 を送っていこう