Skip to main content

ATARS — free terminal analytics

Clean, profile, model, forecast and report on any spreadsheet, from the command line or from Python. The same engine as the ATARS desktop app, with no AI, no account and nothing uploaded anywhere.

pip install atars

Python 3.11 or newer.

The window

Type atars with no arguments and you get a window with clickable tabs.

 ATARS - january.csv
 january.csv · 120 rows × 4 columns      [ Export CSV ] [ Open ]
 120 rows loaded
 Overview   Data   Quality   SQL   Charts   Models   Report
 -------------------------------------------------------------
  region  revenue
  East    16674.0
  West    15194.0
  South   14792.0
  North   12887.0
 o Open   e Export CSV   f5 Refresh   q Quit

Click a tab, or press 15 for the five groups; the mouse works, and so do the arrow keys. o opens a file, e exports the table on screen, f5 re-runs everything, q quits. All of them are single keys, and a focused text box takes its own typing first — so q in the SQL box is a q.

Opening a file

Press o or click Open. You get three ways to find it, because a terminal cannot receive a dropped file:

  • Your system's file dialog — the normal Windows/macOS/Linux picker, via Browse system…
  • A folder tree, showing only folders and files ATARS can read
  • Recent files, because it is usually the one you had last

…or type a path. atars -f sales.csv skips the dialog entirely.

Group Tabs
Understand Overview · Data · Quality · Metrics
Prepare Clean · Prep · Combine · Features · SQL
Explore Charts · Stats · Pivot · Trends · Business
Model Models · Explain · Drift · Forecast · Discover
Report Report

The same left-to-right workflow the desktop app uses, so if you know the app you know the window. Groups are real tabs: pick a group, then a tab inside it.

Prep builds a recipe step by step from the 22 transform ops — add steps, undo, apply, save the result, or print the pandas that reproduces it without ATARS installed. Applying shows the rows it produced, not only how many there are; Clean shows the cleaned table the same way. Anything a Save button writes has been on screen first.

Every result table has a Save table button directly underneath it, which writes that table as a CSV beside the file you opened and names what it wrote. Press e or click Export CSV to do the same for whatever table is on screen, and click any column heading to sort by it. A table stops at 500 rows and says so on its last line rather than letting you read a cut as the whole file. Every pane scrolls, so a small terminal clips nothing.

A workbook with more than one sheet asks which one — opening the first without asking analyses whichever tab happened to be first.

Combine joins a second file — chosen with the same picker as Open — and Use as data makes the joined table the one every other tab works on.

Add chart keeps the chart you are looking at and leaves it on the tab, so the next one is drawn below it rather than instead of it — as many as you make, each with a Remove button, and each one in the report.

What reaches the report

A report about the file, with none of the work in it, is half a report. What you run reaches the exported document by the same two doors the desktop app uses:

  • A fixed answer for this data files itself — cleaning, dataset understanding, features, moving averages, decomposition, change points, cohorts, growth, concentration, segments, drift. There is nothing to choose between, so nothing is asked.
  • A value you went hunting for waits for Add to report — statistical tests, models, explanations, pivots, SQL and forecasts. You run these ten times to find the one worth stating, and the other nine are not findings.

Everything arrives as a table, not as a sentence about one. Each kept result carries the table the tab drew — a leaderboard and the feature importance under it, a pivot, a query result, both explanation tables — printed in the report in full, and where a long one is cut the report says how many rows there really were. A chart cannot be drawn in Markdown, so each one you add carries the numbers it was drawn from instead: the same aggregation, the same top-N cut, plus the two or three sentences a reader would otherwise have to squint at the bars to work out.

The report also prints the data itself — column profile, descriptive statistics, the strongest correlations, the category breakdown, missing values and outliers — so every figure it states can be checked inside the document, without the app. Markdown, HTML and PDF all carry the same tables.

Each tab says whether what it is showing is in the report yet, and nothing is filed twice. Clear kept on the Report tab takes it all back out, and opening another file — or making a join the data — empties it for you, because those numbers were about the old table.

Charts

Eighteen types. Each declares what it needs, so the pickers it does not use are hidden rather than silently ignored.

Distribution Histogram · ECDF · Box · Strip
Relationship Line · Area · Scatter · Density heatmap · Correlation
Comparison Bar · Bar (horizontal) · Grouped · Stacked · Share · Funnel · Waterfall · Heatmap (pivot) · Count

Every chart that groups by a category also takes an aggregation (sum, mean, count, median, min, max), a top-N cut, a sort order and optional value labels — and says how many categories the cut left out, rather than dropping them quietly.

Everything is shown in the window. Saving a file sits next to each result, never instead of it — a tool that can only say "wrote chart.png" has made you open something else to find out what it did.

Analysis runs on a worker thread, so the window keeps responding while AutoML works. atars -f sales.csv opens with that file already loaded.

The line-based shell

atars shell gives a prompt instead, for anyone who prefers typing. Open a file once; every command afterwards runs against it.

$ atars
ATARS 0.1.0 - free terminal analytics
open a file to begin:  open sales.csv        ·  help  ·  exit

atars> open sales.csv
sales.csv - 120 rows x 4 columns
atars [sales.csv]> quality
quality score   100.0 / 100
...
atars [sales.csv]> sql SELECT region, SUM(revenue) FROM data GROUP BY 1
atars [sales.csv]> automl --target revenue
atars [sales.csv]> exit

Tab completes commands and column names, and the arrow keys walk your history. open accepts an unquoted path with spaces, and everything after sql is the query - no shell quoting, so SQL's own "quoted identifiers" just work.

Extras only the shell has: columns, head [N], ls, cd, pwd, close.

Because the file is opened once, the engine's result cache stays warm for the whole session - the second command on a dataset is a lookup, not a recompute.

atars -f sales.csv opens the shell with that file already loaded.

One-shot commands

The same commands work without the shell, for scripts and pipes:

atars quality sales.csv
atars automl sales.csv --target revenue
atars report sales.csv --format pdf
$ atars quality sales.csv
quality score   100.0 / 100
shape           120 rows x 4 columns

missing values
  none

outliers
 Column  Outliers  % of Data
revenue         1       0.83

A full transcript of every command is in docs/DEMO.md.

Commands

atars profile FILE shape, types, summary statistics
atars quality FILE score, missing values, outliers
atars clean FILE -o out.csv cleaning studio; reports every change
atars sql FILE -q "SELECT …" DuckDB over the file, as table data
atars stats FILE correlation, hypothesis tests, A/B
atars automl FILE --target T ranked models, with --importance
atars forecast FILE --date D --value V project a series forward
atars drift FILE --reference R compare against a baseline file
atars cluster FILE k-means; picks k when you don't say
atars anomaly FILE isolation forest
atars business FILE --kind pareto growth, pareto or segment
atars insights FILE rule-based findings
atars chart FILE --y COL -o c.png line, bar, scatter or histogram
atars report FILE --format pdf a full report: markdown, html or pdf
atars merge A B --on KEY join two files
atars recipe run R.json FILE a saved, repeatable transform

Every command takes --json. Exit codes mean something — 0 fine, 2 you asked for something impossible, 3 that feature is in the app — so these compose in a shell script:

atars quality sales.csv --json | jq '.score'

Recipes

A recipe is a JSON list of transform steps that runs the same way every time.

atars recipe ops                       # the 22 steps available
atars recipe run clean.json sales.csv -o out.csv
atars recipe code clean.json           # the pandas that does the same thing

recipe code prints runnable pandas with no ATARS import, so a pipeline you build here keeps working for someone who doesn't have this installed.

From Python

import atars

ds = atars.load("sales.csv")

ds.quality_report()                     # score plus the tables behind it
frame, audit = ds.clean()               # what changed, step by step
ds.automl(target="revenue")             # ranked models
ds.forecast("month", "revenue", 6)
ds.pareto("product", "revenue")
ds.merge("february.csv", on="product")
ds.report(fmt="pdf", out_dir="reports")

The command line is a printer over this API, so anything one can do, the other can do too.

What it tells you

Open a file and the Overview reads it — no column picking, no model:

$ atars insights sales.csv
severity  finding                         detail
--------  ------------------------------  --------------------------------------------------
medium    Xylene has outliers             657 of 8,459 values (7.8%) sit outside the usual
                                          range; the most extreme is 14.32, well above the
                                          median of 2.7.
low       wind_speed_10m and              they rise together (r = +0.85). Worth checking
          wind_speed_100m move together   whether one explains the other.
low       rain is skewed                  a long tail of large values (skew +16.0); its
                                          median (0) describes a typical row better than
                                          its mean (0.0996).
info      Looks like small business data  total revenue 59,546, avg order value 496.22.

Fourteen checks run over the frame, ranked so the most consequential is first:

  • What moves it — which columns actually explain the main measure
  • How predictable it is — whether a model can explain it at all, or whether most of what drives it simply is not in the file
  • Change points — when the measure shifted, and by how much
  • Types that block analysis — numbers and dates stored as text
  • Plus missing values, duplicates, constant and identifier columns, skew, outliers, correlations, concentration, gaps between groups, and trend

No single check can contribute more than three findings, so twenty skewed columns cannot crowd out everything else. Every sentence carries the number it is about, and --json returns the evidence each was computed from.

Nothing here calls a model. It is arithmetic, which is why every claim can be checked.

Speed

atars --help returns in about 9 ms of import: no command loads pandas until it actually runs. Thread limits for OpenMP, MKL, OpenBLAS and pyarrow are applied before numpy loads, because those libraries read their thread counts once and ignore every change afterwards. n_jobs comes from the machine's real core count, never -1, so one core stays free. Repeated commands on the same file reuse the engine's result cache.

Both rules are tests, not intentions — see tests/test_startup.py.

What is not here

The AI analyst, web-aware answers and narrated reports are in the ATARS desktop app: https://atars.netlify.app

This package does not contain that code. Not disabled, not key-gated — absent. The wheel ships a twelve-line stub where the AI package would be, and tests/test_build.py fails the build if a provider import or a credential read ever reaches the artifact. atars report pins narration off rather than relying on a default.

Developing

The engine lives in the parent tree, so a dev checkout needs it importable:

python -c "import site,os;open(os.path.join(site.getsitepackages()[-1],'atars_engine_dev.pth'),'w').write(os.path.abspath('..'))"
pip install -e .
python -m pytest tests/ -q          # 80 tests
python tools/demo.py                # every command, end to end

Releasing

python tools/build_wheel.py

That vendors the engine into src/, builds the wheel, and deletes the copy again. The delete matters: a copy left in src/ shadows the live engine, and every dev run afterwards would silently test a stale snapshot with AI already stubbed out — the exact drift this layout exists to prevent.

Licence

Free to install and use, for anything, without an account — see LICENSE.txt beside this file. Not open-source: the code stays the author's.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

atars-0.1.0.tar.gz (287.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

atars-0.1.0-py3-none-any.whl (291.6 kB view details)

Uploaded Python 3

File details

Details for the file atars-0.1.0.tar.gz.

File metadata

  • Download URL: atars-0.1.0.tar.gz
  • Upload date:
  • Size: 287.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.5

File hashes

Hashes for atars-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6ad3ed3fa04c6425675b74420d85226b8cb7f6b706f66ccebd325b3738149064
MD5 3dc1a2bb58ea2540d27785f561e90cc0
BLAKE2b-256 9d31cbfd21eedccb3ae3ba1dd57e3cb47aa8315791b60f2382095a2176d67ba8

See more details on using hashes here.

File details

Details for the file atars-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: atars-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 291.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.5

File hashes

Hashes for atars-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1d5682cc8ad176bb08bd2e1f20f990b28cc6e69151032f111881ee17bd329025
MD5 2b2502d7e12d1cbcad6896ab960b5dd9
BLAKE2b-256 5cd7eb722c95a6e248c0930993b84fb3b15c8b3f19bddb9e88a93dbcd6589446

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 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