Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

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

image

リファレンス

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

uchim
発言は個人の意見であり、所属団体を代表するものではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away