Piperider - 協助資料清理以及驗證

Piperider是一個由專門開發MLOps平台的團隊所推出的python套件,能夠協助分析資料以及追蹤資料格式是否符合預期

Install

預設安裝的套件僅支援Sqlite

pip install piperider

如果要用不同的DB連線話,則需要針對DB去安裝不同版本的套件,目前也有支援不使用DB僅用CSV的使用方式

pip install 'piperider[postgres]'
pip install 'piperider[csv]'

Setup

Initial Project

需要先初始話專案並做一些設定

piperider init

跑完初始化後產生.piperider/config.yml的設定檔,再來可以去驗證有沒有成功連線到db

piperider diagnose

如果connector是csv且有找到對應檔案的話會出現類似底下的執行結果

Check connections:
  Name: titanic
  Type: csv
  connector: [OK]
  Available Tables: ['titanic_train']
  Connection: [OK]
✅ PASS

Check assertion files:
✅ PASS

Feature

Data Profile

透過piperider run可以一次把data source內的檔案都進行簡易的EDA並視覺化,如果只想要跑限定的table可以加上參數--table $TABLENAME,再來可以將profile完的結果以html的形式輸出

Assertion

第一次跑完profile後就會產生相關data的assertion,產生的yaml檔會放在.piperider\assertions下,assertion能夠讓我們知道目前資料中的各種限制

─────────────────────────────────────────────────── Assertion Results ────────────────────────────────────────────────────
                                                                                                          
  Status     Test Subject                Assertion                   Expected           Actual           
 ────────────────────────────────────────────────────────────────────────────────────────────────────────
  [  OK  ]   titanic_train               row count                   ≥ 801              891
  [  OK  ]   titanic_train.PassengerId   assert_column_schema_type   INTEGER            INTEGER
  [  OK  ]   titanic_train.PassengerId   assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Survived      assert_column_schema_type   INTEGER            INTEGER
  [  OK  ]   titanic_train.Survived      assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Pclass        assert_column_schema_type   INTEGER            INTEGER
  [  OK  ]   titanic_train.Pclass        assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Name          assert_column_schema_type   VARCHAR            VARCHAR
  [  OK  ]   titanic_train.Name          assert_column_unique        -                  -
  [  OK  ]   titanic_train.Name          assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Sex           assert_column_schema_type   VARCHAR            VARCHAR
  [  OK  ]   titanic_train.Sex           assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Age           assert_column_schema_type   DOUBLE_PRECISION   DOUBLE_PRECISION
  [  OK  ]   titanic_train.SibSp         assert_column_schema_type   INTEGER            INTEGER
  [  OK  ]   titanic_train.SibSp         assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Parch         assert_column_schema_type   INTEGER            INTEGER
  [  OK  ]   titanic_train.Parch         assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Ticket        assert_column_schema_type   VARCHAR            VARCHAR
  [  OK  ]   titanic_train.Ticket        assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Fare          assert_column_schema_type   DOUBLE_PRECISION   DOUBLE_PRECISION
  [  OK  ]   titanic_train.Fare          assert_column_not_null      -                  -
  [  OK  ]   titanic_train.Fare          assert_column_value         ≤ 563.5621         [0.0, 512.3292]
  [  OK  ]   titanic_train.Cabin         assert_column_schema_type   VARCHAR            VARCHAR
  [  OK  ]   titanic_train.Embarked      assert_column_schema_type   VARCHAR            VARCHAR

想要再次自動產生assertion的話可以用piperider generate-assertions,也可以透過修改yaml檔的方式去驗證每次進來的資料都有和一開始訂的資料格式一致

Compare Data

如果有不同版本的資料之分,可以在新的資料進來後重新跑一次profile,而在有了至少兩份profile檔後就可以進行對比

piperider compare-reports --last

方便去檢視不同版本資料間的分布差異

FAQ

Q1. WinError 1314

如果在執行指令的時候有遇到這個問題就得開新的terminal並以系統管理員的權限去重新執行指令,因為部分指令會有使用到symbolic link的需求

Reference

GitHub - InfuseAI/piperider: Data Reliability Automated