Skip to Content
COREMetadata

Metadata

The metadata module extracts, stores, and manages dataset metadata — column statistics, data quality metrics, frequency detection, and date range analysis.

Top-Level API

import hermes as hr import polars as pl df = pl.read_csv("data.csv") # Full statistical profile metadata = hr.profile(df) print(metadata.row_count) print(metadata.column_count) print(metadata.frequency) # Quick inspection (no full scan) info = hr.inspect(df) print(info.row_count) print(info.columns) # Frequency detection freqs = hr.get_freqs(df) # Date range detection ranges = hr.date_ranges(df) # Anomaly detection (IQR-based) anomalies = hr.anomaly_count(df, threshold=1.5)

MetaData

The primary metadata model returned by profile():

metadata = hr.profile(df)
FieldTypeDescription
row_countintTotal rows
column_countintTotal columns
columnslist[ColumnMetadata]Per-column statistics
date_rangedict[str, tuple] | NoneMin/max dates per temporal column
frequencystr | NoneDetected frequency (e.g., “1d”, “1w”)
sourcestr | NoneData source identifier
retrieved_atdatetime | NoneWhen data was retrieved
profiled_atdatetime | NoneWhen profiling was run
qualityQualityInfo | NoneData quality metrics

ColumnMetadata

Per-column statistics:

FieldTypeDescription
namestrColumn name
dtypestrData type
null_countintNumber of null values
null_ratiofloatRatio of nulls (0.0–1.0)
unique_countintNumber of unique values
min_valueAnyMinimum value (numeric columns)
max_valueAnyMaximum value (numeric columns)
meanfloat | NoneMean value (numeric columns)
medianfloat | NoneMedian value (numeric columns)
stdfloat | NoneStandard deviation (numeric columns)
top_valueslist[tuple]Top 5 value-count pairs (string columns)

QualityInfo

Data quality metrics:

FieldTypeDescription
completenessdict[str, float]Completeness ratio per column (1.0 = complete)
duplicate_countintNumber of duplicate rows
anomaly_countdict[str, int]Anomaly count per numeric column

InspectReport

Lightweight report from inspect() — no full statistical scan:

FieldTypeDescription
dataset_idstr | NoneDataset UUID
namestr | NoneDataset name
versionstr | NoneDataset version
schema_refstr | NoneSchema reference
row_countintTotal rows
column_countintTotal columns
columnslist[tuple[str, str]](name, dtype) pairs
stored_metadataMetaData | NonePreviously stored metadata
provenanceProvenance | NoneData provenance
lineageLineage | NoneProcessing lineage
samplelist[dict]First 5 rows as dicts

Low-Level API

The helpers used by hr.profile() are available directly from hermes.api.data:

import polars as pl from hermes.api.data import get_time_cols, get_freqs, date_ranges, anomaly_count, inspect df = pl.read_csv("data.csv") get_time_cols(df) # -> list[str] | None get_freqs(df) # -> list[str] | None (e.g. ["1M"]) date_ranges(df) # -> list[dict[str, tuple]] | None anomaly_count(df, threshold=1.5) # -> dict[str, int] (IQR-based) info = inspect(df) # InspectReport

The models below live in hermes.core.metadata:

from hermes.core.metadata import ColumnMetadata, InspectReport, MetaData, QualityInfo
Last updated on