Skip to main content

dsr-data-tools

PyPI version Python versions License Changelog

Data analysis and exploration tools for exploratory data analysis (EDA).

Version 2.2.6: Added split-safe TARGET encoding support, including train-only fitting with holdout mapping reuse and editable smoothing controls (target_column, min_samples_leaf, smoothing).

Features

  • Dataset Analysis: Comprehensive statistical summaries and data quality assessment.
  • Data Exploration: Tools for understanding data distributions, correlations, and patterns.
  • Quality Metrics: Missing value detection, data type analysis, and anomaly identification.
  • Statistically Guided Feature Interactions: Automatic discovery of meaningful feature interactions using Mutual Information and Pearson Correlation.
  • Recommendation Engine: Intelligent pipeline for Boolean mapping, Numerical casting, and Datetime standardization with customizable execution priority.
  • Feature Math and Transforms: Build derived features with arithmetic operations and apply reusable unary transforms (log, sqrt, scaling, reciprocal, and more).
  • User-Guided ColumnHints: Explicitly guide the engine with metadata for financial, geospatial, or temporal data to override automated heuristics.
  • Intelligent Boolean Mapping: Detects and standardizes diverse truthiness indicators (e.g., "Y/N", "Active/Inactive", "1/0") into proper boolean types.
  • Cyclic Feature Extraction: Decomposes datetimes into periodic Sine/Cosine features to preserve temporal relationships for machine learning.
  • Numerical Precision Optimization: Standardize decimal depth using configurable rounding modes (Nearest, Bankers, Up, Down).
  • Metadata-Driven Customization: Use class-level metadata to define "editable" fields, enabling seamless integration with YAML-based orchestration.

Installation

pip install dsr-data-tools

Usage

import pandas as pd
from dsr_data_tools import analyze_dataset

# Load your data
df = pd.read_csv("data.csv")

# Perform comprehensive analysis
# Returns DataframeInfo, RecommendationManager (or None), and per-column text output
df_info, manager, column_analysis_output = analyze_dataset(df)

# info() returns a formatted summary string
summary = df_info.info()
print(summary)

# Access per-column analysis output (example: first available column)
first_col = next(iter(column_analysis_output))
print(column_analysis_output[first_col])

Datetime Conversion Recommendation

generate_recommendations() detects object/string columns that are likely datetimes and recommends converting them to a proper datetime dtype.

import pandas as pd
from dsr_data_tools.analysis import generate_recommendations
from dsr_data_tools.recommendations import apply_recommendations

# Example column with mostly valid date strings
df = pd.DataFrame({
    "date_str": [
        "2025-01-01",
        "2025-01-02",
        "2025-01-03",
        "2025-01-04",
        "invalid",  # one invalid value
    ]
    * 10  # scale up rows
})

recs = generate_recommendations(df)

# If detected, apply the datetime conversion recommendation
if "date_str" in recs and "datetime_conversion" in recs["date_str"]:
    df_converted = apply_recommendations(
        df, {"date_str": recs["date_str"]["datetime_conversion"]}
    )
    # Column is now datetime64; invalid entries coerced to NaT
    print(df_converted["date_str"].dtype)  # datetime64[ns]

Boolean Classification

# The engine now handles semantic mapping, recognizing 'Y' as True
# based on common indicators rather than just alphabetical order
from dsr_data_tools.recommendations import BooleanClassificationRecommendation

df = pd.DataFrame({"active": ["Y", "N", "Y"]})
rec = BooleanClassificationRecommendation(
    column_name="active", description="Convert to bool", values=["Y", "N"]
)

# Returns [True, False, True]
df_bool = rec.apply(df)

Date Durations

Calculate the numeric duration between two datetime columns in specific units such as 'seconds', 'minutes', 'hours', or 'days'.

from dsr_data_tools.recommendations import DatetimeDurationRecommendation

rec = DatetimeDurationRecommendation(
    start_column="order_date",
    end_column="delivery_date",
    output_column="days_to_deliver",
    unit="days",
)

df = rec.apply(df)

Cyclic Feature Naming and Staging

For FeatureExtractionRecommendation, cyclic output names are treated as paired features.

  • If you rename only one side (for example sin_hour) via output_columns, the paired name (cos_hour) is inferred automatically.
  • This inferred pairing is applied both when features are written during apply() and when RecommendationManager validates staged dependencies.
  • A later-stage recommendation can safely reference the inferred paired column without adding an explicit second mapping.

Interactive Missing Value handling

The engine allows choosing between statistical imputation (mean/median/mode), constant filling, or row/column removal.

from dataclasses import fields

# Discover which fields are whitelisted for user edits in your pipeline
editable_fields = [f.name for f in fields(rec) if f.metadata.get("editable", False)]
# Returns: ['strategy', 'fill_value', 'notes', 'enabled', 'alias']

Guided Recommendations with ColumnHints

Users can provide a ColumnHint to specify the 'logical type' of a column and set constraints like rounding, bounds, or specific feature extraction needs.

Supported ColumnHint coverage includes dataset-transforming and feature-engineering recommendation types such as datetime extraction, aggregation, categorical/encoding guidance, numeric and dtype conversions, binning, value replacement, outlier detection, boolean conversion, geospatial and distance handling, plus explicit drop/ignore behavior.

ClassImbalanceRecommendation is intentionally not represented as a ColumnHint. It is an advisory, training-time recommendation about the target distribution, and its apply() method does not mutate the dataset.

import pandas as pd
from dsr_data_tools.analysis import RecommendationManager
from dsr_data_tools.recommendations import ColumnHint, RoundingMode

# Load data
df = pd.read_csv("data.csv")

# Define explicit hints to override or guide the engine
hints = {
    "unit_price": ColumnHint.financial(
        decimal_places=2, rounding_mode=RoundingMode.BANKERS
    ),
    "user_id": ColumnHint.numeric(convert_to_int=True),
    "internal_notes": ColumnHint.ignore(),
}

manager = RecommendationManager()
manager.generate_recommendations(df, hints=hints)

# Display the recommended pipeline
for rec in manager._pipeline:
    rec.info()

Performance

This library is optimized for large-scale data processing using vectorized operations.

  • Vectorized Integer Checks: Optimized from $O(N)$ Python-level application to vectorized modulo operations, resulting in a 5-6× speed increase.
  • Cached Data Scans: Common operations like dropna() and unique() are cached to minimize redundant data scans across wide datasets.
  • Efficient Scaling: Outlier handling and scaling utilize NumPy vectorized operations and Scikit-Learn transformers for high throughput.

Benchmarks

A benchmark script compares per-element apply(is_integer) against a vectorized modulo check. On large series, the vectorized approach is typically 5–6× faster.

python scripts/benchmark_integer_checks.py           # default size (2,000,000)
python scripts/benchmark_integer_checks.py 5000000  # custom size

Or via Makefile target:

make benchmark                # default N=2,000,000
make benchmark N=5000000      # custom size

Requirements

  • Python >= 3.10
  • dsr-utils >= 1.4.0
  • numpy >= 2.4.4
  • pandas >= 3.0.2
  • scikit-learn >= 1.8.0

License

MIT License - see LICENSE file for details

Metadata

Release files for dsr-data-tools 2.2.6

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

Source distribution (sdist)

Source distribution for dsr-data-tools 2.2.6
File Size Uploaded
dsr_data_tools-2.2.6.tar.gz 74.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dsr-data-tools 2.2.6
File Interpreter ABI Platform
dsr_data_tools-2.2.6-py3-none-any.whl Python 3 none any Details

Total release size: 144.9 kB

Release files / dsr_data_tools-2.2.6.tar.gz

Download URL dsr_data_tools-2.2.6.tar.gz
Size 74.5 kB
Tags Source
SHA-256 checksum
How to use checksums
25887dc05c51eb85e7a37a4a245de59068041f23e82522ba427e2172ac8a26f9
BLAKE2b-256 checksum
How to use checksums
007e4d652d46e261666aaba211bad54e3da683b6928282f6414d7ca817389e68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

Release files / dsr_data_tools-2.2.6-py3-none-any.whl

Download URL dsr_data_tools-2.2.6-py3-none-any.whl
Size 70.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ed578864fc89ba3cb0bafed0331905e9f7400a353601775f32f97126fc97ec57
BLAKE2b-256 checksum
How to use checksums
1d7beb7ae2be2b9e7d661e73e6f496668c6fca84879f54587b44901c602e9ec9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.2.6 This release

2 release files

2.2.5

2 release files

2.2.4

2 release files

2.2.3

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

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