13

Click here to load reader

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

Embed Size (px)

Citation preview

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

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

Masashi Shibata

October 10 2015, PyCon JP 2015

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

@c_bata_明石高専 専攻科

akashi.py 主催

PyCon APAC/Taiwan 2015

BePROUD で Django

研究で pandas ← 今日はこれ

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

データ分析に対するイメージ

色々計算して結果が数値

問題の切り分けが困難

バグの存在に気がつきにくい

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

ユニットテスト

最低限、テストに記述された振舞いは満たすはず

ある程度、怪しい箇所の予測ができそう

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

それでもおかしい

テストケースに漏れがある?

デバッガを使ってみたけど原因は分からず

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

テストケースに漏れがある?

デバッガを使ってみたけど原因は分からず

それでもおかしい

対象データの一部に変な値が混ざってた

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

何故気づけなかったのか

フィクスチャデータと実データは違うユニットテストの限界

大量の入力ファイルデバッガの限界

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

pandas-validator

https://github.com/c-bata/pandas-validator

$ pip install pandas_validator

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

使い方

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()

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

使い方

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.

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

わかったこと

ユニットテストやデバッガでは検出が困難

DataFrame はイレギュラーな値を許容

データが正しいとは限らない

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

今後やりたいこと

DataFrame の構造を明示的に記述

Django のように Fixture データの生成など

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

Sprint!

with @sinhrks

pandas コードリーディングPR を送っていこう