v0.1.0 · live on PyPI

EDA in one line
of Python

brigli turns 50 lines of pandas + matplotlib into a single function call. Built for ML engineers who care about speed.

scroll
install pip install brigli
quickstart
from zero to insights
in 3 lines

No configuration, no boilerplate. Pass your DataFrame and brigli handles everything — stats, nulls, distributions, plots.

analysis.py
import pandas as pd
import brigli
 
df = pd.read_csv("my_data.csv")
 
# full EDA in one call
report = brigli.analyze(df)
report.show()   # visual plots
print(report)  # text summary
 
# subset of columns
report = brigli.analyze(
    df,
    columns=["age", "salary"]
)
 
# save plots to file
brigli.plot_distributions(
    df, save_path="report.png"
)
output
# print(report)
 
DatasetReport(
  10 rows × 3 cols
  0.01 MB
  10.0% missing
)
 
  age     [numeric]
    mean=38.0 std=13.2
    min=19  max=60
    10% null
 
  salary  [numeric]
    mean=62700 std=28400
 
  city    [categorical]
    3 unique Tiranë 50%
why brigli
built for the way
ML teams actually work
one line EDA
brigli.analyze(df) replaces dozens of pandas + matplotlib calls. Distributions, nulls, skewness — automatic.
production-safe
Zero eval(), zero exec(). Every input validated with strict type checks. Thread-safe for multi-threaded ML pipelines.
aesthetic output
Minimalist plots ready to drop into reports and presentations. Consistent visual language across every chart.
ML-first metrics
Skewness, outlier detection, target distribution — the stats that matter before training, not generic spreadsheet summaries.
fully typed API
Full Python type hints on every function and return value. Your IDE autocompletes everything. No runtime surprises.
lightweight
Only 4 dependencies: pandas, numpy, matplotlib, scipy. Nothing exotic. Works in any Python environment from 3.9+.
1
line to full EDA
25
unit tests passing
3.9+
Python versions
security
safe to use in
production pipelines

brigli was built with production security in mind from day one. Every input is validated before it touches your data.

zero eval() / exec() No dynamic code execution anywhere in the codebase. User input is never treated as code.
strict input validation Every function validates type, shape, and content before processing. Clear ValueError messages for developers.
thread-safe by design Matplotlib operations use threading locks. Safe in multi-threaded inference servers and ML pipelines.
minimal dependencies Only 4 well-audited libraries. No transitive dependency chains that can introduce hidden vulnerabilities.
PyPI 2FA protected Package account secured with two-factor authentication. Releases are signed and verified.
CI on every push GitHub Actions runs 25 unit tests across Python 3.9–3.12 before any release reaches PyPI.