FrameVitals
Know if your data is healthy, stable, and ML-ready — before your model finds out.
A Python toolkit for data-quality diagnostics, drift detection, anomaly analysis, and ML-readiness checks on pandas and tabular data.
Install · Quick start · CLI · Roadmap · Contributing
FrameVitals turns a pandas DataFrame or tabular dataset into a structured health report you can inspect, serialize, compare, and eventually enforce in CI.
Instead of stitching together separate profiling, quality, drift, anomaly, and ML-readiness tools, FrameVitals gives you one deliberately small entry point:
import framevitals as fv
report = fv.analyze(df)
drift = fv.compare(reference_df, current_df)
The goal is simple: catch bad data before it becomes a bad model, a broken dashboard, or a production incident.
┌──────────────────────────┐
DataFrame / file ─► ANALYZE │
│ profile · health · ML │
│ stats · anomalies · risk │
└────────────┬─────────────┘
│
▼
structured report
Reference + current ───────────► COMPARE ─────► drift verdict
Why FrameVitals?
Most data checks answer one narrow question. FrameVitals is designed around the questions that show up repeatedly in real data and ML workflows:
| Question | FrameVitals |
|---|---|
| Is this dataset structurally healthy? | Missingness, duplicates, cardinality, schema and quality diagnostics |
| Is it ready for modelling? | ML-readiness scoring, target-aware checks and model diagnostics |
| Are there suspicious rows or features? | Statistical diagnostics, anomaly detection, leakage and multicollinearity checks |
| Has production data changed? | Reference-vs-current drift analysis with numeric and categorical tests |
| Can I use the result in code? | JSON-friendly structured output through a Python API and CLI |
| Will analysis unexpectedly write files? | No — filesystem artifacts are opt-in |
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.
Installation
FrameVitals supports Python 3.11, 3.12, and 3.13.
pip install framevitals
Optional feature groups keep heavier dependencies out of the default install:
pip install "framevitals[ml]" # XGBoost, LightGBM, PyOD, SHAP
pip install "framevitals[ai]" # Ollama-backed AI features
pip install "framevitals[web]" # Flask web runtime
pip install "framevitals[all]" # all optional runtime features
Quick start
Analyze a DataFrame
import pandas as pd
import framevitals as fv
customers = pd.read_csv("customers.csv")
report = fv.analyze(customers)
print(report["health"]["overall_score"])
print(report["ml_readiness"])
File paths work too:
report = fv.analyze("customers.csv", mode="quick")
FrameVitals supports pandas DataFrames and common tabular file formats including CSV, TSV, Excel, and JSON.
Add a supervised-learning target
report = fv.analyze(
customers,
target="churn",
mode="deep",
)
print(report["model_leaderboard"])
print(report["explainability"])
Target-aware analysis can surface modelling risks such as leakage, imbalance, redundant features, unstable relationships, and weak baselines.
Compare datasets for drift
reference = pd.read_csv("training_data.csv")
current = pd.read_csv("production_batch.csv")
result = fv.compare(reference, current)
print(result["summary"]["overall_verdict"])
print(result["columns"][:3])
Numeric drift uses PSI, Kolmogorov-Smirnov statistics, and standardized mean shift. Categorical drift uses PSI and chi-square diagnostics.
The public API
The public API is intentionally small while FrameVitals is in alpha.
| API | Status | Purpose |
|---|---|---|
framevitals.analyze(...) |
Available in 0.1.0 |
Profile and diagnose one dataset |
framevitals.compare(...) |
Available in 0.1.0 |
Compare reference and current data for drift |
framevitals.validate(...) |
In development | Validate data against an inferred or explicit contract |
| snapshots / monitoring | Roadmap | Reuse baselines for recurring schema and drift checks |
This keeps the library easy to learn while leaving room for the result model and validation system to mature before 1.0.
What FrameVitals checks
| Area | Examples |
|---|---|
| Structure | shape, dtypes, semantic column roles, date/text detection |
| Data quality | missingness, duplicates, constants, cardinality, outliers |
| Health scoring | overall dataset health plus component-level diagnostics |
| ML readiness | modelling readiness, risky columns, preprocessing recommendations |
| Statistics | distribution checks, normality, correlations, effect-size style diagnostics |
| Anomalies | multivariate and robust outlier detectors, optional ensemble methods |
| Target intelligence | task inference, leakage hints, multicollinearity, feature/model diagnostics |
| Drift | PSI, KS, chi-square, mean shift, new or disappearing categories |
| Time series | date-aware diagnostics, stationarity, decomposition and forecast previews |
| Text | text-column profiling, vocabulary and lightweight semantic diagnostics |
| Explainability | model feature importance and SHAP when the optional ML stack is installed |
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.
Analysis modes
fv.analyze(df, mode="quick")
fv.analyze(df, mode="standard")
fv.analyze(df, mode="deep")
fv.analyze(df, mode="research")
| Mode | Best for |
|---|---|
quick |
Fast structural, quality, and ML-readiness checks |
standard |
Everyday analysis with broader diagnostics |
deep |
Target-aware and heavier statistical analysis |
research |
Largest analysis budget for exploratory work |
Filesystem artifacts are opt-in
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.
report = fv.analyze(df)
assert report["cleaning"]["output_path"] is None
report = fv.analyze(df, artifacts=True)
print(report["cleaning"]["output_path"])
Command-line interface
FrameVitals also ships with a CLI for scripts, terminals, and future CI workflows.
framevitals --version
framevitals analyze dataset.csv
framevitals analyze dataset.csv --mode quick
framevitals analyze dataset.csv --target churn --mode deep
framevitals analyze dataset.csv --output report.json
framevitals analyze dataset.csv --artifacts
framevitals compare train.csv production.csv
framevitals compare train.csv production.csv --columns age,income
framevitals compare train.csv production.csv --output drift.json
Optional ML and AI features
The default package contains the core data-health engine. Heavier features are separated into extras so a simple install stays predictable.
pip install "framevitals[ml]"
Adds optional integrations including XGBoost, LightGBM, PyOD and SHAP.
pip install "framevitals[ai]"
Adds Ollama-backed interpretation and question-answering features. AI is treated as an optional explanation layer; computed diagnostics remain usable without a reachable model.
Web dashboard
The repository includes an optional Flask API + React/TypeScript dashboard for interactive exploration.
pip install -e ".[web]"
python app.py
Then in another terminal:
cd frontend
npm ci
npm run dev
Typical local endpoints:
- Flask API:
http://127.0.0.1:5055 - React dashboard:
http://127.0.0.1:5173
The public project website will remain separate from the package runtime so the library does not depend on a hosted service.
Design principles
FrameVitals is being built around a few constraints that are easy to lose in analytics projects:
- DataFrame first — use it directly from Python without routing through a web app.
- Structured results — return reusable data, not only screenshots or prose.
- Safe defaults — no unexpected artifact writes and graceful optional-feature fallbacks.
- Small public API — make the common path obvious before exposing every internal module.
- Optional heavy dependencies — ML, AI, and web features should not bloat a basic install.
- Production direction — drift, contracts, snapshots, and CI quality gates are first-class roadmap items.
Project layout
.
├── src/framevitals/ # canonical installable Python package
├── tests/ # automated test suite
├── frontend/ # optional React + TypeScript dashboard
├── templates/ # Flask report pages
├── static/ # web/report assets
├── app.py # optional Flask API/server
├── pyproject.toml # package metadata and dependency groups
└── .github/workflows/ # CI, package validation and publishing
New reusable Python code belongs in src/framevitals/ and should import through the framevitals.* namespace.
Development
git clone https://github.com/parthdongre/FrameVitals.git
cd FrameVitals
git switch dev
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e ".[all,dev]"
pytest
python -m build
python -m twine check dist/*
On Windows PowerShell:
.venv\Scripts\Activate.ps1
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.
Development is integrated through dev; main is kept release-ready.
Roadmap
FrameVitals is moving toward a complete data-health quality gate:
0.1 ANALYZE + COMPARE
data health · ML readiness · target diagnostics · drift
0.2 VALIDATE + SNAPSHOTS
data contracts · CI gates · reusable baselines
0.3 RESULT OBJECTS + ADVANCED DRIFT
stronger result model · large-data handling · richer monitoring
0.4 EXTENSIBILITY + INTEGRATIONS
configurable checks · adapters · monitoring workflows
1.0 STABLE DATA-HEALTH API
dependable analyze → compare → validate → monitor workflow
Near-term work is tracked through issues and the dev branch.
Project status
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.
If you are using FrameVitals in a project, feedback about real datasets, false positives, missing diagnostics, performance, and API ergonomics is especially valuable.
Contributing
Contributions are welcome.
A good contribution is focused, tested, and improves either the reliability of a diagnostic or the clarity of the public workflow.
Start with CONTRIBUTING.md, and please read the Code of Conduct and Security Policy.
Releases
Releases are built and validated in GitHub Actions and published through PyPI Trusted Publishing. See RELEASING.md and CHANGELOG.md.
License
FrameVitals is open source under the MIT License.
If FrameVitals is useful to you, consider starring the repository — it helps the project grow.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file framevitals-0.1.0.tar.gz.
File metadata
- Download URL: framevitals-0.1.0.tar.gz
- Upload date:
- Size: 135.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d780c353ac75126f891cb2fadf5e30046a0829b8e7ac57fc65a5ec36c12eaaef
|
|
| MD5 |
19692d4d514168411781940550f47e88
|
|
| BLAKE2b-256 |
f239784200e1dd8b2dfd47876c481ccb3877e1b1bada526bba35f896aeebe6fe
|
Provenance
The following attestation bundles were made for framevitals-0.1.0.tar.gz:
Publisher:
release.yml on parthdongre/FrameVitals
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
framevitals-0.1.0.tar.gz -
Subject digest:
d780c353ac75126f891cb2fadf5e30046a0829b8e7ac57fc65a5ec36c12eaaef - Sigstore transparency entry: 2476378054
- Sigstore integration time:
-
Permalink:
parthdongre/FrameVitals@3da1432168fbfcb3dbe99fcfb6f6200f5e63214b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/parthdongre
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3da1432168fbfcb3dbe99fcfb6f6200f5e63214b -
Trigger Event:
release
-
Statement type:
File details
Details for the file framevitals-0.1.0-py3-none-any.whl.
File metadata
- Download URL: framevitals-0.1.0-py3-none-any.whl
- Upload date:
- Size: 136.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1605024021ea7851f87f2c9bb31e138bf673cc3e6602596a8dab214779488d56
|
|
| MD5 |
350b055fa1a864b5a897f3c7c17321bb
|
|
| BLAKE2b-256 |
098f417a1cb28800023c1c28658c205dadb7a0dac9a6d2d85400e5f4cc69fc66
|
Provenance
The following attestation bundles were made for framevitals-0.1.0-py3-none-any.whl:
Publisher:
release.yml on parthdongre/FrameVitals
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
framevitals-0.1.0-py3-none-any.whl -
Subject digest:
1605024021ea7851f87f2c9bb31e138bf673cc3e6602596a8dab214779488d56 - Sigstore transparency entry: 2476378075
- Sigstore integration time:
-
Permalink:
parthdongre/FrameVitals@3da1432168fbfcb3dbe99fcfb6f6200f5e63214b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/parthdongre
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3da1432168fbfcb3dbe99fcfb6f6200f5e63214b -
Trigger Event:
release
-
Statement type: