Skip to content

TabDat-Explore

Stata-inspired, terminal-native exploratory data analysis for modern tabular data.

GitHub CI Python 3.13+ Backends License


What is TabDat?

TabDat-Explore is a high-performance, command-driven CLI tool for exploratory data analysis (EDA), data cleaning, statistical modeling, and visualization. It combines the concise, fluent syntax of Stata with modern data engineering engines (DuckDB, Apache Arrow, and Polars).

TabDat is not a Stata clone: it is built from the ground up for modern columnar datasets (Parquet, Arrow, Feather, CSV, and Stata .dta), deterministic execution, terminal UI ergonomics, and integration with AI coding assistants via the Model Context Protocol (MCP).


Key Highlights

  • DuckDB & Arrow Core: Vectorized scans, queries, aggregations, and joins.
  • Lazy Evaluation: Scan multi-gigabyte Parquet files without materializing entire tables into RAM until required.
  • Session Relations: Zero-copy transformations across commands.
  • Expressive Syntax: Intuitive verbs for inspection (describe, summarize, codebook), transformation (keep, drop, generate, replace, recode), and grouping (tabulate, collapse, by).
  • Advanced Econometrics: OLS, robust/cluster standard errors, Logit/Probit, Poisson/NB, IV/2SLS (ivregress), fixed/random effects panel (xtreg, xtabond), difference-in-differences (did, drdid), regularized ML (lasso, ridge, elasticnet, dml), spatial models (spregress), and Bayesian MCMC (bayes: prefix).
  • Interactive REPL: Auto-completion for command names, columns, and options, with syntax highlighting and persistent history.
  • Silent Visualization: Output beautiful plot artifacts (histogram, scatter, bar) silently with clickable file:// URIs in the terminal.
  • Reproducible Scripts: Automate end-to-end workflows in .td script files with macros, seeds, and conditionals.
  • Built-in MCP Server: Expose TabDat tools, live sessions, dynamic schemas, and prompt templates to AI agents in Claude Desktop, Cursor, Google Antigravity, and Goose.
  • JSON & Machine Discovery: Structured JSON/JSONL output envelopes (--json), syntax preview (--explain), and command introspection (--list-commands).

Quickstart

1. Install TabDat

# Recommended 1-line installer (macOS & Linux)
curl -LsSf https://raw.githubusercontent.com/SaehwanPark/tabdat-explore/main/scripts/install.sh | sh

Or via Homebrew:

brew tap SaehwanPark/tabdat https://github.com/SaehwanPark/tabdat-explore.git
brew install tabdat

Or via uv tool:

uv tool install git+https://github.com/SaehwanPark/tabdat-explore.git

2. Launch the Shell

tabdat
tabdat> use data.parquet
Loaded: data.parquet (50000 rows, 8 columns)

tabdat> summarize age income
Variable  Count  Mean     Std Dev  Min   Max
age       50000  41.25    12.41    18    85
income    50000  62450.0  18200.0  1200  245000

tabdat> regress income age educ, robust
Linear regression (OLS, robust HC1)
Dependent variable: income
Observations: 50,000 | R-squared: 0.412 | F-stat: 17520.4 (p < 0.001)

Variable   Coef        Std. Err.   t-stat    P>|t|     [95% Conf. Interval]
age        1245.20     15.30       81.38     <0.001    1215.21   1275.19
educ       3420.50     42.10       81.24     <0.001    3337.98   3503.02
_cons      15200.10    510.40      29.78     <0.001    14199.70  16200.50

tabdat> scatter income age
Plot saved: artifacts/plots/scatter-income-age.png
file:///Users/username/project/artifacts/plots/scatter-income-age.png