datadoc-cli 0.2.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datadoc_cli-0.2.0 → datadoc_cli-0.4.0}/.gitignore +2 -0
- datadoc_cli-0.4.0/FULL_DOCUMENTATION.md +216 -0
- {datadoc_cli-0.2.0 → datadoc_cli-0.4.0}/LICENSE +1 -1
- datadoc_cli-0.4.0/MIGRATION.md +16 -0
- datadoc_cli-0.4.0/PKG-INFO +217 -0
- datadoc_cli-0.4.0/PROJECT_IMPLEMENTATION_GUIDE.md +546 -0
- datadoc_cli-0.4.0/README.md +174 -0
- datadoc_cli-0.4.0/datadoc/__init__.py +3 -0
- {datadoc_cli-0.2.0 → datadoc_cli-0.4.0}/datadoc/cli/app.py +945 -819
- datadoc_cli-0.4.0/datadoc/cli/ui_server.py +297 -0
- datadoc_cli-0.4.0/datadoc/core/__init__.py +25 -0
- datadoc_cli-0.4.0/datadoc/core/agent.py +103 -0
- datadoc_cli-0.4.0/datadoc/core/engine.py +336 -0
- datadoc_cli-0.4.0/datadoc/core/pipeline.py +873 -0
- {datadoc_cli-0.2.0 → datadoc_cli-0.4.0}/datadoc/plugins/base.py +15 -21
- {datadoc_cli-0.2.0 → datadoc_cli-0.4.0}/datadoc/plugins/datetime_feat.py +59 -26
- datadoc_cli-0.4.0/datadoc/plugins/encoders.py +99 -0
- {datadoc_cli-0.2.0 → datadoc_cli-0.4.0}/datadoc/plugins/missing_values.py +4 -8
- {datadoc_cli-0.2.0 → datadoc_cli-0.4.0}/datadoc/plugins/outliers.py +35 -29
- datadoc_cli-0.4.0/datadoc/plugins/scaling.py +116 -0
- {datadoc_cli-0.2.0 → datadoc_cli-0.4.0}/pyproject.toml +28 -6
- datadoc_cli-0.4.0/web/README.md +23 -0
- datadoc_cli-0.4.0/web/node_modules/@babel/runtime/LICENSE +22 -0
- datadoc_cli-0.4.0/web/node_modules/@babel/runtime/README.md +19 -0
- datadoc_cli-0.4.0/web/node_modules/@emnapi/core/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@emnapi/core/README.md +1 -0
- datadoc_cli-0.4.0/web/node_modules/@emnapi/runtime/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@emnapi/runtime/README.md +1 -0
- datadoc_cli-0.4.0/web/node_modules/@emnapi/wasi-threads/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@emnapi/wasi-threads/README.md +203 -0
- datadoc_cli-0.4.0/web/node_modules/@hello-pangea/dnd/LICENSE +15 -0
- datadoc_cli-0.4.0/web/node_modules/@hello-pangea/dnd/README.md +172 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/gen-mapping/LICENSE +19 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/gen-mapping/README.md +227 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/remapping/LICENSE +19 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/remapping/README.md +218 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/resolve-uri/LICENSE +19 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/resolve-uri/README.md +40 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/sourcemap-codec/LICENSE +19 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/sourcemap-codec/README.md +264 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/trace-mapping/LICENSE +19 -0
- datadoc_cli-0.4.0/web/node_modules/@jridgewell/trace-mapping/README.md +348 -0
- datadoc_cli-0.4.0/web/node_modules/@oxc-project/types/LICENSE +22 -0
- datadoc_cli-0.4.0/web/node_modules/@oxc-project/types/README.md +3 -0
- datadoc_cli-0.4.0/web/node_modules/@oxlint/binding-win32-x64-msvc/README.md +3 -0
- datadoc_cli-0.4.0/web/node_modules/@reduxjs/toolkit/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@reduxjs/toolkit/README.md +112 -0
- datadoc_cli-0.4.0/web/node_modules/@rolldown/binding-win32-x64-msvc/README.md +3 -0
- datadoc_cli-0.4.0/web/node_modules/@rolldown/pluginutils/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@rolldown/pluginutils/README.md +145 -0
- datadoc_cli-0.4.0/web/node_modules/@standard-schema/spec/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@standard-schema/spec/README.md +198 -0
- datadoc_cli-0.4.0/web/node_modules/@standard-schema/utils/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@standard-schema/utils/README.md +61 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/node/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/node/README.md +36 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/node/node_modules/lightningcss/LICENSE +373 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/node/node_modules/lightningcss/README.md +105 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc/LICENSE +373 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc/README.md +1 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/oxide/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/oxide-win32-x64-msvc/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/oxide-win32-x64-msvc/README.md +3 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/vite/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@tailwindcss/vite/README.md +76 -0
- datadoc_cli-0.4.0/web/node_modules/@tybys/wasm-util/README.md +193 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-array/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-array/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-color/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-color/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-ease/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-ease/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-interpolate/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-interpolate/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-path/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-path/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-scale/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-scale/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-shape/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-shape/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-time/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-time/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-timer/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/d3-timer/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/react/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/react/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@types/react-dom/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/react-dom/README.md +16 -0
- datadoc_cli-0.4.0/web/node_modules/@types/use-sync-external-store/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@types/use-sync-external-store/README.md +15 -0
- datadoc_cli-0.4.0/web/node_modules/@vitejs/plugin-react/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/@vitejs/plugin-react/README.md +169 -0
- datadoc_cli-0.4.0/web/node_modules/agent-base/README.md +145 -0
- datadoc_cli-0.4.0/web/node_modules/asynckit/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/asynckit/README.md +233 -0
- datadoc_cli-0.4.0/web/node_modules/axios/LICENSE +7 -0
- datadoc_cli-0.4.0/web/node_modules/axios/README.md +2559 -0
- datadoc_cli-0.4.0/web/node_modules/axios/lib/adapters/README.md +36 -0
- datadoc_cli-0.4.0/web/node_modules/axios/lib/core/README.md +8 -0
- datadoc_cli-0.4.0/web/node_modules/axios/lib/helpers/README.md +7 -0
- datadoc_cli-0.4.0/web/node_modules/call-bind-apply-helpers/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/call-bind-apply-helpers/README.md +62 -0
- datadoc_cli-0.4.0/web/node_modules/css-box-model/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/css-box-model/README.md +290 -0
- datadoc_cli-0.4.0/web/node_modules/csstype/LICENSE +19 -0
- datadoc_cli-0.4.0/web/node_modules/csstype/README.md +291 -0
- datadoc_cli-0.4.0/web/node_modules/d3-array/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-array/README.md +954 -0
- datadoc_cli-0.4.0/web/node_modules/d3-color/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-color/README.md +203 -0
- datadoc_cli-0.4.0/web/node_modules/d3-ease/LICENSE +28 -0
- datadoc_cli-0.4.0/web/node_modules/d3-ease/README.md +253 -0
- datadoc_cli-0.4.0/web/node_modules/d3-format/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-format/README.md +12 -0
- datadoc_cli-0.4.0/web/node_modules/d3-interpolate/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-interpolate/README.md +268 -0
- datadoc_cli-0.4.0/web/node_modules/d3-path/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-path/README.md +94 -0
- datadoc_cli-0.4.0/web/node_modules/d3-scale/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-scale/README.md +1003 -0
- datadoc_cli-0.4.0/web/node_modules/d3-shape/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-shape/README.md +1227 -0
- datadoc_cli-0.4.0/web/node_modules/d3-time/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-time/README.md +380 -0
- datadoc_cli-0.4.0/web/node_modules/d3-time-format/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-time-format/README.md +209 -0
- datadoc_cli-0.4.0/web/node_modules/d3-timer/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/d3-timer/README.md +87 -0
- datadoc_cli-0.4.0/web/node_modules/debug/LICENSE +20 -0
- datadoc_cli-0.4.0/web/node_modules/debug/README.md +481 -0
- datadoc_cli-0.4.0/web/node_modules/decimal.js-light/README.md +92 -0
- datadoc_cli-0.4.0/web/node_modules/detect-libc/LICENSE +201 -0
- datadoc_cli-0.4.0/web/node_modules/detect-libc/README.md +163 -0
- datadoc_cli-0.4.0/web/node_modules/dunder-proto/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/dunder-proto/README.md +54 -0
- datadoc_cli-0.4.0/web/node_modules/enhanced-resolve/LICENSE +20 -0
- datadoc_cli-0.4.0/web/node_modules/enhanced-resolve/README.md +862 -0
- datadoc_cli-0.4.0/web/node_modules/es-define-property/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/es-define-property/README.md +49 -0
- datadoc_cli-0.4.0/web/node_modules/es-errors/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/es-errors/README.md +55 -0
- datadoc_cli-0.4.0/web/node_modules/es-object-atoms/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/es-object-atoms/README.md +63 -0
- datadoc_cli-0.4.0/web/node_modules/es-set-tostringtag/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/es-set-tostringtag/README.md +53 -0
- datadoc_cli-0.4.0/web/node_modules/es-toolkit/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/es-toolkit/README.md +69 -0
- datadoc_cli-0.4.0/web/node_modules/eventemitter3/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/eventemitter3/README.md +85 -0
- datadoc_cli-0.4.0/web/node_modules/fdir/LICENSE +7 -0
- datadoc_cli-0.4.0/web/node_modules/fdir/README.md +91 -0
- datadoc_cli-0.4.0/web/node_modules/follow-redirects/LICENSE +18 -0
- datadoc_cli-0.4.0/web/node_modules/follow-redirects/README.md +157 -0
- datadoc_cli-0.4.0/web/node_modules/form-data/README.md +355 -0
- datadoc_cli-0.4.0/web/node_modules/function-bind/LICENSE +20 -0
- datadoc_cli-0.4.0/web/node_modules/function-bind/README.md +46 -0
- datadoc_cli-0.4.0/web/node_modules/get-intrinsic/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/get-intrinsic/README.md +71 -0
- datadoc_cli-0.4.0/web/node_modules/get-proto/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/get-proto/README.md +50 -0
- datadoc_cli-0.4.0/web/node_modules/gopd/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/gopd/README.md +40 -0
- datadoc_cli-0.4.0/web/node_modules/graceful-fs/LICENSE +15 -0
- datadoc_cli-0.4.0/web/node_modules/graceful-fs/README.md +143 -0
- datadoc_cli-0.4.0/web/node_modules/has-symbols/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/has-symbols/README.md +46 -0
- datadoc_cli-0.4.0/web/node_modules/has-tostringtag/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/has-tostringtag/README.md +46 -0
- datadoc_cli-0.4.0/web/node_modules/hasown/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/hasown/README.md +40 -0
- datadoc_cli-0.4.0/web/node_modules/https-proxy-agent/README.md +137 -0
- datadoc_cli-0.4.0/web/node_modules/immer/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/internmap/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/internmap/README.md +94 -0
- datadoc_cli-0.4.0/web/node_modules/jiti/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/jiti/README.md +258 -0
- datadoc_cli-0.4.0/web/node_modules/lightningcss/LICENSE +373 -0
- datadoc_cli-0.4.0/web/node_modules/lightningcss/README.md +105 -0
- datadoc_cli-0.4.0/web/node_modules/lightningcss-win32-x64-msvc/LICENSE +373 -0
- datadoc_cli-0.4.0/web/node_modules/lightningcss-win32-x64-msvc/README.md +1 -0
- datadoc_cli-0.4.0/web/node_modules/lucide-react/LICENSE +43 -0
- datadoc_cli-0.4.0/web/node_modules/lucide-react/README.md +87 -0
- datadoc_cli-0.4.0/web/node_modules/magic-string/LICENSE +7 -0
- datadoc_cli-0.4.0/web/node_modules/magic-string/README.md +325 -0
- datadoc_cli-0.4.0/web/node_modules/math-intrinsics/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/math-intrinsics/README.md +50 -0
- datadoc_cli-0.4.0/web/node_modules/mime-db/LICENSE +23 -0
- datadoc_cli-0.4.0/web/node_modules/mime-db/README.md +100 -0
- datadoc_cli-0.4.0/web/node_modules/mime-types/LICENSE +23 -0
- datadoc_cli-0.4.0/web/node_modules/mime-types/README.md +113 -0
- datadoc_cli-0.4.0/web/node_modules/nanoid/LICENSE +20 -0
- datadoc_cli-0.4.0/web/node_modules/nanoid/README.md +36 -0
- datadoc_cli-0.4.0/web/node_modules/oxlint/LICENSE +22 -0
- datadoc_cli-0.4.0/web/node_modules/oxlint/README.md +58 -0
- datadoc_cli-0.4.0/web/node_modules/picocolors/LICENSE +15 -0
- datadoc_cli-0.4.0/web/node_modules/picocolors/README.md +21 -0
- datadoc_cli-0.4.0/web/node_modules/picomatch/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/picomatch/README.md +743 -0
- datadoc_cli-0.4.0/web/node_modules/postcss/LICENSE +20 -0
- datadoc_cli-0.4.0/web/node_modules/postcss/README.md +24 -0
- datadoc_cli-0.4.0/web/node_modules/proxy-from-env/LICENSE +20 -0
- datadoc_cli-0.4.0/web/node_modules/proxy-from-env/README.md +163 -0
- datadoc_cli-0.4.0/web/node_modules/raf-schd/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/raf-schd/README.md +154 -0
- datadoc_cli-0.4.0/web/node_modules/react/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/react/README.md +37 -0
- datadoc_cli-0.4.0/web/node_modules/react-dom/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/react-dom/README.md +60 -0
- datadoc_cli-0.4.0/web/node_modules/react-is/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/react-is/README.md +103 -0
- datadoc_cli-0.4.0/web/node_modules/react-redux/README.md +63 -0
- datadoc_cli-0.4.0/web/node_modules/recharts/LICENSE +22 -0
- datadoc_cli-0.4.0/web/node_modules/recharts/README.md +98 -0
- datadoc_cli-0.4.0/web/node_modules/redux/README.md +157 -0
- datadoc_cli-0.4.0/web/node_modules/redux-thunk/README.md +403 -0
- datadoc_cli-0.4.0/web/node_modules/reselect/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/reselect/README.md +206 -0
- datadoc_cli-0.4.0/web/node_modules/rolldown/LICENSE +25 -0
- datadoc_cli-0.4.0/web/node_modules/rolldown/README.md +11 -0
- datadoc_cli-0.4.0/web/node_modules/scheduler/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/scheduler/README.md +9 -0
- datadoc_cli-0.4.0/web/node_modules/source-map-js/LICENSE +28 -0
- datadoc_cli-0.4.0/web/node_modules/source-map-js/README.md +765 -0
- datadoc_cli-0.4.0/web/node_modules/tailwindcss/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/tailwindcss/README.md +36 -0
- datadoc_cli-0.4.0/web/node_modules/tapable/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/tapable/README.md +715 -0
- datadoc_cli-0.4.0/web/node_modules/tiny-invariant/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/tiny-invariant/README.md +109 -0
- datadoc_cli-0.4.0/web/node_modules/tinyglobby/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/tinyglobby/README.md +25 -0
- datadoc_cli-0.4.0/web/node_modules/tslib/README.md +164 -0
- datadoc_cli-0.4.0/web/node_modules/use-sync-external-store/LICENSE +21 -0
- datadoc_cli-0.4.0/web/node_modules/use-sync-external-store/README.md +5 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/README.md +70 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-array/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-color/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-ease/LICENSE +28 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-format/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-interpolate/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-path/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-scale/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-shape/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-time/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-time-format/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-timer/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/d3-voronoi/LICENSE +50 -0
- datadoc_cli-0.4.0/web/node_modules/victory-vendor/lib-vendor/internmap/LICENSE +13 -0
- datadoc_cli-0.4.0/web/node_modules/vite/README.md +20 -0
- datadoc_cli-0.2.0/.github/workflows/ci.yml +0 -52
- datadoc_cli-0.2.0/CONTRIBUTING.md +0 -98
- datadoc_cli-0.2.0/FULL_DOCUMENTATION.md +0 -144
- datadoc_cli-0.2.0/PKG-INFO +0 -206
- datadoc_cli-0.2.0/README.md +0 -172
- datadoc_cli-0.2.0/datadoc/core/__init__.py +0 -0
- datadoc_cli-0.2.0/datadoc/core/engine.py +0 -271
- datadoc_cli-0.2.0/datadoc/plugins/__init__.py +0 -0
- datadoc_cli-0.2.0/datadoc/plugins/encoders.py +0 -73
- datadoc_cli-0.2.0/datadoc/plugins/scaling.py +0 -103
- datadoc_cli-0.2.0/test.csv +0 -6
- datadoc_cli-0.2.0/tests/__init__.py +0 -1
- datadoc_cli-0.2.0/tests/test_core.py +0 -355
- {datadoc_cli-0.2.0/datadoc → datadoc_cli-0.4.0/datadoc/cli}/__init__.py +0 -0
- {datadoc_cli-0.2.0/datadoc/cli → datadoc_cli-0.4.0/datadoc/plugins}/__init__.py +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# DATADOC: Complete User and Developer Guide
|
|
2
|
+
|
|
3
|
+
DATADOC is a local-first open-source toolkit for preparing tabular datasets for supervised machine learning. It profiles a dataset, explains possible data-quality problems, creates a transformation plan, fits that plan only on training data, and reuses the fitted rules for validation, test, and inference data.
|
|
4
|
+
|
|
5
|
+
The central idea is simple:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
profile → plan → fit on train → transform validation/test/new data → evaluate
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
DATADOC does not promise that cleaning always improves model performance. When a target is supplied and the optional ML dependency is installed, it measures the result against a reproducible baseline and can honestly report that no improvement was found.
|
|
12
|
+
|
|
13
|
+
For the implementation explanation, read [PROJECT_IMPLEMENTATION_GUIDE.md](PROJECT_IMPLEMENTATION_GUIDE.md). For migration from the original mutable API, read [MIGRATION.md](MIGRATION.md). The visual documentation site is in [`docs/`](docs/) and begins at [`docs/index.html`](docs/index.html).
|
|
14
|
+
|
|
15
|
+
For maintainers, [RELEASE_CHECKLIST.md](RELEASE_CHECKLIST.md) describes the CI, artifact, Git tag, and PyPI upload steps.
|
|
16
|
+
|
|
17
|
+
## 1. Installation
|
|
18
|
+
|
|
19
|
+
The core package is intentionally small and works without an AI provider, web server, or scikit-learn:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install datadoc-cli
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Optional capabilities are installed only when needed:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pip install "datadoc-cli[ml]" # model benchmarking
|
|
29
|
+
pip install "datadoc-cli[ui]" # local FastAPI dashboard
|
|
30
|
+
pip install "datadoc-cli[ai]" # constrained advisory AI planner
|
|
31
|
+
pip install "datadoc-cli[dev]" # contributor tooling
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
DATADOC supports Python 3.10, 3.11, and 3.12. Input and output formats are CSV and Parquet.
|
|
35
|
+
|
|
36
|
+
## 2. The mental model
|
|
37
|
+
|
|
38
|
+
Imagine a dataset with a numeric `age`, a categorical `plan`, a timestamp, missing values, and a target called `churn`.
|
|
39
|
+
|
|
40
|
+
1. `profile` looks at the columns and reports facts: null counts, cardinality, duplicates, constants, suspicious identifiers, parse confidence, and warnings.
|
|
41
|
+
2. `plan` turns those facts into proposed operations. It does not modify the dataset.
|
|
42
|
+
3. `fit` learns reusable values from training data: numeric medians, category vocabularies, missing-value indicators, outlier bounds when enabled, and scaling centers/spreads.
|
|
43
|
+
4. `transform` applies those frozen values to another dataset. It never recalculates them from validation, test, or inference rows.
|
|
44
|
+
5. `evaluate` can compare a minimal baseline with a candidate pipeline for a declared classification or regression task.
|
|
45
|
+
|
|
46
|
+
This separation prevents data leakage. For example, a validation row cannot change the median used to fill a training feature, and a category appearing only in validation cannot enlarge the training feature schema.
|
|
47
|
+
|
|
48
|
+
## 3. The recommended CLI workflow
|
|
49
|
+
|
|
50
|
+
### Step 1: profile
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
datadoc profile data.csv --target churn --output profile.json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
This is read-only. A declared target is protected and is never treated as a feature. The output contains schema, null counts, cardinality, confidence-scored roles, findings, duplicate-row count, and a schema fingerprint.
|
|
57
|
+
|
|
58
|
+
### Step 2: review a plan
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
datadoc plan data.csv --target churn --task classification --output plan.json
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The plan lists operations such as numeric median imputation, categorical missing-value handling, one-hot encoding, optional missingness indicators, and optional scaling. Identifier suggestions are findings; they are not silently dropped.
|
|
65
|
+
|
|
66
|
+
### Step 3: fit on training data
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
datadoc fit train.csv \
|
|
70
|
+
--target churn \
|
|
71
|
+
--task classification \
|
|
72
|
+
--output artifacts/churn-pipeline.json
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Only `train.csv` is used to learn pipeline state. The JSON artifact includes the input schema, output schema, configuration, profile, plan, artifact version, and fitted state.
|
|
76
|
+
|
|
77
|
+
### Step 4: transform later data
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
datadoc transform validation.csv \
|
|
81
|
+
--pipeline artifacts/churn-pipeline.json \
|
|
82
|
+
--output validation-features.parquet
|
|
83
|
+
|
|
84
|
+
datadoc transform test.csv \
|
|
85
|
+
--pipeline artifacts/churn-pipeline.json \
|
|
86
|
+
--output test-features.parquet
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The pipeline checks compatibility before transforming. Missing required columns or incompatible artifact versions produce actionable errors. Unseen categories are handled without changing the output schema.
|
|
90
|
+
|
|
91
|
+
### Step 5: evaluate when a target exists
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pip install "datadoc-cli[ml]"
|
|
95
|
+
datadoc evaluate train.csv \
|
|
96
|
+
--target churn \
|
|
97
|
+
--task classification \
|
|
98
|
+
--estimator linear \
|
|
99
|
+
--output evaluation.json
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Classification uses balanced accuracy as the primary comparison. Regression uses RMSE. The report names the estimator family, metric, split strategy, baseline score, selected score, improvement, selected pipeline, feature count, and warnings. Use `--time-column` for ordered evaluation and `--group-column` when rows must stay grouped.
|
|
103
|
+
|
|
104
|
+
For benchmarking, DATADOC passes numeric transformed features to the estimator. Retained text or identifier columns remain visible in the prepared output but are excluded from the model matrix with a warning. Any remaining numeric missing values are filled with medians learned from the current training fold, never from the validation fold.
|
|
105
|
+
|
|
106
|
+
### One-command run
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
datadoc run data.csv \
|
|
110
|
+
--target churn \
|
|
111
|
+
--task classification \
|
|
112
|
+
--output-dir runs/churn-v1 \
|
|
113
|
+
--evaluate
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
This creates `profile.json`, `plan.json`, `pipeline.json`, `transformed.parquet`, and `manifest.json`; `evaluation.json` is added when evaluation is requested and the ML extra is available. For a production model decision, keep an untouched external test set and do not treat the convenience run as a replacement for a deliberate train/validation/test split.
|
|
117
|
+
|
|
118
|
+
### Export code
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
datadoc export \
|
|
122
|
+
--pipeline artifacts/churn-pipeline.json \
|
|
123
|
+
--output pipeline.py
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The export is a small executable wrapper that loads the same artifact and calls the same runtime implementation. It is intended for transparent deployment and review; it does not duplicate or reinterpret fitted statistics.
|
|
127
|
+
|
|
128
|
+
## 4. Python SDK
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
import polars as pl
|
|
132
|
+
from datadoc import DataDocPipeline, PipelineConfig
|
|
133
|
+
|
|
134
|
+
train = pl.read_csv("train.csv")
|
|
135
|
+
validation = pl.read_csv("validation.csv")
|
|
136
|
+
|
|
137
|
+
config = PipelineConfig(
|
|
138
|
+
target="churn",
|
|
139
|
+
task="classification",
|
|
140
|
+
scaling="standard",
|
|
141
|
+
clip_outliers=False,
|
|
142
|
+
random_seed=42,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
pipeline = DataDocPipeline(config)
|
|
146
|
+
profile = pipeline.profile(train)
|
|
147
|
+
plan = pipeline.plan(train)
|
|
148
|
+
pipeline.fit(train)
|
|
149
|
+
|
|
150
|
+
validation_features = pipeline.transform(validation)
|
|
151
|
+
pipeline.save("artifacts/churn-pipeline.json")
|
|
152
|
+
|
|
153
|
+
loaded = DataDocPipeline.load("artifacts/churn-pipeline.json")
|
|
154
|
+
same_features = loaded.transform(validation)
|
|
155
|
+
assert same_features.columns == validation_features.columns
|
|
156
|
+
|
|
157
|
+
# Optional model-oriented evidence:
|
|
158
|
+
report = DataDocPipeline(config).evaluate(train, target="churn")
|
|
159
|
+
print(report.to_dict())
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Use `profile` and `plan` before `fit` when you want to inspect decisions. Use `load` in a separate inference process. The target remains in the transformed frame so callers can separate labels from features explicitly.
|
|
163
|
+
|
|
164
|
+
## 5. What is protected and what is configurable?
|
|
165
|
+
|
|
166
|
+
- A declared target is not imputed, encoded, scaled, clipped, or dropped as a feature.
|
|
167
|
+
- Numeric missing values use a training median; categorical missing values use a configured marker.
|
|
168
|
+
- Invalid numeric infinities become missing before imputation.
|
|
169
|
+
- Missingness indicators can preserve signal carried by the fact that a value was absent.
|
|
170
|
+
- One-hot vocabularies are learned on training data; unseen inference categories are safe.
|
|
171
|
+
- High-cardinality strings are reported and can use frequency encoding; they are not silently deleted.
|
|
172
|
+
- Outlier clipping is opt-in and is not applied to binary, target, identifier, or datetime-derived fields.
|
|
173
|
+
- Scaling is configurable and defaults according to estimator family; tree-style models do not need it.
|
|
174
|
+
- Date-like fields are parsed only when confidence is sufficient; parse warnings remain visible.
|
|
175
|
+
- Numeric uniqueness alone never proves that a column is an identifier. Name and value evidence are combined.
|
|
176
|
+
- Unsupported text, joins, images, geospatial features, and distributed processing are outside the stable tabular scope and are reported rather than guessed.
|
|
177
|
+
|
|
178
|
+
## 6. Legacy compatibility
|
|
179
|
+
|
|
180
|
+
The original `DATADOC(file).analyze()`, `.recommend()`, `.engineer()`, `.compare()`, `.visualize()`, `.report()`, and `.pipeline()` commands remain available as compatibility paths. New work should use `DataDocPipeline`.
|
|
181
|
+
|
|
182
|
+
`engineer()` is deprecated for production use because fitting and transforming in one mutable operation makes train/test boundaries easy to misuse. It now warns that it cannot make a model-performance claim without an explicit target and validation setup. The old arbitrary-code execution path is not part of the production workflow.
|
|
183
|
+
|
|
184
|
+
## 7. Local web UI
|
|
185
|
+
|
|
186
|
+
Install the UI extra and start the dashboard with a local file:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
pip install "datadoc-cli[ui]"
|
|
190
|
+
datadoc ui data.csv
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The UI consumes the same profile, plan, fit, transform-preview, and code-export concepts as the CLI. It uses session-scoped state, binds locally by default, restricts CORS to configured local origins, and does not execute AI-generated code. The frontend is in `web/src/App.jsx`; build it with `npm ci` and `npm run build` from `web/`.
|
|
194
|
+
|
|
195
|
+
## 8. Open-source development
|
|
196
|
+
|
|
197
|
+
Install contributor dependencies and run the checks:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
pip install -e ".[dev,ml,ui]"
|
|
201
|
+
pytest -q
|
|
202
|
+
ruff check datadoc tests
|
|
203
|
+
ruff format --check datadoc tests
|
|
204
|
+
python -m compileall -q datadoc
|
|
205
|
+
python -m build
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Transformation contributions must prove four things: learned values come from training data only, the transform is stable for unseen or missing values, the artifact round-trips, and the generated wrapper agrees with runtime output. Prefer small focused pull requests, document behavior changes, and keep optional dependencies optional.
|
|
209
|
+
|
|
210
|
+
## 9. Current boundaries and future work
|
|
211
|
+
|
|
212
|
+
The stable product is tabular classification and regression preparation. Future work can add out-of-fold target encoding, richer repeated cross-validation, calibrated uncertainty, stronger artifact schemas, text and geospatial adapters, and distributed execution. Those additions should preserve the same safety contract rather than make automation more aggressive.
|
|
213
|
+
|
|
214
|
+
## 10. License
|
|
215
|
+
|
|
216
|
+
DATADOC is licensed under the MIT License. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Migrating to DATADOC's fitted pipeline API
|
|
2
|
+
|
|
3
|
+
Version 0.3 keeps the original `DATADOC` facade for compatibility, but new projects should use `DataDocPipeline`.
|
|
4
|
+
|
|
5
|
+
```python
|
|
6
|
+
from datadoc import DataDocPipeline, PipelineConfig
|
|
7
|
+
|
|
8
|
+
pipeline = DataDocPipeline(PipelineConfig(target="label"))
|
|
9
|
+
pipeline.fit(train_df)
|
|
10
|
+
validation_features = pipeline.transform(validation_df)
|
|
11
|
+
pipeline.save("pipeline.json")
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
`DATADOC.engineer()` fits and transforms the same file and is therefore only suitable for exploratory cleaning. It emits a deprecation warning for supervised work. Use `fit()` on a training split and `transform()` on validation, test, and inference data instead.
|
|
15
|
+
|
|
16
|
+
The legacy AI code-execution path has been removed. AI planning, when installed with `datadoc-cli[ai]`, is limited to registered transformations and never executes provider-generated Python.
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: datadoc-cli
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Leakage-safe, local-first preparation pipelines for tabular machine learning.
|
|
5
|
+
Project-URL: Homepage, https://github.com/narain-karti/DATADOC
|
|
6
|
+
Project-URL: Repository, https://github.com/narain-karti/DATADOC
|
|
7
|
+
Project-URL: Issues, https://github.com/narain-karti/DATADOC/issues
|
|
8
|
+
Author: narain-karti
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Requires-Dist: numpy>=1.24.0
|
|
22
|
+
Requires-Dist: plotext>=5.2.8
|
|
23
|
+
Requires-Dist: polars>=0.20.0
|
|
24
|
+
Requires-Dist: pydantic>=2.0.0
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
26
|
+
Requires-Dist: rich>=13.7.0
|
|
27
|
+
Requires-Dist: typer>=0.12.0
|
|
28
|
+
Provides-Extra: ai
|
|
29
|
+
Requires-Dist: litellm>=1.40.0; extra == 'ai'
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: build>=1.2.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: hatchling>=1.25.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: ruff>=0.4.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: scikit-learn>=1.4.0; extra == 'dev'
|
|
36
|
+
Provides-Extra: ml
|
|
37
|
+
Requires-Dist: scikit-learn>=1.4.0; extra == 'ml'
|
|
38
|
+
Provides-Extra: ui
|
|
39
|
+
Requires-Dist: fastapi>=0.115.0; extra == 'ui'
|
|
40
|
+
Requires-Dist: python-multipart>=0.0.20; extra == 'ui'
|
|
41
|
+
Requires-Dist: uvicorn>=0.30.0; extra == 'ui'
|
|
42
|
+
Description-Content-Type: text/markdown
|
|
43
|
+
|
|
44
|
+
<p align="center">
|
|
45
|
+
<pre align="center">
|
|
46
|
+
____ _ _____ _ ____ ___ ____
|
|
47
|
+
| _ \ / \|_ _|/ \ | _ \ / _ \ / ___|
|
|
48
|
+
| | | |/ _ \ | | / _ \ | | | | | | | |
|
|
49
|
+
| |_| / ___ \| |/ ___ \| |_| | |_| | |___
|
|
50
|
+
|____/_/ \_\_/_/ \_\____/ \___/ \____|
|
|
51
|
+
</pre>
|
|
52
|
+
</p>
|
|
53
|
+
|
|
54
|
+
<h3 align="center">The Open Source Operating System for Dataset Engineering.</h3>
|
|
55
|
+
|
|
56
|
+
<p align="center">
|
|
57
|
+
<a href="https://narain-karti.github.io/DATADOC/"><b>📖 View Official Documentation Website</b></a>
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
<p align="center">
|
|
61
|
+
<a href="https://pypi.org/project/datadoc-cli/"><img alt="PyPI version" src="https://img.shields.io/pypi/v/datadoc-cli.svg"></a>
|
|
62
|
+
<a href="https://pypi.org/project/datadoc-cli/"><img alt="Python Versions" src="https://img.shields.io/pypi/pyversions/datadoc-cli.svg"></a>
|
|
63
|
+
<a href="https://github.com/narain-karti/DATADOC/blob/main/LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
<a href="#installation"><b>Install</b></a> •
|
|
68
|
+
<a href="#why-datadoc"><b>Why DATADOC?</b></a> •
|
|
69
|
+
<a href="#quick-start"><b>Quick Start</b></a> •
|
|
70
|
+
<a href="#cli-commands"><b>CLI Commands</b></a> •
|
|
71
|
+
<a href="#architecture--plugins"><b>Architecture</b></a>
|
|
72
|
+
</p>
|
|
73
|
+
|
|
74
|
+
<hr>
|
|
75
|
+
|
|
76
|
+
## 🚀 What is DATADOC?
|
|
77
|
+
|
|
78
|
+
**DATADOC** is a local-first CLI and Python library for preparing tabular data for machine learning. It profiles dataset risks, creates explainable transformation plans, and saves fitted pipelines that apply the same training-derived rules to validation, test, and inference data.
|
|
79
|
+
|
|
80
|
+
Powered by **Polars**, DATADOC reads CSV and Parquet files, diagnoses missing values, identifiers, schema issues, duplicates, constants, and unsafe feature types. It does not promise model improvement: optional evaluation reports the observed result against a baseline under a reproducible split.
|
|
81
|
+
|
|
82
|
+
**DATADOC is NOT just another EDA (Exploratory Data Analysis) tool.** It profiles data quality, lets you review a plan, fits transformations from training data, and hands you a portable artifact and Python wrapper for reuse.
|
|
83
|
+
|
|
84
|
+
### ⚡ The Impact: Why Industry Professionals Use DATADOC
|
|
85
|
+
|
|
86
|
+
Data Scientists and ML Engineers repeatedly rebuild the same preparation steps across projects.
|
|
87
|
+
DATADOC turns those steps into a reviewable, reusable pipeline.
|
|
88
|
+
|
|
89
|
+
- **Save boilerplate:** Review recommendations for imputing nulls, encoding categories, and optional scaling or clipping before applying them.
|
|
90
|
+
- **Explainable by default:** The deterministic core records roles, findings, operations, protected columns, and fitted statistics in an inspectable artifact.
|
|
91
|
+
- **Local-first:** The core package works offline. Optional ML, UI, and AI features are separate extras.
|
|
92
|
+
- **Optional AI planning:** AI can help explain or rank a constrained plan; it is never allowed to execute arbitrary generated code.
|
|
93
|
+
- **Leakage-safe workflows:** Fitted statistics for imputation, categorical vocabularies, clipping, and scaling are learned from training data and saved as an artifact.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 📦 Installation
|
|
98
|
+
|
|
99
|
+
DATADOC is published on PyPI. You can install it globally via `pip` or `uv`:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
pip install datadoc-cli
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
*(Requires Python 3.10+)*
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 🛠️ Quick Start (CLI)
|
|
110
|
+
|
|
111
|
+
You don't need to write a single line of Python to clean your data. Just use the CLI.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# 1. Inspect data-quality findings and column roles
|
|
115
|
+
datadoc profile raw_data.csv --target churn --output profile.json
|
|
116
|
+
|
|
117
|
+
# 2. Review the proposed transformations before applying them
|
|
118
|
+
datadoc plan raw_data.csv --target churn --output plan.json
|
|
119
|
+
|
|
120
|
+
# 3. Fit only on a training dataset, then save a reusable artifact
|
|
121
|
+
datadoc fit train.csv --target churn --output artifacts/churn-pipeline.json
|
|
122
|
+
|
|
123
|
+
# 4. Apply the fitted artifact to validation, test, or new data
|
|
124
|
+
datadoc transform validation.csv --pipeline artifacts/churn-pipeline.json --output validation-features.parquet
|
|
125
|
+
|
|
126
|
+
# 5. Optionally benchmark a safe candidate pipeline against a baseline
|
|
127
|
+
pip install "datadoc-cli[ml]"
|
|
128
|
+
datadoc evaluate train.csv --target churn --task classification
|
|
129
|
+
|
|
130
|
+
# 6. Export a small executable wrapper around the fitted artifact
|
|
131
|
+
datadoc export --pipeline artifacts/churn-pipeline.json --output pipeline.py
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 🐍 Python SDK (Library Usage)
|
|
139
|
+
|
|
140
|
+
DATADOC is also a Python library. The stable workflow is `profile → plan → fit → transform`; the same fitted artifact can be used in notebooks, services, and batch jobs:
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
from datadoc import DataDocPipeline, PipelineConfig
|
|
144
|
+
import polars as pl
|
|
145
|
+
|
|
146
|
+
# Fit only on the training split. The target is protected from feature transforms.
|
|
147
|
+
train_df = pl.read_csv("train.csv")
|
|
148
|
+
pipeline = DataDocPipeline(PipelineConfig(target="churn")).fit(train_df)
|
|
149
|
+
pipeline.save("artifacts/churn-pipeline.json")
|
|
150
|
+
|
|
151
|
+
# Transform data that was never used to fit statistics.
|
|
152
|
+
validation_df = pl.read_csv("validation.csv")
|
|
153
|
+
validation_features = pipeline.transform(validation_df)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
For an observed model comparison, install the optional ML extra and call `pipeline.evaluate(train_df)` or `datadoc evaluate`. Evaluation is evidence for the declared task and split strategy; it is not a promise that cleaning always improves a model.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 💻 CLI Commands Reference
|
|
161
|
+
|
|
162
|
+
| Command | Description |
|
|
163
|
+
|---------|-------------|
|
|
164
|
+
| `datadoc profile <file>` | Produces a data-quality report and confidence-scored column roles |
|
|
165
|
+
| `datadoc plan <file>` | Outputs an explainable transformation plan without modifying data |
|
|
166
|
+
| `datadoc fit <train>` | Learns a pipeline only from training data and saves JSON state |
|
|
167
|
+
| `datadoc transform <file>` | Applies a saved pipeline to validation, test, or inference data |
|
|
168
|
+
| `datadoc evaluate <file>` | Optionally compares a candidate pipeline with a baseline using leakage-aware splits |
|
|
169
|
+
| `datadoc export` | Creates an executable wrapper for a saved pipeline artifact |
|
|
170
|
+
| `datadoc run <file>` | Writes a profile, plan, artifact, transformed data, and lineage manifest |
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 🧩 Architecture & Plugins
|
|
177
|
+
|
|
178
|
+
DATADOC operates as a fitted pipeline. Every transformation learns state only from training data, saves that state to JSON, and reuses it unchanged for later datasets.
|
|
179
|
+
|
|
180
|
+
| Priority | Plugin | Action Performed |
|
|
181
|
+
|----------|--------|-------------|
|
|
182
|
+
| 10 | **MissingValuePlugin** | Imputes missing numeric values with median, categorical with mode |
|
|
183
|
+
| 20 | **OutlierPlugin** | Offers optional IQR clipping; clipping is not forced by default |
|
|
184
|
+
| 30 | **DatetimePlugin** | Detects date strings and extracts year, month, day, day_of_week |
|
|
185
|
+
| 40 | **CategoricalEncoderPlugin** | Encodes categories using training vocabularies and handles unseen values |
|
|
186
|
+
| 45 | **ScalingPlugin** | Applies configured standard or robust scaling, fit on training data only |
|
|
187
|
+
|
|
188
|
+
The fitted pipeline is the production source of truth. Plugin work should follow the lifecycle `analyze → fit → transform → validate → export_code`, with all learned state serializable and testable.
|
|
189
|
+
|
|
190
|
+
Want to build your own? See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to create and register custom plugins!
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 🗺️ Roadmap
|
|
195
|
+
|
|
196
|
+
- [x] Core Engine with plugin orchestration
|
|
197
|
+
- [x] 5 Built-in deterministic plugins
|
|
198
|
+
- [x] Stunning Rich Terminal UI
|
|
199
|
+
- [x] Pipeline export capability
|
|
200
|
+
- [x] Polars backend and local-first pipeline artifacts
|
|
201
|
+
- [x] PyPI Release (`pip install datadoc-cli`)
|
|
202
|
+
- [x] Constrained optional AI planning path
|
|
203
|
+
- [x] Session-scoped local FastAPI dashboard
|
|
204
|
+
- [ ] Export targets for `dbt` and Apache Airflow
|
|
205
|
+
- [x] Local FastAPI dashboard/API companion
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## ⚖️ License
|
|
210
|
+
|
|
211
|
+
This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.
|
|
212
|
+
|
|
213
|
+
## 🤝 Contributing
|
|
214
|
+
|
|
215
|
+
We welcome contributions from the community! If you'd like to add a new plugin or improve the core engine, please see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
216
|
+
|
|
217
|
+
Maintainers can use the [0.4.0 release checklist](RELEASE_CHECKLIST.md) when preparing a tag and PyPI upload.
|