言語 - データ検証パッケージ "validate"


はじめに

validate パッケージ を使うと、データ検証作業の効率を向上させることができます。たとえば、指定したルールに従って、ルールに合格したか、評価に失敗したか、などを検証できます。

データの構造をチェックする

▼サンプルスクリプト

R
# 環境情報
# R version 3.2.5 (2016-04-14)  -- Very, Very Secure Dishes 
# パッケージのインストール
install.packages( "magrittr" )
install.packages( "validate" )
install.packages( "yaml" )

# ライブラリの読み込み
library( magrittr )
library( validate )
library( yaml )

# データの構造をチェックする
iris %>% check_that(
  Sepal.Width > 0.5 * Sepal.Length                          # V1
  , mean( Sepal.Width ) > 0                                 # V2
  , sd( Sepal.Width ) < 0                                   # V3
  , if ( Sepal.Width > 0.5*Sepal.Length ) Sepal.Length > 10 # V4
) %>% summary()

上記のサンプルスクリプトでは、summary() によって、check_that()の実行結果を表示しています。たとえば、ルール名「V2」では、Sepal.Width列全体の平均値が0よりい大きいことを検証しています。passes = "1",fails = "0" であることから、ルールに合格している事が分かります。

▼実行結果例

実行結果例
# check_thatの実行結果
  rule items passes fails nNA error warning                                              expression
1   V1   150     66    84   0 FALSE   FALSE                        Sepal.Width > 0.5 * Sepal.Length
2   V2     1      1     0   0 FALSE   FALSE                                   mean(Sepal.Width) > 0
3   V3     1      0     1   0 FALSE   FALSE                                     sd(Sepal.Width) < 0
4   V4   150     84    66   0 FALSE   FALSE !(Sepal.Width > 0.5 * Sepal.Length) | Sepal.Length > 10

データ検証ルールの定義

validator()は、オブジェクトに対するデータ検証ルールを定義できます。定義したオブジェクトは、バリデータオブジェクトと呼ばれ、データ検証ルールとして再利用できます。
▼サンプルスクリプト

R
v <-  validator(
  ratio = Sepal.Width > 0.5 * Sepal.Length
  , mean = mean( Sepal.Width ) > 0
  , sd = sd( Sepal.Width ) < 0
  , cnd = if ( Sepal.Width > 0.5*Sepal.Length ) Sepal.Length > 10
  )

▼実行結果例

実行結果例
v
# v(バリデータオブジェクト)の中身の確認
Object of class 'validator' with 4 elements:
 ratio: Sepal.Width > 0.5 * Sepal.Length
 mean : mean(Sepal.Width) > 0
 sd   : sd(Sepal.Width) < 0
 cnd  : !(Sepal.Width > 0.5 * Sepal.Length) | Sepal.Length > 10

次のサンプルスクリプトでは、このバリデータオブジェクトを使ってirisデータセットをconfront()で検証しています。
▼サンプルスクリプト

R
cf <- confront(iris, v)

▼実行結果例

実行結果例
cf
# cf(検証結果)の中身の確認
Object of class 'validation'
Call:
    confront(x = iris, dat = v)

Confrontations: 4
With fails    : 3
Warnings      : 0
Errors        : 0
# cf(検証結果)を棒グラフにして可視化します。
barplot( cf, main="iris" )

リファレンス

https://cran.r-project.org/web/packages/validate/vignettes/intro.html
https://cran.r-project.org/web/packages/validate/vignettes/rule-files.html