cd /news/developer-tools/stop-writing-isnull-audit-your-datas… · home topics developer-tools article
[ARTICLE · art-62095] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

Stop Writing .isnull() — Audit Your Dataset in One Line with OMR

A developer built OMR (Omni Data Refinement), an open-source Python library that replaces dozens of lines of boilerplate data quality checks with a single call. The library provides a health score, auto-cleaning, schema validation, drift detection, and statistical analysis for datasets. OMR aims to be the first tool run after loading data, offering a quality layer on top of pandas.

read2 min views1 publishedJul 16, 2026

Every time I start a new data project, I write the same boilerplate:

python
df.isnull().sum()
df.duplicated().sum()
df.dtypes
df.describe()
df[df['age'] < 0]
After doing this for the hundredth time, I built OMR (Omni Data Refinement) — a Python library that replaces all of that with a single call.

What is OMR?
OMR is an open-source Python framework for dataset quality, validation, profiling, and monitoring. Think of it as a health check for your data — before you do any ML, EDA, or transformation, you should know how healthy your data actually is.

Installation
bash
pip install omni-data-refinement
Only needs pandas, numpy, and rich. No cloud, no LLMs.

The Core Feature: Health Score
python
import pandas as pd
from omr import Dataset
df = pd.read_csv("your_data.csv")
report = Dataset(df).health()
print(report.score)  # e.g. 87/100
You get a 0-100 quality score covering 5 dimensions:

Pillar  What it checks
Completeness    Missing values
Uniqueness  Duplicates
Consistency Type mismatches
Validity    Value ranges and format rules
Conformity  Schema adherence
Auto-Cleaning
python
dataset = Dataset(df)
dataset.clean()
dataset.explain_changes()  # See exactly what was fixed
OMR auto-resolves missing values, duplicates, and type mismatches — and gives you a full transformation log so nothing is a black box.

Schema Validation
python
from omr import schemas
schema = {
    "age":    schemas.PositiveInteger(max=120),
    "salary": schemas.PositiveFloat(min=10000),
    "status": schemas.OneOf("active", "inactive"),
    "email":  schemas.Email()
}
dataset.validate(schema)
Drift Detection
Compare your current dataset against production or a previous version:

python
prod_dataset = Dataset(pd.read_csv("prod_data.csv"))
dataset.compare(prod_dataset)
Uses PSI, KS Test, and JS Divergence under the hood.

Statistical Analysis
python
dataset.analyze()
Column Profiling (replaces .describe())
python
dataset.profile()
Unlike .describe() which only covers numeric columns, OMR profiles every column — numeric, categorical, and boolean — in a clean terminal table.

The Fluent API
Chain everything together:

python
clean_df = (Dataset(df)
    .health()
    .clean()
    .analyze()
    .export())  # Exports HTML, Markdown, or JSON report
Why I Built This
The goal is for OMR to become the first thing you run after pd.read_csv() — not a replacement for Pandas, but the quality layer on top of it.

Links
PyPI: pip install omni-data-refinement
GitHub: https://github.com/Omar-Alshafai2/omni-data-refinement
Docs: https://Omar-Alshafai2.github.io/omni-data-refinement/
Examples: https://Omar-Alshafai2.github.io/omni-data-refinement/examples/

What data quality problems do you run into most? I would love to know what to build next.
── more in #developer-tools 4 stories · sorted by recency
── more on @omr 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/stop-writing-isnull-…] indexed:0 read:2min 2026-07-16 ·