datadoc-cli 0.4.0__tar.gz → 0.6.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.
Files changed (290) hide show
  1. datadoc_cli-0.6.0/.gitignore +65 -0
  2. datadoc_cli-0.6.0/CHANGELOG.md +80 -0
  3. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/PKG-INFO +97 -28
  4. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/README.md +133 -69
  5. datadoc_cli-0.6.0/RELEASE_CHECKLIST.md +74 -0
  6. datadoc_cli-0.6.0/datadoc/__init__.py +5 -0
  7. datadoc_cli-0.6.0/datadoc/cli/app.py +1367 -0
  8. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/cli/ui_server.py +106 -103
  9. datadoc_cli-0.6.0/datadoc/core/compare.py +428 -0
  10. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/core/pipeline.py +423 -52
  11. datadoc_cli-0.6.0/datadoc/core/report.py +668 -0
  12. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/plugins/base.py +0 -22
  13. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/plugins/datetime_feat.py +0 -28
  14. datadoc_cli-0.6.0/datadoc/plugins/duplicates.py +51 -0
  15. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/plugins/encoders.py +1 -17
  16. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/plugins/missing_values.py +0 -11
  17. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/plugins/outliers.py +0 -15
  18. datadoc_cli-0.6.0/datadoc/plugins/polynomial.py +111 -0
  19. datadoc_cli-0.6.0/datadoc/plugins/rare.py +95 -0
  20. datadoc_cli-0.6.0/datadoc/plugins/registry.py +97 -0
  21. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/plugins/scaling.py +0 -10
  22. datadoc_cli-0.6.0/datadoc/plugins/target_encoder.py +156 -0
  23. datadoc_cli-0.6.0/pyproject.toml +125 -0
  24. datadoc_cli-0.6.0/web/dist/assets/index-BPDnt264.js +17 -0
  25. datadoc_cli-0.6.0/web/dist/assets/index-C_j7uPW0.css +2 -0
  26. datadoc_cli-0.6.0/web/dist/favicon.svg +1 -0
  27. datadoc_cli-0.6.0/web/dist/icons.svg +24 -0
  28. datadoc_cli-0.6.0/web/dist/index.html +17 -0
  29. datadoc_cli-0.6.0/web/node_modules/axios/CHANGELOG.md +1872 -0
  30. datadoc_cli-0.6.0/web/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
  31. datadoc_cli-0.6.0/web/node_modules/decimal.js-light/CHANGELOG.md +87 -0
  32. datadoc_cli-0.6.0/web/node_modules/dunder-proto/CHANGELOG.md +24 -0
  33. datadoc_cli-0.6.0/web/node_modules/es-define-property/CHANGELOG.md +29 -0
  34. datadoc_cli-0.6.0/web/node_modules/es-errors/CHANGELOG.md +40 -0
  35. datadoc_cli-0.6.0/web/node_modules/es-object-atoms/CHANGELOG.md +44 -0
  36. datadoc_cli-0.6.0/web/node_modules/es-set-tostringtag/CHANGELOG.md +67 -0
  37. datadoc_cli-0.6.0/web/node_modules/es-toolkit/CHANGELOG.md +936 -0
  38. datadoc_cli-0.6.0/web/node_modules/form-data/CHANGELOG.md +686 -0
  39. datadoc_cli-0.6.0/web/node_modules/function-bind/CHANGELOG.md +136 -0
  40. datadoc_cli-0.6.0/web/node_modules/get-intrinsic/CHANGELOG.md +186 -0
  41. datadoc_cli-0.6.0/web/node_modules/get-proto/CHANGELOG.md +21 -0
  42. datadoc_cli-0.6.0/web/node_modules/gopd/CHANGELOG.md +45 -0
  43. datadoc_cli-0.6.0/web/node_modules/has-symbols/CHANGELOG.md +91 -0
  44. datadoc_cli-0.6.0/web/node_modules/has-tostringtag/CHANGELOG.md +42 -0
  45. datadoc_cli-0.6.0/web/node_modules/hasown/CHANGELOG.md +58 -0
  46. datadoc_cli-0.6.0/web/node_modules/math-intrinsics/CHANGELOG.md +24 -0
  47. datadoc_cli-0.6.0/web/node_modules/raf-schd/CHANGELOG.md +4 -0
  48. datadoc_cli-0.6.0/web/node_modules/recharts/CHANGELOG.md +1965 -0
  49. datadoc_cli-0.6.0/web/node_modules/victory-vendor/CHANGELOG.md +117 -0
  50. datadoc_cli-0.4.0/.gitignore +0 -39
  51. datadoc_cli-0.4.0/FULL_DOCUMENTATION.md +0 -216
  52. datadoc_cli-0.4.0/PROJECT_IMPLEMENTATION_GUIDE.md +0 -546
  53. datadoc_cli-0.4.0/datadoc/__init__.py +0 -3
  54. datadoc_cli-0.4.0/datadoc/cli/app.py +0 -945
  55. datadoc_cli-0.4.0/datadoc/core/agent.py +0 -103
  56. datadoc_cli-0.4.0/datadoc/core/engine.py +0 -336
  57. datadoc_cli-0.4.0/pyproject.toml +0 -83
  58. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/LICENSE +0 -0
  59. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/MIGRATION.md +0 -0
  60. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/cli/__init__.py +0 -0
  61. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/core/__init__.py +0 -0
  62. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/datadoc/plugins/__init__.py +0 -0
  63. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/README.md +0 -0
  64. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@babel/runtime/LICENSE +0 -0
  65. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@babel/runtime/README.md +0 -0
  66. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@emnapi/core/LICENSE +0 -0
  67. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@emnapi/core/README.md +0 -0
  68. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@emnapi/runtime/LICENSE +0 -0
  69. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@emnapi/runtime/README.md +0 -0
  70. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@emnapi/wasi-threads/LICENSE +0 -0
  71. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@emnapi/wasi-threads/README.md +0 -0
  72. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@hello-pangea/dnd/LICENSE +0 -0
  73. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@hello-pangea/dnd/README.md +0 -0
  74. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/gen-mapping/LICENSE +0 -0
  75. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/gen-mapping/README.md +0 -0
  76. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/remapping/LICENSE +0 -0
  77. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/remapping/README.md +0 -0
  78. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/resolve-uri/LICENSE +0 -0
  79. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/resolve-uri/README.md +0 -0
  80. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/sourcemap-codec/LICENSE +0 -0
  81. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/sourcemap-codec/README.md +0 -0
  82. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/trace-mapping/LICENSE +0 -0
  83. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@jridgewell/trace-mapping/README.md +0 -0
  84. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@oxc-project/types/LICENSE +0 -0
  85. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@oxc-project/types/README.md +0 -0
  86. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@oxlint/binding-win32-x64-msvc/README.md +0 -0
  87. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@reduxjs/toolkit/LICENSE +0 -0
  88. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@reduxjs/toolkit/README.md +0 -0
  89. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@rolldown/binding-win32-x64-msvc/README.md +0 -0
  90. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@rolldown/pluginutils/LICENSE +0 -0
  91. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@rolldown/pluginutils/README.md +0 -0
  92. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@standard-schema/spec/LICENSE +0 -0
  93. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@standard-schema/spec/README.md +0 -0
  94. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@standard-schema/utils/LICENSE +0 -0
  95. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@standard-schema/utils/README.md +0 -0
  96. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/node/LICENSE +0 -0
  97. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/node/README.md +0 -0
  98. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/node/node_modules/lightningcss/LICENSE +0 -0
  99. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/node/node_modules/lightningcss/README.md +0 -0
  100. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc/LICENSE +0 -0
  101. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/node/node_modules/lightningcss-win32-x64-msvc/README.md +0 -0
  102. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/oxide/LICENSE +0 -0
  103. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/oxide-win32-x64-msvc/LICENSE +0 -0
  104. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/oxide-win32-x64-msvc/README.md +0 -0
  105. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/vite/LICENSE +0 -0
  106. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tailwindcss/vite/README.md +0 -0
  107. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@tybys/wasm-util/README.md +0 -0
  108. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-array/LICENSE +0 -0
  109. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-array/README.md +0 -0
  110. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-color/LICENSE +0 -0
  111. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-color/README.md +0 -0
  112. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-ease/LICENSE +0 -0
  113. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-ease/README.md +0 -0
  114. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-interpolate/LICENSE +0 -0
  115. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-interpolate/README.md +0 -0
  116. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-path/LICENSE +0 -0
  117. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-path/README.md +0 -0
  118. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-scale/LICENSE +0 -0
  119. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-scale/README.md +0 -0
  120. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-shape/LICENSE +0 -0
  121. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-shape/README.md +0 -0
  122. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-time/LICENSE +0 -0
  123. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-time/README.md +0 -0
  124. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-timer/LICENSE +0 -0
  125. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/d3-timer/README.md +0 -0
  126. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/react/LICENSE +0 -0
  127. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/react/README.md +0 -0
  128. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/react-dom/LICENSE +0 -0
  129. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/react-dom/README.md +0 -0
  130. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/use-sync-external-store/LICENSE +0 -0
  131. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@types/use-sync-external-store/README.md +0 -0
  132. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@vitejs/plugin-react/LICENSE +0 -0
  133. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/@vitejs/plugin-react/README.md +0 -0
  134. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/agent-base/README.md +0 -0
  135. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/asynckit/LICENSE +0 -0
  136. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/asynckit/README.md +0 -0
  137. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/axios/LICENSE +0 -0
  138. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/axios/README.md +0 -0
  139. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/axios/lib/adapters/README.md +0 -0
  140. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/axios/lib/core/README.md +0 -0
  141. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/axios/lib/helpers/README.md +0 -0
  142. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/call-bind-apply-helpers/LICENSE +0 -0
  143. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/call-bind-apply-helpers/README.md +0 -0
  144. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/css-box-model/LICENSE +0 -0
  145. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/css-box-model/README.md +0 -0
  146. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/csstype/LICENSE +0 -0
  147. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/csstype/README.md +0 -0
  148. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-array/LICENSE +0 -0
  149. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-array/README.md +0 -0
  150. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-color/LICENSE +0 -0
  151. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-color/README.md +0 -0
  152. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-ease/LICENSE +0 -0
  153. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-ease/README.md +0 -0
  154. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-format/LICENSE +0 -0
  155. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-format/README.md +0 -0
  156. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-interpolate/LICENSE +0 -0
  157. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-interpolate/README.md +0 -0
  158. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-path/LICENSE +0 -0
  159. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-path/README.md +0 -0
  160. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-scale/LICENSE +0 -0
  161. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-scale/README.md +0 -0
  162. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-shape/LICENSE +0 -0
  163. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-shape/README.md +0 -0
  164. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-time/LICENSE +0 -0
  165. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-time/README.md +0 -0
  166. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-time-format/LICENSE +0 -0
  167. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-time-format/README.md +0 -0
  168. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-timer/LICENSE +0 -0
  169. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/d3-timer/README.md +0 -0
  170. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/debug/LICENSE +0 -0
  171. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/debug/README.md +0 -0
  172. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/decimal.js-light/README.md +0 -0
  173. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/detect-libc/LICENSE +0 -0
  174. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/detect-libc/README.md +0 -0
  175. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/dunder-proto/LICENSE +0 -0
  176. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/dunder-proto/README.md +0 -0
  177. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/enhanced-resolve/LICENSE +0 -0
  178. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/enhanced-resolve/README.md +0 -0
  179. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-define-property/LICENSE +0 -0
  180. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-define-property/README.md +0 -0
  181. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-errors/LICENSE +0 -0
  182. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-errors/README.md +0 -0
  183. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-object-atoms/LICENSE +0 -0
  184. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-object-atoms/README.md +0 -0
  185. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-set-tostringtag/LICENSE +0 -0
  186. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-set-tostringtag/README.md +0 -0
  187. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-toolkit/LICENSE +0 -0
  188. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/es-toolkit/README.md +0 -0
  189. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/eventemitter3/LICENSE +0 -0
  190. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/eventemitter3/README.md +0 -0
  191. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/fdir/LICENSE +0 -0
  192. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/fdir/README.md +0 -0
  193. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/follow-redirects/LICENSE +0 -0
  194. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/follow-redirects/README.md +0 -0
  195. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/form-data/README.md +0 -0
  196. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/function-bind/LICENSE +0 -0
  197. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/function-bind/README.md +0 -0
  198. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/get-intrinsic/LICENSE +0 -0
  199. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/get-intrinsic/README.md +0 -0
  200. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/get-proto/LICENSE +0 -0
  201. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/get-proto/README.md +0 -0
  202. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/gopd/LICENSE +0 -0
  203. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/gopd/README.md +0 -0
  204. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/graceful-fs/LICENSE +0 -0
  205. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/graceful-fs/README.md +0 -0
  206. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/has-symbols/LICENSE +0 -0
  207. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/has-symbols/README.md +0 -0
  208. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/has-tostringtag/LICENSE +0 -0
  209. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/has-tostringtag/README.md +0 -0
  210. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/hasown/LICENSE +0 -0
  211. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/hasown/README.md +0 -0
  212. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/https-proxy-agent/README.md +0 -0
  213. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/immer/LICENSE +0 -0
  214. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/internmap/LICENSE +0 -0
  215. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/internmap/README.md +0 -0
  216. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/jiti/LICENSE +0 -0
  217. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/jiti/README.md +0 -0
  218. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/lightningcss/LICENSE +0 -0
  219. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/lightningcss/README.md +0 -0
  220. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/lightningcss-win32-x64-msvc/LICENSE +0 -0
  221. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/lightningcss-win32-x64-msvc/README.md +0 -0
  222. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/lucide-react/LICENSE +0 -0
  223. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/lucide-react/README.md +0 -0
  224. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/magic-string/LICENSE +0 -0
  225. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/magic-string/README.md +0 -0
  226. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/math-intrinsics/LICENSE +0 -0
  227. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/math-intrinsics/README.md +0 -0
  228. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/mime-db/LICENSE +0 -0
  229. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/mime-db/README.md +0 -0
  230. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/mime-types/LICENSE +0 -0
  231. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/mime-types/README.md +0 -0
  232. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/nanoid/LICENSE +0 -0
  233. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/nanoid/README.md +0 -0
  234. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/oxlint/LICENSE +0 -0
  235. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/oxlint/README.md +0 -0
  236. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/picocolors/LICENSE +0 -0
  237. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/picocolors/README.md +0 -0
  238. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/picomatch/LICENSE +0 -0
  239. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/picomatch/README.md +0 -0
  240. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/postcss/LICENSE +0 -0
  241. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/postcss/README.md +0 -0
  242. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/proxy-from-env/LICENSE +0 -0
  243. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/proxy-from-env/README.md +0 -0
  244. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/raf-schd/LICENSE +0 -0
  245. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/raf-schd/README.md +0 -0
  246. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/react/LICENSE +0 -0
  247. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/react/README.md +0 -0
  248. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/react-dom/LICENSE +0 -0
  249. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/react-dom/README.md +0 -0
  250. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/react-is/LICENSE +0 -0
  251. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/react-is/README.md +0 -0
  252. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/react-redux/README.md +0 -0
  253. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/recharts/LICENSE +0 -0
  254. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/recharts/README.md +0 -0
  255. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/redux/README.md +0 -0
  256. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/redux-thunk/README.md +0 -0
  257. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/reselect/LICENSE +0 -0
  258. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/reselect/README.md +0 -0
  259. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/rolldown/LICENSE +0 -0
  260. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/rolldown/README.md +0 -0
  261. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/scheduler/LICENSE +0 -0
  262. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/scheduler/README.md +0 -0
  263. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/source-map-js/LICENSE +0 -0
  264. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/source-map-js/README.md +0 -0
  265. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tailwindcss/LICENSE +0 -0
  266. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tailwindcss/README.md +0 -0
  267. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tapable/LICENSE +0 -0
  268. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tapable/README.md +0 -0
  269. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tiny-invariant/LICENSE +0 -0
  270. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tiny-invariant/README.md +0 -0
  271. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tinyglobby/LICENSE +0 -0
  272. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tinyglobby/README.md +0 -0
  273. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/tslib/README.md +0 -0
  274. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/use-sync-external-store/LICENSE +0 -0
  275. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/use-sync-external-store/README.md +0 -0
  276. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/README.md +0 -0
  277. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-array/LICENSE +0 -0
  278. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-color/LICENSE +0 -0
  279. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-ease/LICENSE +0 -0
  280. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-format/LICENSE +0 -0
  281. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-interpolate/LICENSE +0 -0
  282. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-path/LICENSE +0 -0
  283. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-scale/LICENSE +0 -0
  284. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-shape/LICENSE +0 -0
  285. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-time/LICENSE +0 -0
  286. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-time-format/LICENSE +0 -0
  287. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-timer/LICENSE +0 -0
  288. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/d3-voronoi/LICENSE +0 -0
  289. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/victory-vendor/lib-vendor/internmap/LICENSE +0 -0
  290. {datadoc_cli-0.4.0 → datadoc_cli-0.6.0}/web/node_modules/vite/README.md +0 -0
@@ -0,0 +1,65 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+ dist/
7
+ build/
8
+ *.egg
9
+
10
+ # Virtual environments
11
+ .venv/
12
+ venv/
13
+ env/
14
+
15
+ # IDE
16
+ .vscode/
17
+ .idea/
18
+ *.swp
19
+ *.swo
20
+
21
+ # OS
22
+ .DS_Store
23
+ Thumbs.db
24
+
25
+ # DATADOC generated outputs
26
+ clean_*.csv
27
+ pipeline_*.py
28
+ report_*.md
29
+ .release-verify/
30
+ datadoc-run/
31
+ full-run/
32
+ titanic-run/
33
+ telco-run/
34
+ datadoc.toml
35
+
36
+ # Local audit datasets (re-download from Kaggle; never ship)
37
+ # NOTE: demo.csv and docs/demo.csv are TRACKED fixtures and stay tracked.
38
+ /california_housing.csv
39
+ /telco_churn.csv
40
+ /titanic.csv
41
+ /titanic-audit/*.csv
42
+ /titanic-audit/*.joblib
43
+ /titanic-audit/*.parquet
44
+ /titanic-audit/*.txt
45
+ /titanic-audit/full-run/
46
+ /titanic-audit/wizard-run/
47
+ /titanic-test/
48
+
49
+ # Scratch / debug (dev-only, never ship)
50
+ scratch_*
51
+ diagnose*
52
+ changes.diff
53
+ *_test.csv
54
+ *_output*.txt
55
+ heavy_test.csv
56
+
57
+ # Testing
58
+ .pytest_cache/
59
+ .playwright-cli/
60
+ htmlcov/
61
+ .coverage
62
+
63
+ # Environment & Secrets
64
+ .env
65
+ .env.*
@@ -0,0 +1,80 @@
1
+ # Changelog
2
+
3
+ All notable changes to DATADOC are documented here. Format follows Keep a Changelog and SemVer.
4
+
5
+ ## [0.6.0] - 2026-09-13
6
+ ### Added
7
+ - `datadoc report`: Automated, standalone, high-fidelity HTML report generation (`datadoc report <dataset> [--target] [--output] [--title] [--preset]`). 100% self-contained single-file HTML with embedded responsive CSS, health grade scoring (A+ to F), column role classification, distribution statistics, and transformation plan.
8
+ - `datadoc compare`: Visual side-by-side dataset comparison command (`datadoc compare <raw> <transformed> [--target] [--html] [--json]`). Computes dimension deltas, missing cell reduction (100% resolution tracking), column lineage/lifecycle (retained, dropped, engineered), and numeric distribution shifts (imputation and scaling effects) with color-coded terminal tables and interactive HTML export.
9
+ - `TargetEncoderPlugin` (Priority 41): Empirical Bayes smoothed target encoding for high-cardinality categoricals: `y_hat = (n * cat_mean + m * global_mean) / (n + m)` to prevent target leakage and dimension explosion.
10
+ - `PolynomialFeaturesPlugin` (Priority 44): Degree-2 interactions (`x1 * x2`) and squared features (`x^2`) for numeric columns to capture non-linear signal for linear models.
11
+ - Dashboard enhancements: Added "View HTML Report" direct action in the header, navigation sidebar, and artifact actions panel.
12
+ - UI Server API: Added `GET /api/dataset/report` (standalone HTML audit report) and `GET /api/dataset/compare` (side-by-side comparison metrics).
13
+ - Standalone execution: Added `if __name__ == "__main__": app()` to `datadoc.cli.app`.
14
+
15
+ ## [0.5.0] - 2026-09-14
16
+ ### Added
17
+ - `datadoc.toml` / `pyproject.toml [tool.datadoc]` config file support with flag overrides.
18
+ - `datadoc wizard` guided TUI for `target`, `preset`, `drop_identifiers`, `deduplicate`, `scaling`, `clip_outliers`, `rare_frequency`; writes `datadoc.toml` + run dir.
19
+ - Presets `--preset quick|balanced|linear|tree|time|robust` mapping to `scaling`, `clip_outliers`, `estimator_family`.
20
+ - Short aliases `-t` / `-o` / `-p` / `-f` for `--target` / `--output` / `--pipeline` / `--format`.
21
+ - Shell completion via Typer (`add_completion=True`) — `datadoc --install-completion`.
22
+ - `datadoc diff` for `profile`/`plan`/`pipeline` JSON comparison (incl. ops added/removed).
23
+ - `datadoc lint` leakage lint (target duplication, null target, infinities, duplicates, profile findings).
24
+ - `datadoc plugins list|show` registry introspection, `datadoc.plugins` entry-points auto-discovery.
25
+ - New deterministic plugins: `DuplicateRemoverPlugin` (P05), `RareCategoryPlugin` (P42); `CategoricalEncoderPlugin` threshold reconciled 10 → 20.
26
+ - Pipeline artifact v2 with `provenance` (schema/columns hash, rows, dedup count, version); v1 artifacts still load.
27
+ - `plan` now surfaces `deduplicate`, `outlier_clipping`, `scaling`, rare-grouping details; new `explain_plan()`.
28
+ - `fit`/`run` flags: `--deduplicate`, `--rare-frequency`, `--cyclical`, `--no-hour`.
29
+ - Repeatable `--identifier-column` / `--ignore-column` on `plan`/`fit`/`run` (also via `datadoc.toml` lists), reaching `PipelineConfig.identifier_columns` / `ignored_columns` which previously had no CLI path.
30
+ - `transform --validate` via `drift_report()` (schema + median-shift drift).
31
+ - `evaluate --ablation` via `evaluate_ablation()` (full / no_clip / no_scaling / minimal).
32
+ - Notebook widgets: `profile_to_html()` + `_repr_html_()` for Jupyter/marimo.
33
+ - `export --format python|joblib` via `export_sklearn_artifact()` (joblib needs `ml` extra).
34
+ - Dashboard: Ctrl+K/Cmd+K palette, lineage panel (`/api/pipeline/lineage`), drift endpoint, new config knobs.
35
+ - PyPI-ready wheel: `web/dist` force-included as `datadoc/_webui`, so `datadoc ui` serves the React app from a plain pip install (verified in a clean venv); `ui_server` falls back to the checkout path in dev.
36
+ - `tomli>=2.0.0` dependency on Python < 3.11 for real TOML parsing.
37
+ - New `RELEASE_CHECKLIST.md` (referenced by `docs/production.html`); `uv.lock` re-synced; `datadoc.__version__` added as the code-level version source.
38
+ ### Changed
39
+ - `scikit-learn` moved back to optional `ml` extra for lighter core install.
40
+ - `PipelineConfig` docs clarified `resolved_scaling` and `plan` exposure.
41
+ - `run` now parities all `fit` flags.
42
+ ### Fixed
43
+ - Removed `product_specification.md` (Retrod PMS orphan).
44
+ - Fixed `CONTRIBUTING.md` pandas/engine refs.
45
+ - `plan` no longer lets `datadoc.toml` silently override explicit `--drop-identifiers`/`--task` flags.
46
+ - `wizard` crashed when delegating to `run` (unpassed params hit raw `typer.Option` defaults); all params are now explicit.
47
+ - `diff`/`plan --diff` labels corrected to "Only in A/B" (were backwards "added/removed").
48
+ - `estimator_family="both"` now truly fits linear + tree and keeps the stronger validation score (was silently tree-only); `resolved_scaling` maps `both` → `standard`.
49
+ - Dashboard export template now emits an executable script (`__main__` + argparse) and restores `train_provenance_`.
50
+ - Commented `datadoc.toml` (including the file `datadoc init` itself writes) crashed config loading on Python 3.10 without `tomli` — the fallback parser now strips inline comments and parses lists/quoted strings.
51
+ - Fixed installed-dashboard path resolution (`datadoc/cli/_webui` → `datadoc/_webui`).
52
+ - `strict_schema` now exposed via CLI/config.
53
+ - CI re-added.
54
+
55
+ ## [0.4.0] - 2026-08-09
56
+ ### Added
57
+ - Leakage-safe `DataDocPipeline` (`fit`/`transform`/`save`/`load`/`evaluate`/`export_python`) in `datadoc/core/pipeline.py`.
58
+ - `PipelineConfig` with 17 knobs (`target`, `task`, `drop_identifiers`, `scaling`, `clip_outliers`, ...).
59
+ - FastAPI dashboard `datadoc ui` + `web/` Vite+React.
60
+ - Optional extras `ai` (litellm), `ml`, `ui`.
61
+ ### Changed
62
+ - CLI narrowed to 7 commands `profile,plan,fit,transform,evaluate,export,run`; legacy `engine.py` removed.
63
+ - Polars as primary backend.
64
+
65
+ ## [0.3.0] - 2026-07-28
66
+ ### Added
67
+ - Agentic `agent.py` + `chat` command.
68
+ - FastAPI `ui` via `fastapi/uvicorn/multipart`.
69
+
70
+ ## [0.2.0] - 2026-07-26
71
+ ### Added
72
+ - Phase 2 AI planner `litellm`, `pydantic`, `dotenv`.
73
+ - `chat` + `engineer --ai`.
74
+
75
+ ## [0.1.0] - 2026-07-26
76
+ - Initial scaffold `typer/rich/pandas` + `MissingValuePlugin`.
77
+
78
+ ## Roadmap
79
+ - Export targets `dbt` / Airflow (see README).
80
+ - Text embeddings optional plugin.
@@ -1,13 +1,12 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.3
2
2
  Name: datadoc-cli
3
- Version: 0.4.0
3
+ Version: 0.6.0
4
4
  Summary: Leakage-safe, local-first preparation pipelines for tabular machine learning.
5
5
  Project-URL: Homepage, https://github.com/narain-karti/DATADOC
6
6
  Project-URL: Repository, https://github.com/narain-karti/DATADOC
7
7
  Project-URL: Issues, https://github.com/narain-karti/DATADOC/issues
8
8
  Author: narain-karti
9
- License-Expression: MIT
10
- License-File: LICENSE
9
+ License: MIT
11
10
  Classifier: Development Status :: 3 - Alpha
12
11
  Classifier: Intended Audience :: Developers
13
12
  Classifier: Intended Audience :: Science/Research
@@ -18,23 +17,29 @@ Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
18
  Classifier: Topic :: Scientific/Engineering
20
19
  Requires-Python: >=3.10
21
- Requires-Dist: numpy>=1.24.0
22
20
  Requires-Dist: plotext>=5.2.8
23
21
  Requires-Dist: polars>=0.20.0
24
22
  Requires-Dist: pydantic>=2.0.0
25
23
  Requires-Dist: python-dotenv>=1.0.0
26
24
  Requires-Dist: rich>=13.7.0
25
+ Requires-Dist: tomli>=2.0.0; python_version < '3.11'
27
26
  Requires-Dist: typer>=0.12.0
28
27
  Provides-Extra: ai
29
28
  Requires-Dist: litellm>=1.40.0; extra == 'ai'
29
+ Provides-Extra: all
30
+ Requires-Dist: fastapi>=0.115.0; extra == 'all'
31
+ Requires-Dist: litellm>=1.40.0; extra == 'all'
32
+ Requires-Dist: python-multipart>=0.0.20; extra == 'all'
33
+ Requires-Dist: scikit-learn>=1.7.2; extra == 'all'
34
+ Requires-Dist: uvicorn>=0.30.0; extra == 'all'
30
35
  Provides-Extra: dev
31
36
  Requires-Dist: build>=1.2.0; extra == 'dev'
32
37
  Requires-Dist: hatchling>=1.25.0; extra == 'dev'
33
38
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
34
39
  Requires-Dist: ruff>=0.4.0; extra == 'dev'
35
- Requires-Dist: scikit-learn>=1.4.0; extra == 'dev'
40
+ Requires-Dist: scikit-learn>=1.7.2; extra == 'dev'
36
41
  Provides-Extra: ml
37
- Requires-Dist: scikit-learn>=1.4.0; extra == 'ml'
42
+ Requires-Dist: scikit-learn>=1.7.2; extra == 'ml'
38
43
  Provides-Extra: ui
39
44
  Requires-Dist: fastapi>=0.115.0; extra == 'ui'
40
45
  Requires-Dist: python-multipart>=0.0.20; extra == 'ui'
@@ -92,6 +97,17 @@ DATADOC turns those steps into a reviewable, reusable pipeline.
92
97
  - **Optional AI planning:** AI can help explain or rank a constrained plan; it is never allowed to execute arbitrary generated code.
93
98
  - **Leakage-safe workflows:** Fitted statistics for imputation, categorical vocabularies, clipping, and scaling are learned from training data and saved as an artifact.
94
99
 
100
+ ### 📊 Empirical Proof: Does DATADOC Actually Improve Models?
101
+
102
+ Yes. We benchmarked naive manual preparation vs. DATADOC automated preprocessing on Kaggle's Titanic dataset under **5-fold Stratified Cross-Validation**:
103
+
104
+ | Model | Baseline (Naive Prep) | DATADOC Cleaned | Accuracy Δ | Relative Lift |
105
+ |:---|:---:|:---:|:---:|:---:|
106
+ | **Logistic Regression** | 78.90% ± 0.99% | **79.91% ± 1.90%** | **+1.01%** | **+1.28%** |
107
+ | **Random Forest** | 82.15% ± 2.45% | **82.82% ± 2.40%** | **+0.67%** | **+0.82%** |
108
+
109
+ *Why?* DATADOC extracts informative missingness indicators (`Age__missing`, `Cabin__missing`), frequency-encodes high-cardinality features (`Ticket`, `Cabin`), applies standard scaling, and isolates all statistics strictly to training splits to eliminate target leakage.
110
+
95
111
  ---
96
112
 
97
113
  ## 📦 Installation
@@ -109,30 +125,64 @@ pip install datadoc-cli
109
125
  ## 🛠️ Quick Start (CLI)
110
126
 
111
127
  You don't need to write a single line of Python to clean your data. Just use the CLI.
128
+ New here? Run the guided wizard — it asks for target + preset and runs everything:
129
+
130
+ ```bash
131
+ datadoc wizard train.csv
132
+ ```
133
+
134
+ Or run the one-shot happy path (profile → plan → fit → transform + manifest):
112
135
 
113
136
  ```bash
137
+ datadoc run train.csv --target churn --preset balanced --evaluate
138
+ ```
139
+
140
+ Full step-by-step (auditable) workflow:
141
+
142
+ ```bash
143
+ # 0. Optional: save repeatable settings (target, preset, scaling, ...)
144
+ datadoc init --preset balanced # writes datadoc.toml
145
+
114
146
  # 1. Inspect data-quality findings and column roles
115
- datadoc profile raw_data.csv --target churn --output profile.json
147
+ datadoc profile raw_data.csv --target churn --explain --output profile.json
116
148
 
117
149
  # 2. Review the proposed transformations before applying them
118
- datadoc plan raw_data.csv --target churn --output plan.json
150
+ datadoc plan raw_data.csv --target churn --explain --output plan.json
119
151
 
120
152
  # 3. Fit only on a training dataset, then save a reusable artifact
121
- datadoc fit train.csv --target churn --output artifacts/churn-pipeline.json
153
+ datadoc fit train.csv --target churn --preset balanced --rare-frequency 0.02 --output artifacts/churn-pipeline.json
122
154
 
123
155
  # 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
156
+ datadoc transform validation.csv --pipeline artifacts/churn-pipeline.json --output validation-features.parquet --validate
125
157
 
126
158
  # 5. Optionally benchmark a safe candidate pipeline against a baseline
127
159
  pip install "datadoc-cli[ml]"
128
- datadoc evaluate train.csv --target churn --task classification
160
+ datadoc evaluate train.csv --target churn --task classification --ablation
129
161
 
130
162
  # 6. Export a small executable wrapper around the fitted artifact
131
163
  datadoc export --pipeline artifacts/churn-pipeline.json --output pipeline.py
164
+ # or: datadoc export --pipeline artifacts/churn-pipeline.json --format joblib --output pipeline.joblib
132
165
 
166
+ # 7. Generate a standalone, shareable HTML audit report
167
+ datadoc report train.csv --target churn --output report.html
133
168
 
169
+ # 8. Visually compare raw vs transformed datasets side-by-side
170
+ datadoc compare train.csv validation-features.parquet --target churn --html compare.html
171
+
172
+ # 9. Lint for leakage risks / diff two plans
173
+ datadoc lint train.csv --target churn
174
+ datadoc diff plan-v1.json plan-v2.json
134
175
  ```
135
176
 
177
+ ### 🖥️ Web dashboard (same pipeline, visual)
178
+
179
+ ```bash
180
+ pip install "datadoc-cli[ui]"
181
+ datadoc ui train.csv --port 8000
182
+ ```
183
+
184
+ The local dashboard calls the same `DataDocPipeline` behind the CLI: profile findings and roles, preparation settings (target, scaling, identifiers, dedup, clipping, cyclical datetime, rare frequency), reviewable plan, fit with output-schema preview, lineage/provenance panel, transformed-CSV download, and an executable Python export. Press `Ctrl+K`/`Cmd+K` for the command palette. Full guide: [docs/ui.html](https://narain-karti.github.io/DATADOC/ui.html).
185
+
136
186
  ---
137
187
 
138
188
  ## 🐍 Python SDK (Library Usage)
@@ -161,13 +211,24 @@ For an observed model comparison, install the optional ML extra and call `pipeli
161
211
 
162
212
  | Command | Description |
163
213
  |---------|-------------|
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 |
214
+ | `datadoc wizard <file>` | Guided TUI: asks target/preset/scaling, writes `datadoc.toml`, runs pipeline |
215
+ | `datadoc init` | Writes a starter `datadoc.toml` (or `pyproject.toml [tool.datadoc]`) config |
216
+ | `datadoc profile <file>` | Data-quality report + roles (`--explain`, `--compare profile2.json`) |
217
+ | `datadoc plan <file>` | Explainable plan (`--explain`, `--diff plan2.json`) |
218
+ | `datadoc fit <train>` | Learns pipeline on train only (`--preset`, `--deduplicate`, `--rare-frequency`, `--cyclical`, `--no-hour`, repeatable `--identifier-column` / `--ignore-column`) |
219
+ | `datadoc transform <file>` | Applies saved artifact (`--validate` for schema + drift checks) |
220
+ | `datadoc evaluate <file>` | Candidate vs baseline (`--ablation` for per-component deltas) |
221
+ | `datadoc export` | Wrapper for artifact (`--format python\|joblib`) |
222
+ | `datadoc run <file>` | One-shot profile→plan→fit→transform + `manifest.json` (+ `--evaluate --ablation`) |
223
+ | `datadoc report <file>` | Generates a standalone, shareable HTML data health and preparation audit report |
224
+ | `datadoc compare <raw> <trans>` | Visual side-by-side dataset comparison (terminal table + HTML export) |
225
+ | `datadoc lint <file>` | Leakage/pitfall lint (target duplication, nulls, infinities, duplicates) |
226
+ | `datadoc diff <a.json> <b.json>` | Diff profile/plan/pipeline artifacts |
227
+ | `datadoc plugins list` | Lists 9 registered plugins (priorities, entry-points) |
228
+ | `datadoc ui <file>` | Local FastAPI dashboard (Ctrl+K palette, lineage panel, HTML report export) |
229
+
230
+ Short aliases: `-t/--target`, `-o/--output`, `-p/--pipeline`, `-f/--format`.
231
+ Presets: `--preset quick|balanced|linear|tree|time|robust`. Shell completion: `datadoc --install-completion`.
171
232
 
172
233
 
173
234
 
@@ -179,13 +240,17 @@ DATADOC operates as a fitted pipeline. Every transformation learns state only fr
179
240
 
180
241
  | Priority | Plugin | Action Performed |
181
242
  |----------|--------|-------------|
243
+ | 5 | **DuplicateRemoverPlugin** | Detects duplicate rows; `deduplicate=True` drops them at fit (train-only) |
182
244
  | 10 | **MissingValuePlugin** | Imputes missing numeric values with median, categorical with mode |
183
245
  | 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 |
246
+ | 30 | **DatetimePlugin** | Detects date strings and extracts year, month, day, day_of_week (+hour when time present, optional cyclical sin/cos) |
247
+ | 40 | **CategoricalEncoderPlugin** | Encodes categories using training vocabularies (threshold 20) and handles unseen values |
248
+ | 41 | **TargetEncoderPlugin** | Empirical Bayes smoothed target encoding: `(n * cat_mean + m * global_mean) / (n + m)` |
249
+ | 42 | **RareCategoryPlugin** | Groups rare categories (< `rare_category_min_frequency`) into `__RARE__` |
250
+ | 44 | **PolynomialFeaturesPlugin** | Generates degree-2 interaction terms (`x1 * x2`) and squared terms (`x^2`) |
186
251
  | 45 | **ScalingPlugin** | Applies configured standard or robust scaling, fit on training data only |
187
252
 
188
- The fitted pipeline is the production source of truth. Plugin work should follow the lifecycle `analyze → fittransform validate export_code`, with all learned state serializable and testable.
253
+ The fitted pipeline is the production source of truth. Plugin work should follow the lifecycle `analyze → recommendapply`, with fitted state (`median`, `clip`, `vocabularies`, `rare maps`, `hour flags`, `center/spread`) serializable in `pipeline.json` (artifact v2 with `provenance`). External plugins auto-register via `datadoc.plugins` entry-points.
189
254
 
190
255
  Want to build your own? See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to create and register custom plugins!
191
256
 
@@ -194,13 +259,17 @@ Want to build your own? See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to c
194
259
  ## 🗺️ Roadmap
195
260
 
196
261
  - [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
262
+ - [x] 9 Built-in deterministic plugins (duplicate, missing, outlier, datetime, encoder, target encoder, rare, polynomial, scaling)
263
+ - [x] Stunning Rich Terminal UI (wizard, presets, `datadoc.toml`, completion)
264
+ - [x] Pipeline export capability (`python` + `joblib`)
265
+ - [x] Polars backend and local-first pipeline artifacts (v2 + provenance)
201
266
  - [x] PyPI Release (`pip install datadoc-cli`)
202
267
  - [x] Constrained optional AI planning path
203
- - [x] Session-scoped local FastAPI dashboard
268
+ - [x] Session-scoped local FastAPI dashboard (Ctrl+K palette, lineage, drift)
269
+ - [x] Addictive loop: `profile --compare`, `plan --explain/--diff`, `transform --validate`, `evaluate --ablation`
270
+ - [x] Standalone HTML audit reports (`datadoc report`)
271
+ - [x] Visual dataset comparison engine (`datadoc compare`)
272
+ - [x] Notebook widgets (`profile_to_html`, `_repr_html_`)
204
273
  - [ ] Export targets for `dbt` and Apache Airflow
205
274
  - [x] Local FastAPI dashboard/API companion
206
275
 
@@ -214,4 +283,4 @@ This project is licensed under the MIT License. See [LICENSE](LICENSE) for detai
214
283
 
215
284
  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
285
 
217
- Maintainers can use the [0.4.0 release checklist](RELEASE_CHECKLIST.md) when preparing a tag and PyPI upload.
286
+ See [CHANGELOG.md](CHANGELOG.md) for the 0.6.0 release notes.
@@ -32,22 +32,33 @@
32
32
 
33
33
  ## 🚀 What is DATADOC?
34
34
 
35
- **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.
35
+ **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.
36
36
 
37
- 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.
37
+ 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.
38
38
 
39
- **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.
39
+ **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.
40
40
 
41
41
  ### ⚡ The Impact: Why Industry Professionals Use DATADOC
42
42
 
43
- Data Scientists and ML Engineers repeatedly rebuild the same preparation steps across projects.
44
- DATADOC turns those steps into a reviewable, reusable pipeline.
43
+ Data Scientists and ML Engineers repeatedly rebuild the same preparation steps across projects.
44
+ DATADOC turns those steps into a reviewable, reusable pipeline.
45
45
 
46
- - **Save boilerplate:** Review recommendations for imputing nulls, encoding categories, and optional scaling or clipping before applying them.
47
- - **Explainable by default:** The deterministic core records roles, findings, operations, protected columns, and fitted statistics in an inspectable artifact.
48
- - **Local-first:** The core package works offline. Optional ML, UI, and AI features are separate extras.
49
- - **Optional AI planning:** AI can help explain or rank a constrained plan; it is never allowed to execute arbitrary generated code.
50
- - **Leakage-safe workflows:** Fitted statistics for imputation, categorical vocabularies, clipping, and scaling are learned from training data and saved as an artifact.
46
+ - **Save boilerplate:** Review recommendations for imputing nulls, encoding categories, and optional scaling or clipping before applying them.
47
+ - **Explainable by default:** The deterministic core records roles, findings, operations, protected columns, and fitted statistics in an inspectable artifact.
48
+ - **Local-first:** The core package works offline. Optional ML, UI, and AI features are separate extras.
49
+ - **Optional AI planning:** AI can help explain or rank a constrained plan; it is never allowed to execute arbitrary generated code.
50
+ - **Leakage-safe workflows:** Fitted statistics for imputation, categorical vocabularies, clipping, and scaling are learned from training data and saved as an artifact.
51
+
52
+ ### 📊 Empirical Proof: Does DATADOC Actually Improve Models?
53
+
54
+ Yes. We benchmarked naive manual preparation vs. DATADOC automated preprocessing on Kaggle's Titanic dataset under **5-fold Stratified Cross-Validation**:
55
+
56
+ | Model | Baseline (Naive Prep) | DATADOC Cleaned | Accuracy Δ | Relative Lift |
57
+ |:---|:---:|:---:|:---:|:---:|
58
+ | **Logistic Regression** | 78.90% ± 0.99% | **79.91% ± 1.90%** | **+1.01%** | **+1.28%** |
59
+ | **Random Forest** | 82.15% ± 2.45% | **82.82% ± 2.40%** | **+0.67%** | **+0.82%** |
60
+
61
+ *Why?* DATADOC extracts informative missingness indicators (`Age__missing`, `Cabin__missing`), frequency-encodes high-cardinality features (`Ticket`, `Cabin`), applies standard scaling, and isolates all statistics strictly to training splits to eliminate target leakage.
51
62
 
52
63
  ---
53
64
 
@@ -59,58 +70,92 @@ DATADOC is published on PyPI. You can install it globally via `pip` or `uv`:
59
70
  pip install datadoc-cli
60
71
  ```
61
72
 
62
- *(Requires Python 3.10+)*
73
+ *(Requires Python 3.10+)*
63
74
 
64
75
  ---
65
76
 
66
77
  ## 🛠️ Quick Start (CLI)
67
78
 
68
79
  You don't need to write a single line of Python to clean your data. Just use the CLI.
80
+ New here? Run the guided wizard — it asks for target + preset and runs everything:
81
+
82
+ ```bash
83
+ datadoc wizard train.csv
84
+ ```
85
+
86
+ Or run the one-shot happy path (profile → plan → fit → transform + manifest):
69
87
 
70
88
  ```bash
71
- # 1. Inspect data-quality findings and column roles
72
- datadoc profile raw_data.csv --target churn --output profile.json
73
-
74
- # 2. Review the proposed transformations before applying them
75
- datadoc plan raw_data.csv --target churn --output plan.json
76
-
77
- # 3. Fit only on a training dataset, then save a reusable artifact
78
- datadoc fit train.csv --target churn --output artifacts/churn-pipeline.json
79
-
80
- # 4. Apply the fitted artifact to validation, test, or new data
81
- datadoc transform validation.csv --pipeline artifacts/churn-pipeline.json --output validation-features.parquet
82
-
83
- # 5. Optionally benchmark a safe candidate pipeline against a baseline
84
- pip install "datadoc-cli[ml]"
85
- datadoc evaluate train.csv --target churn --task classification
86
-
87
- # 6. Export a small executable wrapper around the fitted artifact
88
- datadoc export --pipeline artifacts/churn-pipeline.json --output pipeline.py
89
+ datadoc run train.csv --target churn --preset balanced --evaluate
90
+ ```
91
+
92
+ Full step-by-step (auditable) workflow:
93
+
94
+ ```bash
95
+ # 0. Optional: save repeatable settings (target, preset, scaling, ...)
96
+ datadoc init --preset balanced # writes datadoc.toml
97
+
98
+ # 1. Inspect data-quality findings and column roles
99
+ datadoc profile raw_data.csv --target churn --explain --output profile.json
100
+
101
+ # 2. Review the proposed transformations before applying them
102
+ datadoc plan raw_data.csv --target churn --explain --output plan.json
103
+
104
+ # 3. Fit only on a training dataset, then save a reusable artifact
105
+ datadoc fit train.csv --target churn --preset balanced --rare-frequency 0.02 --output artifacts/churn-pipeline.json
89
106
 
107
+ # 4. Apply the fitted artifact to validation, test, or new data
108
+ datadoc transform validation.csv --pipeline artifacts/churn-pipeline.json --output validation-features.parquet --validate
90
109
 
110
+ # 5. Optionally benchmark a safe candidate pipeline against a baseline
111
+ pip install "datadoc-cli[ml]"
112
+ datadoc evaluate train.csv --target churn --task classification --ablation
113
+
114
+ # 6. Export a small executable wrapper around the fitted artifact
115
+ datadoc export --pipeline artifacts/churn-pipeline.json --output pipeline.py
116
+ # or: datadoc export --pipeline artifacts/churn-pipeline.json --format joblib --output pipeline.joblib
117
+
118
+ # 7. Generate a standalone, shareable HTML audit report
119
+ datadoc report train.csv --target churn --output report.html
120
+
121
+ # 8. Visually compare raw vs transformed datasets side-by-side
122
+ datadoc compare train.csv validation-features.parquet --target churn --html compare.html
123
+
124
+ # 9. Lint for leakage risks / diff two plans
125
+ datadoc lint train.csv --target churn
126
+ datadoc diff plan-v1.json plan-v2.json
127
+ ```
128
+
129
+ ### 🖥️ Web dashboard (same pipeline, visual)
130
+
131
+ ```bash
132
+ pip install "datadoc-cli[ui]"
133
+ datadoc ui train.csv --port 8000
91
134
  ```
92
135
 
136
+ The local dashboard calls the same `DataDocPipeline` behind the CLI: profile findings and roles, preparation settings (target, scaling, identifiers, dedup, clipping, cyclical datetime, rare frequency), reviewable plan, fit with output-schema preview, lineage/provenance panel, transformed-CSV download, and an executable Python export. Press `Ctrl+K`/`Cmd+K` for the command palette. Full guide: [docs/ui.html](https://narain-karti.github.io/DATADOC/ui.html).
137
+
93
138
  ---
94
139
 
95
140
  ## 🐍 Python SDK (Library Usage)
96
141
 
97
- 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:
142
+ 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:
98
143
 
99
144
  ```python
100
- from datadoc import DataDocPipeline, PipelineConfig
101
- import polars as pl
102
-
103
- # Fit only on the training split. The target is protected from feature transforms.
104
- train_df = pl.read_csv("train.csv")
105
- pipeline = DataDocPipeline(PipelineConfig(target="churn")).fit(train_df)
106
- pipeline.save("artifacts/churn-pipeline.json")
107
-
108
- # Transform data that was never used to fit statistics.
109
- validation_df = pl.read_csv("validation.csv")
110
- validation_features = pipeline.transform(validation_df)
111
- ```
112
-
113
- 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.
145
+ from datadoc import DataDocPipeline, PipelineConfig
146
+ import polars as pl
147
+
148
+ # Fit only on the training split. The target is protected from feature transforms.
149
+ train_df = pl.read_csv("train.csv")
150
+ pipeline = DataDocPipeline(PipelineConfig(target="churn")).fit(train_df)
151
+ pipeline.save("artifacts/churn-pipeline.json")
152
+
153
+ # Transform data that was never used to fit statistics.
154
+ validation_df = pl.read_csv("validation.csv")
155
+ validation_features = pipeline.transform(validation_df)
156
+ ```
157
+
158
+ 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.
114
159
 
115
160
  ---
116
161
 
@@ -118,13 +163,24 @@ For an observed model comparison, install the optional ML extra and call `pipeli
118
163
 
119
164
  | Command | Description |
120
165
  |---------|-------------|
121
- | `datadoc profile <file>` | Produces a data-quality report and confidence-scored column roles |
122
- | `datadoc plan <file>` | Outputs an explainable transformation plan without modifying data |
123
- | `datadoc fit <train>` | Learns a pipeline only from training data and saves JSON state |
124
- | `datadoc transform <file>` | Applies a saved pipeline to validation, test, or inference data |
125
- | `datadoc evaluate <file>` | Optionally compares a candidate pipeline with a baseline using leakage-aware splits |
126
- | `datadoc export` | Creates an executable wrapper for a saved pipeline artifact |
127
- | `datadoc run <file>` | Writes a profile, plan, artifact, transformed data, and lineage manifest |
166
+ | `datadoc wizard <file>` | Guided TUI: asks target/preset/scaling, writes `datadoc.toml`, runs pipeline |
167
+ | `datadoc init` | Writes a starter `datadoc.toml` (or `pyproject.toml [tool.datadoc]`) config |
168
+ | `datadoc profile <file>` | Data-quality report + roles (`--explain`, `--compare profile2.json`) |
169
+ | `datadoc plan <file>` | Explainable plan (`--explain`, `--diff plan2.json`) |
170
+ | `datadoc fit <train>` | Learns pipeline on train only (`--preset`, `--deduplicate`, `--rare-frequency`, `--cyclical`, `--no-hour`, repeatable `--identifier-column` / `--ignore-column`) |
171
+ | `datadoc transform <file>` | Applies saved artifact (`--validate` for schema + drift checks) |
172
+ | `datadoc evaluate <file>` | Candidate vs baseline (`--ablation` for per-component deltas) |
173
+ | `datadoc export` | Wrapper for artifact (`--format python\|joblib`) |
174
+ | `datadoc run <file>` | One-shot profile→plan→fit→transform + `manifest.json` (+ `--evaluate --ablation`) |
175
+ | `datadoc report <file>` | Generates a standalone, shareable HTML data health and preparation audit report |
176
+ | `datadoc compare <raw> <trans>` | Visual side-by-side dataset comparison (terminal table + HTML export) |
177
+ | `datadoc lint <file>` | Leakage/pitfall lint (target duplication, nulls, infinities, duplicates) |
178
+ | `datadoc diff <a.json> <b.json>` | Diff profile/plan/pipeline artifacts |
179
+ | `datadoc plugins list` | Lists 9 registered plugins (priorities, entry-points) |
180
+ | `datadoc ui <file>` | Local FastAPI dashboard (Ctrl+K palette, lineage panel, HTML report export) |
181
+
182
+ Short aliases: `-t/--target`, `-o/--output`, `-p/--pipeline`, `-f/--format`.
183
+ Presets: `--preset quick|balanced|linear|tree|time|robust`. Shell completion: `datadoc --install-completion`.
128
184
 
129
185
 
130
186
 
@@ -132,17 +188,21 @@ For an observed model comparison, install the optional ML extra and call `pipeli
132
188
 
133
189
  ## 🧩 Architecture & Plugins
134
190
 
135
- 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.
191
+ 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.
136
192
 
137
193
  | Priority | Plugin | Action Performed |
138
194
  |----------|--------|-------------|
195
+ | 5 | **DuplicateRemoverPlugin** | Detects duplicate rows; `deduplicate=True` drops them at fit (train-only) |
139
196
  | 10 | **MissingValuePlugin** | Imputes missing numeric values with median, categorical with mode |
140
- | 20 | **OutlierPlugin** | Offers optional IQR clipping; clipping is not forced by default |
141
- | 30 | **DatetimePlugin** | Detects date strings and extracts year, month, day, day_of_week |
142
- | 40 | **CategoricalEncoderPlugin** | Encodes categories using training vocabularies and handles unseen values |
143
- | 45 | **ScalingPlugin** | Applies configured standard or robust scaling, fit on training data only |
197
+ | 20 | **OutlierPlugin** | Offers optional IQR clipping; clipping is not forced by default |
198
+ | 30 | **DatetimePlugin** | Detects date strings and extracts year, month, day, day_of_week (+hour when time present, optional cyclical sin/cos) |
199
+ | 40 | **CategoricalEncoderPlugin** | Encodes categories using training vocabularies (threshold 20) and handles unseen values |
200
+ | 41 | **TargetEncoderPlugin** | Empirical Bayes smoothed target encoding: `(n * cat_mean + m * global_mean) / (n + m)` |
201
+ | 42 | **RareCategoryPlugin** | Groups rare categories (< `rare_category_min_frequency`) into `__RARE__` |
202
+ | 44 | **PolynomialFeaturesPlugin** | Generates degree-2 interaction terms (`x1 * x2`) and squared terms (`x^2`) |
203
+ | 45 | **ScalingPlugin** | Applies configured standard or robust scaling, fit on training data only |
144
204
 
145
- The fitted pipeline is the production source of truth. Plugin work should follow the lifecycle `analyze → fittransform validate export_code`, with all learned state serializable and testable.
205
+ The fitted pipeline is the production source of truth. Plugin work should follow the lifecycle `analyze → recommendapply`, with fitted state (`median`, `clip`, `vocabularies`, `rare maps`, `hour flags`, `center/spread`) serializable in `pipeline.json` (artifact v2 with `provenance`). External plugins auto-register via `datadoc.plugins` entry-points.
146
206
 
147
207
  Want to build your own? See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to create and register custom plugins!
148
208
 
@@ -151,15 +211,19 @@ Want to build your own? See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to c
151
211
  ## 🗺️ Roadmap
152
212
 
153
213
  - [x] Core Engine with plugin orchestration
154
- - [x] 5 Built-in deterministic plugins
155
- - [x] Stunning Rich Terminal UI
156
- - [x] Pipeline export capability
157
- - [x] Polars backend and local-first pipeline artifacts
214
+ - [x] 9 Built-in deterministic plugins (duplicate, missing, outlier, datetime, encoder, target encoder, rare, polynomial, scaling)
215
+ - [x] Stunning Rich Terminal UI (wizard, presets, `datadoc.toml`, completion)
216
+ - [x] Pipeline export capability (`python` + `joblib`)
217
+ - [x] Polars backend and local-first pipeline artifacts (v2 + provenance)
158
218
  - [x] PyPI Release (`pip install datadoc-cli`)
159
- - [x] Constrained optional AI planning path
160
- - [x] Session-scoped local FastAPI dashboard
219
+ - [x] Constrained optional AI planning path
220
+ - [x] Session-scoped local FastAPI dashboard (Ctrl+K palette, lineage, drift)
221
+ - [x] Addictive loop: `profile --compare`, `plan --explain/--diff`, `transform --validate`, `evaluate --ablation`
222
+ - [x] Standalone HTML audit reports (`datadoc report`)
223
+ - [x] Visual dataset comparison engine (`datadoc compare`)
224
+ - [x] Notebook widgets (`profile_to_html`, `_repr_html_`)
161
225
  - [ ] Export targets for `dbt` and Apache Airflow
162
- - [x] Local FastAPI dashboard/API companion
226
+ - [x] Local FastAPI dashboard/API companion
163
227
 
164
228
  ---
165
229
 
@@ -167,8 +231,8 @@ Want to build your own? See [CONTRIBUTING.md](CONTRIBUTING.md) to learn how to c
167
231
 
168
232
  This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.
169
233
 
170
- ## 🤝 Contributing
171
-
172
- 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).
173
-
174
- Maintainers can use the [0.4.0 release checklist](RELEASE_CHECKLIST.md) when preparing a tag and PyPI upload.
234
+ ## 🤝 Contributing
235
+
236
+ 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).
237
+
238
+ See [CHANGELOG.md](CHANGELOG.md) for the 0.6.0 release notes.