Onceover profiles a Polars DataFrame in Rust and returns column summaries, relationships, and data-quality findings. It is also available as a Rust crate for Polars 0.55.
import polars as pl
import onceover
df = pl.DataFrame({
"order_id": [1, 2, 3, 4],
"quantity": [2, 1, 4, 3],
"double_quantity": [4, 2, 8, 6],
})
report = onceover.profile(df)
print(report.overview["headline"])Inspect the result through these properties:
report.findingslists candidate keys, repeated rows, column relationships, date gaps, and other results. Each entry names the columns involved and contains the measurements used to report it.report.columnscontains counts, statistics, value frequencies, and a suggested role for each column. These summaries use all rows.report.coveragelists the checks that ran or were skipped and their sample sizes and search limits.report.groupsconnects findings that involve the same columns.
Install the package, profile a table, inspect the results, choose work limits, and save reports.
Worked analyses of a vendor extract, redundant features, and churn shifts.
The calculations behind each detector: counts, dependencies, predictions, rules, associations, row clusters, and dated residual changes.
Rust crates, DataFrame access, counting, parallel execution, and tests.
Research references, possible extensions, JSON fields, and a glossary.
Start here¶
Quickstart: profile a small table and inspect its findings.
Reading findings: interpret results and filter them by column, category, or validation method.
Coverage: choose detectors and work limits.
Large tables: adjust sampling and search costs for larger inputs.
Serialization and JSON reference: store reports and read them in another program.
The analysis notebook provides a longer example with charts and checks against planted relationships. The scale benchmark measures runtime, memory, and recovery of known relationships on a large table.
Using the results¶
A finding describes the rows examined by its detector. Before applying a predictive result to new data, inspect its sample and validation method and test whether it performs as well on that data. If a finding is absent, check coverage to see whether the relevant detector ran and how much of the input it examined.
import polars as pl
import onceover
df = pl.DataFrame({
"order_id": [1, 2, 3, 4],
"quantity": [2, 1, 4, 3],
"double_quantity": [4, 2, 8, 6],
})
report = onceover.profile(df)
print(report.overview["headline"])4 rows × 3 columns (standard budget); 0 functional dependencies, 0 predictive dependencies, 0 conditional rules