AITÆM: All Interesting Things Are Essentially Metrics - A Python library for generating data insights
Project description
AITÆM: All Interesting Things Are Essentially Metrics
This is the aitaem library, pronounced "i-tame".
Why?
TL;DR: Point this Python library toward your OLAP database or a local CSV file and start generating insights, i.e. metrics, slices, segments, and time series, in no time. This library is LLM friendly (more on that later).
Business leaders, PMs, EMs, and even individual contributors constantly require deep understanding of their businesses and products. Another term for this understanding is "data insights". The most common way to obtain these insights is to rely on a data scientist or a business analyst to dive into the data and compute the insights. Why is this a bad idea?
- Practically: Dashboards are limited in how much they can hold apriori. There's always a new question which existing dashboards cannot answer. There are always either too many dashboards or too few
- Operationally: It is a waste of time if a DS or a BA has to dive into the source tables and (re)write SQL queries to compute customized metrics, slices, or segments repeatedly
- Scientifically: The accuracy of ad-hoc analysis depends upon the individual; the same analysis done by different individuals can yield different results
- Organisationally: Inter-org trust should be built upon processes/toolings rather than on individuals
What?
This library provides powerful functionality in a compact API. The core consists of two componenents.
- Specifications: A simple declarative structure to modularly define metric specs, slice/breakdown specs, and segment specs
- Computation: A small collection of Python classes with compact signatures which compute the metrics
Additionally, there are utilities to connect to various data backends (simultaneously) and helpers to visualize/render charts and trends.
Quick Start
Installation
pip install aitaem
Three-Step API
from aitaem import SpecCache, ConnectionManager, MetricCompute
# 1. Load metric, slice, and segment specs from YAML files or directories
cache = SpecCache.from_yaml(
metric_paths="examples/metrics/",
slice_paths="examples/slices/",
segment_paths="examples/segments/",
)
# 2. Configure the data backend (DuckDB, BigQuery, etc.)
conn = ConnectionManager()
conn.add_connection("duckdb", database=":memory:") # or path to .duckdb file
# 3. Compute metrics
mc = MetricCompute(cache, conn)
df = mc.compute(
metrics="ctr",
slices="campaign_type",
segments="platform",
time_window=("2024-01-01", "2024-04-01"),
)
print(df)
Standard Output Format
Every compute() call returns a pandas DataFrame with exactly these 10 columns:
| Column | Description |
|---|---|
period_type |
"all_time" or a named period |
period_start_date |
ISO date string or None |
period_end_date |
ISO date string or None |
entity_id |
Entity column value when by_entity is set; None otherwise |
metric_name |
Name of the metric (e.g. "ctr") |
slice_type |
Slice name or "none" for the all-data baseline |
slice_value |
Slice value (e.g. "Search") or "all" |
segment_name |
Segment name or "none" for the all-data baseline |
segment_value |
Segment value (e.g. "Google Ads") or "all" |
metric_value |
Computed numeric result |
Example: Ad Campaigns Dataset
The examples/ directory contains sample YAML specs and a CSV dataset for an ad campaigns use case. You can run the following end-to-end:
from aitaem import SpecCache, ConnectionManager, MetricCompute
from aitaem.helpers import load_csvs_to_duckdb
# Load the sample CSV into a DuckDB file and get back a connector
connector = load_csvs_to_duckdb("examples/data/ad_campaigns.csv", "examples/data/ad_campaigns.duckdb")
conn = ConnectionManager()
conn.add_connection("duckdb", connector=connector)
cache = SpecCache.from_yaml(
metric_paths="examples/metrics/",
slice_paths="examples/slices/",
segment_paths="examples/segments/",
)
mc = MetricCompute(cache, conn)
# CTR by campaign type for Q1 2024
df = mc.compute(
metrics="ctr",
slices="campaign_type",
time_window=("2024-01-01", "2024-04-01"),
)
print(df[["slice_value", "metric_value"]])
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aitaem-0.1.4.tar.gz.
File metadata
- Download URL: aitaem-0.1.4.tar.gz
- Upload date:
- Size: 215.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6371f927549e9b92756b221f1e94462f799ead0fd2cb1aa0a3e8e87e4a6463ec
|
|
| MD5 |
cddca885eb91a79658700cb8ba945a48
|
|
| BLAKE2b-256 |
e5a6a950008e3ade693868b841a03316b75f63aebd749e6f1beb8e71d325a692
|
Provenance
The following attestation bundles were made for aitaem-0.1.4.tar.gz:
Publisher:
publish.yml on chaturv3di/aitaem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aitaem-0.1.4.tar.gz -
Subject digest:
6371f927549e9b92756b221f1e94462f799ead0fd2cb1aa0a3e8e87e4a6463ec - Sigstore transparency entry: 1170996681
- Sigstore integration time:
-
Permalink:
chaturv3di/aitaem@23a08a73e9880bf72517877d903d71aab5961def -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/chaturv3di
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@23a08a73e9880bf72517877d903d71aab5961def -
Trigger Event:
release
-
Statement type:
File details
Details for the file aitaem-0.1.4-py3-none-any.whl.
File metadata
- Download URL: aitaem-0.1.4-py3-none-any.whl
- Upload date:
- Size: 67.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f7aa61aa503b31632a39a65ab414484cc741c19e9a71f6e83068a11db163189
|
|
| MD5 |
7ea661ca180638a47c93e0b09aed16e7
|
|
| BLAKE2b-256 |
30f6443d83512294889c1973a0fdea6372d59cf716c592697e54fff971613082
|
Provenance
The following attestation bundles were made for aitaem-0.1.4-py3-none-any.whl:
Publisher:
publish.yml on chaturv3di/aitaem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aitaem-0.1.4-py3-none-any.whl -
Subject digest:
2f7aa61aa503b31632a39a65ab414484cc741c19e9a71f6e83068a11db163189 - Sigstore transparency entry: 1170996848
- Sigstore integration time:
-
Permalink:
chaturv3di/aitaem@23a08a73e9880bf72517877d903d71aab5961def -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/chaturv3di
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@23a08a73e9880bf72517877d903d71aab5961def -
Trigger Event:
release
-
Statement type: