CSV 데이터 검증하기(Validation)
게시일 : 2019년 04월 04일
# Validation
# Python
# Vladiate
CSV 데이터의 accuracy와 quality를 보장하기 위해 검증하는 방법을 알아본다.
CSV 파일을 처리(분석)할 때 accuracy와 quality를 보장하기 위해 타입, NULL value 유무, 중복 유무, 이상치 등을 확인해야 한다.
간단한 용도로서 python에서 vladiate라는 라이브러리를 활용할 수 있다.
vladiate 기본 소개
로컬, S3, StringIO에서 데이터를 읽을 수 있는 함수를 기본으로 제공한다.
다양한 용도로 활용할 수 있는 Validator가 존재한다.
Validator | 용도 |
---|---|
UniqueValidator | 중복되는 데이터 확인 |
SetValidator | Set에 속해있는 지 확인 |
RangeValidator | 범위에 속해있는 지 확인 |
NotEmptyValidator | Null Value가 있는 지 확인 |
IntValidator | Int 타입인 지 확인 |
RegexValidator | 정규식으로 확인 |
… | … |
Reference에 있는 github에서 모든 정보를 확인할 수 있다.
CLI를 활용하는 법
Kaggle의 titanic 데이터의 일부를 활용하여 작성해보았다. 이 데이터는 Null value 등 오류데이터를 포함하고 있다.
먼저, Validator 클래스를 포함한 .py파일을 만들어 놓으면 된다. (default 파일명은 vladfile.py)
# default
from vladiate import Vlad
from vladiate.validators import UniqueValidator, SetValidator,
NotEmptyValidator, IntValidator, Ignore
from vladiate.inputs import LocalFile
class TitanicValidator(Vlad): # 클래스명은 상관없음
#Load Data
source = LocalFile('titanic_train.csv')
# validators는 모든 컬럼에 대해 값이 있어야 한다.
# 한 컬럼에 여러 개의 validator를 동시에 적용할 수 있다.
validators = {
'PassengerId': [
NotEmptyValidator(), UniqueValidator()
],
'Survived': [
NotEmptyValidator(), SetValidator(['0', '1'])
],
'Name':[Ignore()], # Ignore은 이 컬럼은 무시한다는 뜻
'Sex':[
NotEmptyValidator(), SetValidator(['male', 'female'])
],
'Age':[
NotEmptyValidator(), IntValidator()
]
}
# delimiter=',' : default 값 / 다른 문자로 변경 가능
CLI에서 실행한 결과는 다음과 같다.
$ vladiate -l
Available vlads: # 내가 작성한 클래스명 확인 가능
TitanicValidator
$ vladiate
# vladiate -f vladfile.py : 특정 파일명 지정
Validating TitanicValidator(source=LocalFile('titanic_train.csv'))
Failed :(
NotEmptyValidator failed 177 time(s) (19.9%) on field: 'Age'
IntValidator failed 202 time(s) (22.7%) on field: 'Age'
Invalid fields: ['', '34.5', '40.5', '36.5', '20.5', ... ]
# 오류가 없으면 Passed! :) 라는 문구가 나온다.
직접 함수로 실행하는 방법
from vladiate import Vlad
from vladiate.validators import UniqueValidator, SetValidator
from vladiate.inputs import LocalFile
source = LocalFile('test.csv')
validators = {
'Column A': [
UniqueValidator()
],
'Column B': [
UniqueValidator(), SetValidator(['A', 'B'])
]
}
# Vlad는 클래스이다.
Vlad(source=source, validators=validators).validate()
References
: