序章
このチュートリアルでは、Pythonで記述されたオープンソースのデータ検証およびドキュメントライブラリである GreatExpectationsのローカル展開をセットアップします。 データ検証は、パイプラインで処理するデータが正しく、誤った入力や変換のバグなどのエラーが原因で発生する可能性のあるデータ品質の問題がないことを確認するために重要です。 Great Expectationsを使用すると、 Expectations と呼ばれるデータに関するアサーションを確立し、それらのExpectationsを使用してデータを検証できます。
終了したら、Great Expectationsをデータに接続し、一連のExpectationsを作成し、それらのExpectationsを使用してデータのバッチを検証し、検証結果を含むデータ品質レポートを生成できるようになります。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- Python3.6以降のローカル開発環境。 このシリーズのオペレーティングシステムのチュートリアルに従うことができます: Python3のローカルプログラミング環境をインストールおよびセットアップする方法。 ブラウザへの接続に関する問題を回避するために、ローカルプログラミング環境を使用することをお勧めします。
- Pythonにある程度精通している。 詳細については、 PythoneBookでのコーディング方法をご覧ください。
- Jupyterノートブックにある程度精通していること。
- Gitの動作中のインストール。
- FirefoxやChromeなどのWebブラウザ。
ステップ1—大きな期待をインストールして大きな期待プロジェクトを初期化する
このステップでは、ローカルのPython環境にGreat Expectationsパッケージをインストールし、このチュートリアルで使用するサンプルデータをダウンロードして、GreatExpectationsプロジェクトを初期化します。
まず、ターミナルを開き、仮想Python環境をアクティブ化してください。 次のコマンドを使用して、Great Expectations Pythonパッケージとコマンドラインツール(CLI)をインストールします。
- pip install great_expectations==0.13.35
注:このチュートリアルは、Great Expectationsバージョン0.13.35用に開発されたものであり、他のバージョンには適用できない場合があります。
サンプルデータリポジトリにアクセスするには、次のgitコマンドを実行してディレクトリのクローンを作成し、作業ディレクトリとしてそのディレクトリに変更します。
- git clone https://github.com/do-community/great_expectations_tutorial
- cd great_expectations_tutorial
リポジトリには、というフォルダが1つだけ含まれています data
、このチュートリアルで使用するデータを含む2つのサンプルCSVファイルが含まれています。 の内容を見てください data
ディレクトリ:
- ls data
次の出力が表示されます。
Outputyellow_tripdata_sample_2019-01.csv yellow_tripdata_sample_2019-02.csv
Great Expectationsは、リレーショナルデータベース、Sparkデータフレーム、さまざまなファイル形式への接続など、さまざまな種類のデータで機能します。 このチュートリアルでは、タクシーの乗車データの小さなセットを含むこれらのCSVファイルを使用して開始します。
最後に、次のコマンドを実行して、ディレクトリをGreatExpectationsプロジェクトとして初期化します。 必ず使用してください --v3-api
フラグ。これにより、パッケージの最新のAPIを使用するように切り替わります。
- great_expectations --v3-api init
尋ねられたら OK to proceed? [Y/n]:
、 押す ENTER
続行します。
これにより、というフォルダが作成されます great_expectations
、 Data Context とも呼ばれる、GreatExpectationsプロジェクトの基本構成が含まれています。 フォルダの内容を調べることができます:
- ls great_expectations
内部で作成されたファイルとサブディレクトリの最初のレベルが表示されます great_expectations
フォルダ:
Outputcheckpoints great_expectations.yml plugins
expectations notebooks uncommitted
フォルダには、大いなる期待の設定に関連するすべてのコンテンツが保存されます。 The great_expectations.yml
ファイルには、すべての重要な構成情報が含まれています。 チュートリアルの次のステップに進む前に、フォルダーと構成ファイルをもう少し詳しく調べてください。
次のステップでは、データソースを追加して、データに大きな期待を向けます。
ステップ2—データソースを追加する
このステップでは、大きな期待でデータソースを構成します。これにより、 Expectations と呼ばれるデータアサーションを自動的に作成し、ツールを使用してデータを検証できます。
プロジェクトディレクトリにいる間に、次のコマンドを実行します。
- great_expectations --v3-api datasource new
次の出力が表示されます。 のファイルベースのデータソースを構成するように求められたときに表示されるオプションを入力します data
ディレクトリ:
OutputWhat data would you like Great Expectations to connect to?
1. Files on a filesystem (for processing with Pandas or Spark)
2. Relational database (SQL)
: 1
What are you processing your files with?
1. Pandas
2. PySpark
: 1
Enter the path of the root directory where the data files are stored. If files are on local disk enter a path relative to your current working directory or an absolute path.
: data
でディレクトリパスを確認した後 ENTER
、Great Expectationsは、Webブラウザで Jupyterノートブックを開きます。これにより、データソースの構成を完了し、データコンテキストに保存できます。 次のスクリーンショットは、ノートブックの最初のいくつかのセルを示しています。
ノートブックには、データソースを構成するためのPythonコードの事前入力されたセルがいくつか含まれています。 必要に応じて、名前などのデータソースの設定を変更できます。 ただし、このチュートリアルでは、すべてをそのままにして、を使用してすべてのセルを実行します。 Cell > Run All
メニューオプション。 正常に実行されると、最後のセル出力は次のようになります。
Output[{'data_connectors': {'default_inferred_data_connector_name': {'module_name': 'great_expectations.datasource.data_connector',
'base_directory': '../data',
'class_name': 'InferredAssetFilesystemDataConnector',
'default_regex': {'group_names': ['data_asset_name'], 'pattern': '(.*)'}},
'default_runtime_data_connector_name': {'module_name': 'great_expectations.datasource.data_connector',
'class_name': 'RuntimeDataConnector',
'batch_identifiers': ['default_identifier_name']}},
'module_name': 'great_expectations.datasource',
'class_name': 'Datasource',
'execution_engine': {'module_name': 'great_expectations.execution_engine',
'class_name': 'PandasExecutionEngine'},
'name': 'my_datasource'}]
これは、という新しいデータソースを追加したことを示しています my_datasource
データコンテキストに。 次の手順に進む前に、ノートブックの説明を読んで、さまざまな構成オプションの詳細を確認してください。
警告:先に進む前に、ノートブックでブラウザタブを閉じ、端末に戻って、を押します。 CTRL+C
続行する前に、実行中のノートブックサーバーをシャットダウンします。
これで、を指すデータソースが正常に設定されました。 data
ディレクトリ。これにより、大きな期待を介してディレクトリ内のCSVファイルにアクセスできるようになります。 次のステップでは、データソースでこれらのCSVファイルの1つを使用して、プロファイラーで期待値を自動的に生成します。
ステップ3—自動プロファイラーを使用してExpectationSuiteを作成する
チュートリアルのこのステップでは、組み込みのプロファイラーを使用して、いくつかの既存のデータに基づいて一連の期待値を作成します。 この目的のために、ダウンロードしたサンプルデータを詳しく見てみましょう。
- ファイル
yellow_tripdata_sample_2019-01.csv
とyellow_tripdata_sample_2019-02.csv
2019年1月と2月のタクシー乗車データがそれぞれ含まれています。 - このチュートリアルでは、1月のデータが正しいことを知っており、後続のデータファイルが数または行、列、および特定の列値の分布に関して1月のデータと一致することを確認する必要があることを前提としています。
この目的のために、1月のデータの特定のプロパティに基づいて期待値(データアサーション)を作成し、後のステップでそれらの期待値を使用して2月のデータを検証します。 一緒にグループ化された一連のExpectationsであるExpectationSuiteを作成することから始めましょう。
- great_expectations --v3-api suite new
以下の出力に示されているオプションを選択することにより、プロファイラーを使用して期待値を自動的に生成することを指定します。 yellow_tripdata_sample_2019-01.csv
入力としてのデータファイル。 名前を入力してください my_suite
プロンプトが表示されたらExpectationSuite名として、を押します ENTER
尋ねられたときに最後に Would you like to proceed? [Y/n]
:
OutputUsing v3 (Batch Request) API
How would you like to create your Expectation Suite?
1. Manually, without interacting with a sample batch of data (default)
2. Interactively, with a sample batch of data
3. Automatically, using a profiler
: 3
A batch of data is required to edit the suite - let's help you to specify it.
Which data asset (accessible by data connector "my_datasource_example_data_connector") would you like to use?
1. yellow_tripdata_sample_2019-01.csv
2. yellow_tripdata_sample_2019-02.csv
: 1
Name the new Expectation Suite [yellow_tripdata_sample_2019-01.csv.warning]: my_suite
When you run this notebook, Great Expectations will store these expectations in a new Expectation Suite "my_suite" here:
<path_to_project>/great_expectations_tutorial/great_expectations/expectations/my_suite.json
Would you like to proceed? [Y/n]: <press ENTER>
これにより、ExpectationSuiteの構成を完了することができる別のJupyterノートブックが開きます。 ノートブックには、組み込みのプロファイラーを構成するためのかなりの量のコードが含まれています。プロファイラーは、選択したCSVファイルを確認し、データで検出された内容に基づいて、ファイルの各列に特定のタイプの期待値を作成します。
ノートブックの2番目のコードセルまでスクロールダウンします。このセルには、次のリストが含まれています。 ignored_columns
. デフォルトでは、プロファイラーはすべての列を無視するので、プロファイラーがそれらの期待値を作成することを確認するために、それらのいくつかをコメントアウトしましょう。 次のようにコードを変更します。
ignored_columns = [
# "vendor_id"
# , "pickup_datetime"
# , "dropoff_datetime"
# , "passenger_count"
"trip_distance"
, "rate_code_id"
, "store_and_fwd_flag"
, "pickup_location_id"
, "dropoff_location_id"
, "payment_type"
, "fare_amount"
, "extra"
, "mta_tax"
, "tip_amount"
, "tolls_amount"
, "improvement_surcharge"
, "total_amount"
, "congestion_surcharge"
,]
必ず前にカンマを削除してください "trip_distance"
. 列をコメントアウトすることによって vendor_id
, pickup_datetime
, dropoff_datetime
、 と passenger_count
、これらの列の期待値を生成するようにプロファイラーに指示しています。 さらに、プロファイラーは、データ内の列の数と名前、行の数など、テーブルレベルの期待値も生成します。 もう一度、ノートブックのすべてのセルを使用して実行します Cell > Run All
メニューオプション。
このノートブックのすべてのセルを実行すると、次の2つのことが起こります。
- このコードは、自動プロファイラーと
yellow_tripdata_sample_2019-01.csv
使用するように指示したファイル。 - ノートブックの最後のセルも、検証を実行し、データ品質レポートである DataDocsを使用して新しいブラウザーウィンドウを開くように構成されています。
次のステップでは、新しいブラウザウィンドウで開いたデータドキュメントを詳しく見ていきます。
ステップ4—データドキュメントの調査
チュートリアルのこのステップでは、大きな期待が生成したデータドキュメントを調べ、さまざまな情報を解釈する方法を学習します。 開いたばかりのブラウザウィンドウに移動し、下のスクリーンショットに示されているページを確認します。
ページの上部に、概要というタイトルのボックスが表示されます。このボックスには、新しく作成したExpectationSuiteを使用して実行した検証に関する情報が含まれています。 my_suite
. それはあなたに教えてくれます Status: Succeeded
実行された期待値の数に関するいくつかの基本的な統計を示します。 さらに下にスクロールすると、テーブルレベルの期待値というタイトルのセクションが表示されます。 これには、2行の期待値が含まれ、各行のステータス、期待値、および観測値が表示されます。 [期待値]の表の下に、ノートブックでコメントアウトした各列の列レベルの期待値が表示されます。
1つの特定の期待に焦点を当てましょう: passenger_count
列には、「値はこのセットに属している必要があります。 1 2 3 4 5 6
。」 これは緑色のチェックマークでマークされており、観測値は「0% unexpected」です。 これは、プロファイラーが passenger_count
1月のCSVファイルの列で、1から6の値のみが検出されました。これは、すべてのタクシーの乗客が1から6人であることを意味します。 その後、大きな期待がこの事実への期待を生み出しました。 次に、ノートブックの最後のセルが1月のCSVファイルの検証をトリガーし、予期しない値は検出されませんでした。 期待値を作成するために使用されたのと同じデータが検証に使用されたデータでもあったため、これは不思議なことに真実です。
このステップでは、データドキュメントを確認し、 passenger_count
その期待のための列。 次のステップでは、データの別のバッチを検証する方法を確認します。
ステップ5—チェックポイントの作成と検証の実行
このチュートリアルの最後のステップでは、Expectation Suiteとデータのバッチをバンドルして、そのデータの検証を実行する新しいチェックポイントを作成します。 チェックポイントを作成したら、それを実行して2月のタクシーデータCSVファイルを検証し、ファイルが以前に作成した期待値に合格したかどうかを確認します。 開始するには、ターミナルに戻り、を押してJupyterノートブックを停止します CTRL+C
まだ実行中の場合。 次のコマンドは、ワークフローを開始して、という新しいチェックポイントを作成します。 my_checkpoint
:
- great_expectations --v3-api checkpoint new my_checkpoint
これにより、チェックポイントを構成するための事前入力されたコードを含むJupyterノートブックが開きます。 ノートブックの2番目のコードセルにはランダムがあります data_asset_name
既存のデータソースから事前入力されています。これは、 data
以前に見たディレクトリ。 を確認してください data_asset_name
は yellow_tripdata_sample_2019-02.csv
正しいファイル名を使用する必要がある場合は、コードを変更します。
my_checkpoint_name = "my_checkpoint" # This was populated from your CLI command.
yaml_config = f"""
name: {my_checkpoint_name}
config_version: 1.0
class_name: SimpleCheckpoint
run_name_template: "%Y%m%d-%H%M%S-my-run-name-template"
validations:
- batch_request:
datasource_name: my_datasource
data_connector_name: default_inferred_data_connector_name
data_asset_name: yellow_tripdata_sample_2019-02.csv
data_connector_query:
index: -1
expectation_suite_name: my_suite
"""
print(yaml_config)
"""
この構成スニペットは、データアセットを読み取る新しいチェックポイントを構成します yellow_tripdata_sample_2019-02.csv
つまり、2月のCSVファイルであり、ExpectationSuiteを使用して検証します my_suite
. コードを正しく変更したことを確認してから、ノートブックのすべてのセルを実行します。 これにより、新しいチェックポイントがデータコンテキストに保存されます。
最後に、この新しいチェックポイントを実行して2月のデータを検証するには、ノートブックの最後のセルまでスクロールダウンします。 セル内のコードのコメントを解除して、次のようにします。
context.run_checkpoint(checkpoint_name=my_checkpoint_name)
context.open_data_docs()
セルを選択し、を使用して実行します Cell > Run Cells
メニューオプションまたは SHIFT+ENTER
キーボードショートカット。 これにより、新しいブラウザタブでデータドキュメントが開きます。
[検証結果の概要]ページで、一番上の実行をクリックして、[検証結果の詳細]ページに移動します。 検証結果の詳細ページは、前の手順で表示したページと非常によく似ていますが、Expectation Suiteが失敗し、新しいCSVファイルを検証していることが示されます。 ページをスクロールして、どの期待値の横に赤いXが付いているかを確認し、失敗としてマークします。
で期待を見つける passenger_count
前の手順で確認した列:「値はこのセットに属している必要があります: 1 2 3 4 5 6
」。 失敗したものとして表示され、それが強調表示されていることに気付くでしょう。 1579 unexpected values found. ≈15.79% of 10000 total rows
. この行には、列で見つかった予期しない値のサンプル、つまり値も表示されます。 0
. これは、2月のタクシー乗車データが突然予期しない値を導入したことを意味します 0
のように passenger_counts
列。これは潜在的なデータバグのようです。 チェックポイントを実行することにより、Expectation Suiteで新しいデータを検証し、この問題を検出しました。
実行するたびに run_checkpoint
最後のノートブックセルのメソッドで、別の検証実行を開始します。 本番データパイプライン環境では、 run_checkpoint
新しいデータのバッチを処理しているときはいつでもノートブックの外でコマンドを実行して、新しいデータがすべての検証に合格するようにします。
結論
この記事では、データ検証のためのGreatExpectationsフレームワークの最初のローカル展開を作成しました。 Great Expectationsデータコンテキストを初期化し、新しいファイルベースのデータソースを作成し、組み込みのプロファイラーを使用してExpectationSuiteを自動的に生成しました。 次に、データの新しいバッチに対して検証を実行するためのチェックポイントを作成し、データドキュメントを検査して検証結果を表示しました。
このチュートリアルでは、大きな期待の基本のみを説明しました。 このパッケージには、リレーショナルデータベースなどの他のタイプのデータに接続するようにデータソースを構成するためのオプションがさらに含まれています。 また、テーブル名またはファイル名のパターンマッチングに基づいてデータの新しいバッチを自動的に認識する強力なメカニズムが付属しているため、チェックポイントを1回だけ構成して、将来のデータ入力を検証できます。 Great Expectationsの詳細については、公式ドキュメントをご覧ください。