Skip to main content

Datasculpt

CI Python 3.11+ License: MIT

Deterministic dataset shape and semantic inference for tabular data.

The Problem

Before data can be governed, queried, or compared across systems, its structural intent must be understood. Most data systems (catalogs, semantic layers, governance engines) assume this understanding exists but don't produce it.

The Solution

Datasculpt infers and explains structural intent:

  • Shape — Is this long or wide? Time in headers or rows?
  • Grain — What uniquely identifies each row?
  • Roles — Which columns are dimensions, measures, or keys?

What It Is Not

  • Not a data catalog (produces metadata, doesn't store it)
  • Not an ETL tool (analyzes structure, doesn't transform data)
  • Not a semantic layer (understands layout, not meaning)

Quick Start

pip install datasculpt
from datasculpt import infer

result = infer("data.csv")

print(result.proposal.shape_hypothesis)      # wide_observations
print(result.decision_record.grain.key_columns)  # ['geo_id', 'sex', 'age_group']

for col in result.proposal.columns:
    print(f"{col.name}: {col.role.value}")
# geo_id: dimension
# sex: dimension
# age_group: dimension
# population: measure
# unemployed: measure

Try It

🔬 Live Demo — Analyze datasets in your browser. No installation, no data leaves your machine.

Documentation

📚 Full Documentation

  • Quickstart — First inference in 5 minutes
  • Examples — See inference on different dataset shapes
  • Concepts — Understand shapes, roles, and grain
  • API Reference — Function signatures and types

Key Features

Five Dataset Shapes

Shape Description
long_observations Rows are atomic observations
long_indicators Unpivoted indicator/value pairs
wide_observations Measures as columns
wide_time_columns Time periods in column headers
series_column Time series as arrays in cells

Eight Column Roles

Role Purpose
key Contributes to uniqueness
dimension Categorical grouping
measure Numeric, aggregatable
time Temporal dimension
indicator_name Names in unpivoted data
value Values in unpivoted data
series Embedded time series
metadata Descriptive, non-analytical

Deterministic Inference

Same input → same output. No LLMs, no randomness, no hidden state.

Evidence-Based

Every decision is scored and justified:

>>> result.decision_record.hypotheses
[
    HypothesisScore(hypothesis=WIDE_OBSERVATIONS, score=0.72, reasons=[...]),
    HypothesisScore(hypothesis=LONG_OBSERVATIONS, score=0.65, reasons=[...]),
]

Interactive Mode

Resolve ambiguity with questions:

result = infer("data.csv", interactive=True)

if result.pending_questions:
    answers = {result.pending_questions[0].id: "long_indicators"}
    result = apply_answers(result, answers)

Installation Options

# Core only
pip install datasculpt

# With optional adapters
pip install datasculpt[frictionless]   # Schema validation
pip install datasculpt[dataprofiler]   # Statistical profiling
pip install datasculpt[all]            # Everything

Requirements

  • Python 3.11+
  • pandas 2.0+

Development

# Install with dev dependencies
make install-dev

# Run tests
make test

# Lint and format
make lint
make format

# Type checking
make typecheck

# Serve docs locally
make docs-serve

License

MIT

Release files for datasculpt 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for datasculpt 0.1.0
File Size Uploaded
datasculpt-0.1.0.tar.gz 391.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for datasculpt 0.1.0
File Interpreter ABI Platform
datasculpt-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 502.5 kB

Release files / datasculpt-0.1.0.tar.gz

Download URL datasculpt-0.1.0.tar.gz
Size 391.2 kB
Tags Source
SHA-256 checksum
How to use checksums
24ddfdfc1f19da65372ff1fc5ee51cbb03bab86356b819e90b0ceab737525528
BLAKE2b-256 checksum
How to use checksums
591f1e1f0d6dc338748234269abc96b700d511a5d456b8ed6469fe97bd0e6064
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / datasculpt-0.1.0-py3-none-any.whl

Download URL datasculpt-0.1.0-py3-none-any.whl
Size 111.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ff253fd5a1d0e1102dc93f9b1a61ede2cf101478e3fb041c7ab4869e1b3e7827
BLAKE2b-256 checksum
How to use checksums
c3004eb02587d2628cf12cc6841d46202c9de0eec65d41923e83a4d46454eaeb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page