{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# import required libs\n", "import glob\n", "import os\n", "\n", "import tensorflow as tf\n", "import tensorflow_data_validation as tfdv\n", "print('TF version: {}'.format(tf.version.VERSION))\n", "print('TFDV version: {}'.format(tfdv.version.__version__))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Read artifact information from metadata store.\n", "import beam_dag_runner\n", "\n", "from tfx.orchestration import metadata\n", "from tfx.types import standard_artifacts\n", "\n", "metadata_connection_config = metadata.sqlite_metadata_connection_config(\n", " beam_dag_runner.METADATA_PATH)\n", "with metadata.Metadata(metadata_connection_config) as store:\n", " stats_artifacts = store.get_artifacts_by_type(standard_artifacts.ExampleStatistics.TYPE_NAME)\n", " schema_artifacts = store.get_artifacts_by_type(standard_artifacts.Schema.TYPE_NAME)\n", " anomalies_artifacts = store.get_artifacts_by_type(standard_artifacts.ExampleAnomalies.TYPE_NAME)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# configure output paths\n", "# Exact paths to output artifacts can also be found on KFP Web UI if you are using kubeflow.\n", "stats_path = stats_artifacts[-1].uri\n", "train_stats_file = os.path.join(stats_path, 'train', 'stats_tfrecord')\n", "eval_stats_file = os.path.join(stats_path, 'eval', 'stats_tfrecord')\n", "print(\"Train stats file:{}, Eval stats file:{}\".format(\n", " train_stats_file, eval_stats_file))\n", "\n", "schema_file = os.path.join(schema_artifacts[-1].uri, 'schema.pbtxt')\n", "print(\"Generated schame file:{}\".format(schema_file))\n", "anomalies_file = os.path.join(anomalies_artifacts[-1].uri, 'anomalies.pbtxt')\n", "print(\"Generated anomalies file:{}\".format(anomalies_file))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# load generated statistics from StatisticsGen\n", "train_stats = tfdv.load_statistics(train_stats_file)\n", "eval_stats = tfdv.load_statistics(eval_stats_file)\n", "tfdv.visualize_statistics(lhs_statistics=eval_stats, rhs_statistics=train_stats,\n", " lhs_name='EVAL_DATASET', rhs_name='TRAIN_DATASET')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# load generated schema from SchemaGen\n", "schema = tfdv.load_schema_text(schema_file)\n", "tfdv.display_schema(schema=schema)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# load data vaildation result from ExampleValidator\n", "anomalies = tfdv.load_anomalies_text(anomalies_file)\n", "tfdv.display_anomalies(anomalies)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.4 64-bit", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" }, "pycharm": { "stem_cell": { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [] } }, "vscode": { "interpreter": { "hash": "4f946df053fbf2b937619d3c5458e7af74262f9a954d8797ba0b27400bcafe06" } } }, "nbformat": 4, "nbformat_minor": 2 }