framevitals 0.1.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.
- framevitals-0.1.0/LICENSE +21 -0
- framevitals-0.1.0/PKG-INFO +415 -0
- framevitals-0.1.0/README.md +353 -0
- framevitals-0.1.0/pyproject.toml +107 -0
- framevitals-0.1.0/setup.cfg +4 -0
- framevitals-0.1.0/src/framevitals/__init__.py +50 -0
- framevitals-0.1.0/src/framevitals/advanced_indicators.py +138 -0
- framevitals-0.1.0/src/framevitals/agent_brief.py +537 -0
- framevitals-0.1.0/src/framevitals/agent_tools.py +362 -0
- framevitals-0.1.0/src/framevitals/ai_agent.py +873 -0
- framevitals-0.1.0/src/framevitals/ai_insights.py +298 -0
- framevitals-0.1.0/src/framevitals/analysis_inventory.py +122 -0
- framevitals-0.1.0/src/framevitals/analysis_selector.py +68 -0
- framevitals-0.1.0/src/framevitals/anomaly_ensemble.py +320 -0
- framevitals-0.1.0/src/framevitals/api.py +149 -0
- framevitals-0.1.0/src/framevitals/baseline_model.py +349 -0
- framevitals-0.1.0/src/framevitals/chart_planner.py +228 -0
- framevitals-0.1.0/src/framevitals/cleaner.py +85 -0
- framevitals-0.1.0/src/framevitals/cli.py +150 -0
- framevitals-0.1.0/src/framevitals/column_roles.py +241 -0
- framevitals-0.1.0/src/framevitals/dataset_signals.py +153 -0
- framevitals-0.1.0/src/framevitals/deep_statistics.py +297 -0
- framevitals-0.1.0/src/framevitals/deep_statistics_v2.py +648 -0
- framevitals-0.1.0/src/framevitals/drift_analysis.py +375 -0
- framevitals-0.1.0/src/framevitals/explainability.py +436 -0
- framevitals-0.1.0/src/framevitals/feature_importance.py +345 -0
- framevitals-0.1.0/src/framevitals/frontend_api.py +284 -0
- framevitals-0.1.0/src/framevitals/health_score.py +101 -0
- framevitals-0.1.0/src/framevitals/loader.py +133 -0
- framevitals-0.1.0/src/framevitals/ml_preprocessing.py +143 -0
- framevitals-0.1.0/src/framevitals/ml_readiness.py +48 -0
- framevitals-0.1.0/src/framevitals/model_diagnostics.py +592 -0
- framevitals-0.1.0/src/framevitals/model_leaderboard.py +501 -0
- framevitals-0.1.0/src/framevitals/multicollinearity.py +164 -0
- framevitals-0.1.0/src/framevitals/pdf_report_builder.py +1225 -0
- framevitals-0.1.0/src/framevitals/pipeline.py +312 -0
- framevitals-0.1.0/src/framevitals/profiler.py +94 -0
- framevitals-0.1.0/src/framevitals/rag_index.py +296 -0
- framevitals-0.1.0/src/framevitals/report_generator.py +16 -0
- framevitals-0.1.0/src/framevitals/safe_pandas.py +295 -0
- framevitals-0.1.0/src/framevitals/security.py +59 -0
- framevitals-0.1.0/src/framevitals/segment_analysis.py +81 -0
- framevitals-0.1.0/src/framevitals/signal_engine.py +96 -0
- framevitals-0.1.0/src/framevitals/target_analyzer.py +180 -0
- framevitals-0.1.0/src/framevitals/target_leakage.py +119 -0
- framevitals-0.1.0/src/framevitals/text_profile.py +408 -0
- framevitals-0.1.0/src/framevitals/time_series.py +542 -0
- framevitals-0.1.0/src/framevitals/visualizer.py +1032 -0
- framevitals-0.1.0/src/framevitals.egg-info/PKG-INFO +415 -0
- framevitals-0.1.0/src/framevitals.egg-info/SOURCES.txt +75 -0
- framevitals-0.1.0/src/framevitals.egg-info/dependency_links.txt +1 -0
- framevitals-0.1.0/src/framevitals.egg-info/entry_points.txt +2 -0
- framevitals-0.1.0/src/framevitals.egg-info/requires.txt +42 -0
- framevitals-0.1.0/src/framevitals.egg-info/top_level.txt +1 -0
- framevitals-0.1.0/tests/test_advanced_diagnostics.py +166 -0
- framevitals-0.1.0/tests/test_agent_foundation.py +210 -0
- framevitals-0.1.0/tests/test_agent_layer.py +416 -0
- framevitals-0.1.0/tests/test_ai_agent.py +144 -0
- framevitals-0.1.0/tests/test_analysis_smoke.py +60 -0
- framevitals-0.1.0/tests/test_analytics_modules.py +87 -0
- framevitals-0.1.0/tests/test_application_import_boundaries.py +47 -0
- framevitals-0.1.0/tests/test_baseline_model.py +132 -0
- framevitals-0.1.0/tests/test_cli.py +64 -0
- framevitals-0.1.0/tests/test_core_metrics.py +78 -0
- framevitals-0.1.0/tests/test_dataset_diagnostics.py +79 -0
- framevitals-0.1.0/tests/test_deep_statistics.py +113 -0
- framevitals-0.1.0/tests/test_feature_importance.py +151 -0
- framevitals-0.1.0/tests/test_framevitals_pipeline.py +112 -0
- framevitals-0.1.0/tests/test_loader.py +52 -0
- framevitals-0.1.0/tests/test_ml_engine.py +128 -0
- framevitals-0.1.0/tests/test_model_diagnostics.py +143 -0
- framevitals-0.1.0/tests/test_package_boundary.py +48 -0
- framevitals-0.1.0/tests/test_pandas_compatibility.py +61 -0
- framevitals-0.1.0/tests/test_pipeline_helpers.py +136 -0
- framevitals-0.1.0/tests/test_public_api.py +80 -0
- framevitals-0.1.0/tests/test_target_intelligence.py +122 -0
- framevitals-0.1.0/tests/test_visualization_engine.py +134 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Parth Dongre
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: framevitals
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Data quality, drift detection, anomaly analysis, and ML-readiness diagnostics for pandas and tabular data.
|
|
5
|
+
Author: Parth Dongre
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Documentation, https://github.com/parthdongre/FrameVitals#readme
|
|
8
|
+
Project-URL: Repository, https://github.com/parthdongre/FrameVitals
|
|
9
|
+
Project-URL: Issues, https://github.com/parthdongre/FrameVitals/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/parthdongre/FrameVitals/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: data-quality,data-profiling,machine-learning,anomaly-detection,data-drift,eda,tabular-data
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: pandas>=2.2
|
|
25
|
+
Requires-Dist: numpy>=1.26
|
|
26
|
+
Requires-Dist: matplotlib>=3.8
|
|
27
|
+
Requires-Dist: seaborn>=0.13
|
|
28
|
+
Requires-Dist: openpyxl>=3.1
|
|
29
|
+
Requires-Dist: xlrd>=2.0
|
|
30
|
+
Requires-Dist: scipy>=1.13
|
|
31
|
+
Requires-Dist: statsmodels>=0.14
|
|
32
|
+
Requires-Dist: scikit-learn>=1.5
|
|
33
|
+
Requires-Dist: pydantic>=2.7
|
|
34
|
+
Provides-Extra: ml
|
|
35
|
+
Requires-Dist: xgboost>=2.0; extra == "ml"
|
|
36
|
+
Requires-Dist: lightgbm>=4.3; extra == "ml"
|
|
37
|
+
Requires-Dist: pyod>=2.0; extra == "ml"
|
|
38
|
+
Requires-Dist: shap>=0.45; extra == "ml"
|
|
39
|
+
Provides-Extra: ai
|
|
40
|
+
Requires-Dist: ollama>=0.3; extra == "ai"
|
|
41
|
+
Provides-Extra: web
|
|
42
|
+
Requires-Dist: flask>=3.0; extra == "web"
|
|
43
|
+
Requires-Dist: gunicorn>=22.0; extra == "web"
|
|
44
|
+
Requires-Dist: werkzeug>=3.0; extra == "web"
|
|
45
|
+
Provides-Extra: all
|
|
46
|
+
Requires-Dist: xgboost>=2.0; extra == "all"
|
|
47
|
+
Requires-Dist: lightgbm>=4.3; extra == "all"
|
|
48
|
+
Requires-Dist: pyod>=2.0; extra == "all"
|
|
49
|
+
Requires-Dist: shap>=0.45; extra == "all"
|
|
50
|
+
Requires-Dist: ollama>=0.3; extra == "all"
|
|
51
|
+
Requires-Dist: flask>=3.0; extra == "all"
|
|
52
|
+
Requires-Dist: gunicorn>=22.0; extra == "all"
|
|
53
|
+
Requires-Dist: werkzeug>=3.0; extra == "all"
|
|
54
|
+
Provides-Extra: dev
|
|
55
|
+
Requires-Dist: pytest>=8.2; extra == "dev"
|
|
56
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
57
|
+
Requires-Dist: hypothesis>=6.100; extra == "dev"
|
|
58
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
59
|
+
Requires-Dist: twine>=5.1; extra == "dev"
|
|
60
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
61
|
+
Dynamic: license-file
|
|
62
|
+
|
|
63
|
+
<div align="center">
|
|
64
|
+
|
|
65
|
+
# FrameVitals
|
|
66
|
+
|
|
67
|
+
### Know if your data is healthy, stable, and ML-ready — before your model finds out.
|
|
68
|
+
|
|
69
|
+
**A Python toolkit for data-quality diagnostics, drift detection, anomaly analysis, and ML-readiness checks on pandas and tabular data.**
|
|
70
|
+
|
|
71
|
+
[](https://github.com/parthdongre/FrameVitals/actions/workflows/test.yml)
|
|
72
|
+
[](https://www.python.org/)
|
|
73
|
+
[](CHANGELOG.md)
|
|
74
|
+
[](LICENSE)
|
|
75
|
+
[](https://github.com/parthdongre/FrameVitals)
|
|
76
|
+
|
|
77
|
+
[Install](#installation) · [Quick start](#quick-start) · [CLI](#command-line-interface) · [Roadmap](#roadmap) · [Contributing](#contributing)
|
|
78
|
+
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
FrameVitals turns a pandas DataFrame or tabular dataset into a **structured health report** you can inspect, serialize, compare, and eventually enforce in CI.
|
|
84
|
+
|
|
85
|
+
Instead of stitching together separate profiling, quality, drift, anomaly, and ML-readiness tools, FrameVitals gives you one deliberately small entry point:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import framevitals as fv
|
|
89
|
+
|
|
90
|
+
report = fv.analyze(df)
|
|
91
|
+
drift = fv.compare(reference_df, current_df)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The goal is simple: **catch bad data before it becomes a bad model, a broken dashboard, or a production incident.**
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
┌──────────────────────────┐
|
|
98
|
+
DataFrame / file ─► ANALYZE │
|
|
99
|
+
│ profile · health · ML │
|
|
100
|
+
│ stats · anomalies · risk │
|
|
101
|
+
└────────────┬─────────────┘
|
|
102
|
+
│
|
|
103
|
+
▼
|
|
104
|
+
structured report
|
|
105
|
+
|
|
106
|
+
Reference + current ───────────► COMPARE ─────► drift verdict
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Why FrameVitals?
|
|
110
|
+
|
|
111
|
+
Most data checks answer one narrow question. FrameVitals is designed around the questions that show up repeatedly in real data and ML workflows:
|
|
112
|
+
|
|
113
|
+
| Question | FrameVitals |
|
|
114
|
+
| --- | --- |
|
|
115
|
+
| Is this dataset structurally healthy? | Missingness, duplicates, cardinality, schema and quality diagnostics |
|
|
116
|
+
| Is it ready for modelling? | ML-readiness scoring, target-aware checks and model diagnostics |
|
|
117
|
+
| Are there suspicious rows or features? | Statistical diagnostics, anomaly detection, leakage and multicollinearity checks |
|
|
118
|
+
| Has production data changed? | Reference-vs-current drift analysis with numeric and categorical tests |
|
|
119
|
+
| Can I use the result in code? | JSON-friendly structured output through a Python API and CLI |
|
|
120
|
+
| Will analysis unexpectedly write files? | No — filesystem artifacts are opt-in |
|
|
121
|
+
|
|
122
|
+
FrameVitals is **package-first**. The core library lives under `src/framevitals/`; the Flask API and React dashboard are optional interfaces around the same analysis engine.
|
|
123
|
+
|
|
124
|
+
## Installation
|
|
125
|
+
|
|
126
|
+
FrameVitals supports **Python 3.11, 3.12, and 3.13**.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
pip install framevitals
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Optional feature groups keep heavier dependencies out of the default install:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
pip install "framevitals[ml]" # XGBoost, LightGBM, PyOD, SHAP
|
|
136
|
+
pip install "framevitals[ai]" # Ollama-backed AI features
|
|
137
|
+
pip install "framevitals[web]" # Flask web runtime
|
|
138
|
+
pip install "framevitals[all]" # all optional runtime features
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Quick start
|
|
142
|
+
|
|
143
|
+
### Analyze a DataFrame
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
import pandas as pd
|
|
147
|
+
import framevitals as fv
|
|
148
|
+
|
|
149
|
+
customers = pd.read_csv("customers.csv")
|
|
150
|
+
report = fv.analyze(customers)
|
|
151
|
+
|
|
152
|
+
print(report["health"]["overall_score"])
|
|
153
|
+
print(report["ml_readiness"])
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
File paths work too:
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
report = fv.analyze("customers.csv", mode="quick")
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
FrameVitals supports pandas DataFrames and common tabular file formats including CSV, TSV, Excel, and JSON.
|
|
163
|
+
|
|
164
|
+
### Add a supervised-learning target
|
|
165
|
+
|
|
166
|
+
```python
|
|
167
|
+
report = fv.analyze(
|
|
168
|
+
customers,
|
|
169
|
+
target="churn",
|
|
170
|
+
mode="deep",
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
print(report["model_leaderboard"])
|
|
174
|
+
print(report["explainability"])
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Target-aware analysis can surface modelling risks such as leakage, imbalance, redundant features, unstable relationships, and weak baselines.
|
|
178
|
+
|
|
179
|
+
### Compare datasets for drift
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
reference = pd.read_csv("training_data.csv")
|
|
183
|
+
current = pd.read_csv("production_batch.csv")
|
|
184
|
+
|
|
185
|
+
result = fv.compare(reference, current)
|
|
186
|
+
|
|
187
|
+
print(result["summary"]["overall_verdict"])
|
|
188
|
+
print(result["columns"][:3])
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Numeric drift uses **PSI, Kolmogorov-Smirnov statistics, and standardized mean shift**. Categorical drift uses **PSI and chi-square diagnostics**.
|
|
192
|
+
|
|
193
|
+
## The public API
|
|
194
|
+
|
|
195
|
+
The public API is intentionally small while FrameVitals is in alpha.
|
|
196
|
+
|
|
197
|
+
| API | Status | Purpose |
|
|
198
|
+
| --- | --- | --- |
|
|
199
|
+
| `framevitals.analyze(...)` | Available in `0.1.0` | Profile and diagnose one dataset |
|
|
200
|
+
| `framevitals.compare(...)` | Available in `0.1.0` | Compare reference and current data for drift |
|
|
201
|
+
| `framevitals.validate(...)` | In development | Validate data against an inferred or explicit contract |
|
|
202
|
+
| snapshots / monitoring | Roadmap | Reuse baselines for recurring schema and drift checks |
|
|
203
|
+
|
|
204
|
+
This keeps the library easy to learn while leaving room for the result model and validation system to mature before `1.0`.
|
|
205
|
+
|
|
206
|
+
## What FrameVitals checks
|
|
207
|
+
|
|
208
|
+
| Area | Examples |
|
|
209
|
+
| --- | --- |
|
|
210
|
+
| **Structure** | shape, dtypes, semantic column roles, date/text detection |
|
|
211
|
+
| **Data quality** | missingness, duplicates, constants, cardinality, outliers |
|
|
212
|
+
| **Health scoring** | overall dataset health plus component-level diagnostics |
|
|
213
|
+
| **ML readiness** | modelling readiness, risky columns, preprocessing recommendations |
|
|
214
|
+
| **Statistics** | distribution checks, normality, correlations, effect-size style diagnostics |
|
|
215
|
+
| **Anomalies** | multivariate and robust outlier detectors, optional ensemble methods |
|
|
216
|
+
| **Target intelligence** | task inference, leakage hints, multicollinearity, feature/model diagnostics |
|
|
217
|
+
| **Drift** | PSI, KS, chi-square, mean shift, new or disappearing categories |
|
|
218
|
+
| **Time series** | date-aware diagnostics, stationarity, decomposition and forecast previews |
|
|
219
|
+
| **Text** | text-column profiling, vocabulary and lightweight semantic diagnostics |
|
|
220
|
+
| **Explainability** | model feature importance and SHAP when the optional ML stack is installed |
|
|
221
|
+
|
|
222
|
+
Not every analysis runs on every dataset. FrameVitals uses dataset signals, selected mode, target availability, and installed optional dependencies to decide what is useful and safe to execute.
|
|
223
|
+
|
|
224
|
+
## Analysis modes
|
|
225
|
+
|
|
226
|
+
```python
|
|
227
|
+
fv.analyze(df, mode="quick")
|
|
228
|
+
fv.analyze(df, mode="standard")
|
|
229
|
+
fv.analyze(df, mode="deep")
|
|
230
|
+
fv.analyze(df, mode="research")
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
| Mode | Best for |
|
|
234
|
+
| --- | --- |
|
|
235
|
+
| `quick` | Fast structural, quality, and ML-readiness checks |
|
|
236
|
+
| `standard` | Everyday analysis with broader diagnostics |
|
|
237
|
+
| `deep` | Target-aware and heavier statistical analysis |
|
|
238
|
+
| `research` | Largest analysis budget for exploratory work |
|
|
239
|
+
|
|
240
|
+
## Filesystem artifacts are opt-in
|
|
241
|
+
|
|
242
|
+
FrameVitals is designed to behave like a library first. Calling the Python API does not need to scatter reports and cleaned files around your working directory.
|
|
243
|
+
|
|
244
|
+
```python
|
|
245
|
+
report = fv.analyze(df)
|
|
246
|
+
assert report["cleaning"]["output_path"] is None
|
|
247
|
+
|
|
248
|
+
report = fv.analyze(df, artifacts=True)
|
|
249
|
+
print(report["cleaning"]["output_path"])
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Command-line interface
|
|
253
|
+
|
|
254
|
+
FrameVitals also ships with a CLI for scripts, terminals, and future CI workflows.
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
framevitals --version
|
|
258
|
+
|
|
259
|
+
framevitals analyze dataset.csv
|
|
260
|
+
framevitals analyze dataset.csv --mode quick
|
|
261
|
+
framevitals analyze dataset.csv --target churn --mode deep
|
|
262
|
+
framevitals analyze dataset.csv --output report.json
|
|
263
|
+
framevitals analyze dataset.csv --artifacts
|
|
264
|
+
|
|
265
|
+
framevitals compare train.csv production.csv
|
|
266
|
+
framevitals compare train.csv production.csv --columns age,income
|
|
267
|
+
framevitals compare train.csv production.csv --output drift.json
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Optional ML and AI features
|
|
271
|
+
|
|
272
|
+
The default package contains the core data-health engine. Heavier features are separated into extras so a simple install stays predictable.
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
pip install "framevitals[ml]"
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Adds optional integrations including XGBoost, LightGBM, PyOD and SHAP.
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
pip install "framevitals[ai]"
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Adds Ollama-backed interpretation and question-answering features. AI is treated as an optional explanation layer; computed diagnostics remain usable without a reachable model.
|
|
285
|
+
|
|
286
|
+
## Web dashboard
|
|
287
|
+
|
|
288
|
+
The repository includes an optional **Flask API + React/TypeScript dashboard** for interactive exploration.
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
pip install -e ".[web]"
|
|
292
|
+
python app.py
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Then in another terminal:
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
cd frontend
|
|
299
|
+
npm ci
|
|
300
|
+
npm run dev
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Typical local endpoints:
|
|
304
|
+
|
|
305
|
+
- Flask API: `http://127.0.0.1:5055`
|
|
306
|
+
- React dashboard: `http://127.0.0.1:5173`
|
|
307
|
+
|
|
308
|
+
The public project website will remain separate from the package runtime so the library does not depend on a hosted service.
|
|
309
|
+
|
|
310
|
+
## Design principles
|
|
311
|
+
|
|
312
|
+
FrameVitals is being built around a few constraints that are easy to lose in analytics projects:
|
|
313
|
+
|
|
314
|
+
- **DataFrame first** — use it directly from Python without routing through a web app.
|
|
315
|
+
- **Structured results** — return reusable data, not only screenshots or prose.
|
|
316
|
+
- **Safe defaults** — no unexpected artifact writes and graceful optional-feature fallbacks.
|
|
317
|
+
- **Small public API** — make the common path obvious before exposing every internal module.
|
|
318
|
+
- **Optional heavy dependencies** — ML, AI, and web features should not bloat a basic install.
|
|
319
|
+
- **Production direction** — drift, contracts, snapshots, and CI quality gates are first-class roadmap items.
|
|
320
|
+
|
|
321
|
+
## Project layout
|
|
322
|
+
|
|
323
|
+
```text
|
|
324
|
+
.
|
|
325
|
+
├── src/framevitals/ # canonical installable Python package
|
|
326
|
+
├── tests/ # automated test suite
|
|
327
|
+
├── frontend/ # optional React + TypeScript dashboard
|
|
328
|
+
├── templates/ # Flask report pages
|
|
329
|
+
├── static/ # web/report assets
|
|
330
|
+
├── app.py # optional Flask API/server
|
|
331
|
+
├── pyproject.toml # package metadata and dependency groups
|
|
332
|
+
└── .github/workflows/ # CI, package validation and publishing
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
New reusable Python code belongs in `src/framevitals/` and should import through the `framevitals.*` namespace.
|
|
336
|
+
|
|
337
|
+
## Development
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
git clone https://github.com/parthdongre/FrameVitals.git
|
|
341
|
+
cd FrameVitals
|
|
342
|
+
git switch dev
|
|
343
|
+
|
|
344
|
+
python -m venv .venv
|
|
345
|
+
source .venv/bin/activate
|
|
346
|
+
python -m pip install --upgrade pip
|
|
347
|
+
pip install -e ".[all,dev]"
|
|
348
|
+
|
|
349
|
+
pytest
|
|
350
|
+
python -m build
|
|
351
|
+
python -m twine check dist/*
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
On Windows PowerShell:
|
|
355
|
+
|
|
356
|
+
```powershell
|
|
357
|
+
.venv\Scripts\Activate.ps1
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
CI validates the core package across Python 3.11–3.13, optional features, the React build, wheel contents, distribution metadata, and a clean-wheel install.
|
|
361
|
+
|
|
362
|
+
Development is integrated through `dev`; `main` is kept release-ready.
|
|
363
|
+
|
|
364
|
+
## Roadmap
|
|
365
|
+
|
|
366
|
+
FrameVitals is moving toward a complete data-health quality gate:
|
|
367
|
+
|
|
368
|
+
```text
|
|
369
|
+
0.1 ANALYZE + COMPARE
|
|
370
|
+
data health · ML readiness · target diagnostics · drift
|
|
371
|
+
|
|
372
|
+
0.2 VALIDATE + SNAPSHOTS
|
|
373
|
+
data contracts · CI gates · reusable baselines
|
|
374
|
+
|
|
375
|
+
0.3 RESULT OBJECTS + ADVANCED DRIFT
|
|
376
|
+
stronger result model · large-data handling · richer monitoring
|
|
377
|
+
|
|
378
|
+
0.4 EXTENSIBILITY + INTEGRATIONS
|
|
379
|
+
configurable checks · adapters · monitoring workflows
|
|
380
|
+
|
|
381
|
+
1.0 STABLE DATA-HEALTH API
|
|
382
|
+
dependable analyze → compare → validate → monitor workflow
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
Near-term work is tracked through issues and the `dev` branch.
|
|
386
|
+
|
|
387
|
+
## Project status
|
|
388
|
+
|
|
389
|
+
FrameVitals `0.1.x` is **alpha software**. The core API is usable, but the project is intentionally still refining naming, result schemas, thresholds, and extension points before `1.0`.
|
|
390
|
+
|
|
391
|
+
If you are using FrameVitals in a project, feedback about real datasets, false positives, missing diagnostics, performance, and API ergonomics is especially valuable.
|
|
392
|
+
|
|
393
|
+
## Contributing
|
|
394
|
+
|
|
395
|
+
Contributions are welcome.
|
|
396
|
+
|
|
397
|
+
A good contribution is focused, tested, and improves either the reliability of a diagnostic or the clarity of the public workflow.
|
|
398
|
+
|
|
399
|
+
Start with [CONTRIBUTING.md](CONTRIBUTING.md), and please read the [Code of Conduct](CODE_OF_CONDUCT.md) and [Security Policy](SECURITY.md).
|
|
400
|
+
|
|
401
|
+
## Releases
|
|
402
|
+
|
|
403
|
+
Releases are built and validated in GitHub Actions and published through PyPI Trusted Publishing. See [RELEASING.md](RELEASING.md) and [CHANGELOG.md](CHANGELOG.md).
|
|
404
|
+
|
|
405
|
+
## License
|
|
406
|
+
|
|
407
|
+
FrameVitals is open source under the [MIT License](LICENSE).
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
<div align="center">
|
|
412
|
+
|
|
413
|
+
**If FrameVitals is useful to you, consider starring the repository — it helps the project grow.**
|
|
414
|
+
|
|
415
|
+
</div>
|