Tables et données
Une table de données unifiée et large, avec un langage de motifs ; mais pas de jointure, et le groupement s'exécute hors du moteur.
2 Strong · 6 Solid · 3 Partial · 1 Emerging
Mesuré contre : pandas · Polars · DuckDB · Dossiers : base/table(s'ouvre dans un nouvel onglet) · base/data(s'ouvre dans un nouvel onglet) · Pour les programmeurs : la référence de ce domaine

Repensé depuis les premiers principes
Ce que Softanza a gardé de ce qui marche, et ce qu'elle a repensé, tel que la bibliothèque l'a écrit dans ses documents de conception et ses narrations.
La manière SoftanzaUne table est une grille qu'on lit comme un tableur — colonnes nommées, lignes et cellules — et chaque colonne est une liste qu'on peut interroger.
Gardé des meilleures pratiques
- Les données sont rangées par colonne, car les colonnes ont un nom et pas les lignes, et l'analyse de données traite chaque variable comme une colonne. source(s'ouvre dans un nouvel onglet)
- Les fonctions de tableur familières (SUM, AVERAGE, MIN, MAX, PRODUCT), le regroupement avec agrégats et les tableaux croisés s'appliquent directement à une table. source(s'ouvre dans un nouvel onglet)
- Des formats standard en entrée et en sortie : CSV, JSON et tableaux HTML, plus du vrai SQL grâce à une base SQLite embarquée (stzDatabase). source(s'ouvre dans un nouvel onglet)
Repensé
- Les méthodes parlent clair — AddRow, RemoveCol, Cell, FindInCol — comme on pense une table, plutôt qu'en jargon de data frame, pour un apprentissage en douceur. source(s'ouvre dans un nouvel onglet)
- Une colonne est une liste : ce qu'on demande à une liste — somme, filtre par condition — se demande aussi à une colonne, et qui sait les listes sait les tables. source(s'ouvre dans un nouvel onglet)
- Les tables se valident par motif : une seule expression stzTablex décrit forme, clés uniques, valeurs manquantes et moyennes, au lieu d'un code de vérification procédural. source(s'ouvre dans un nouvel onglet)
- Une table confie sa colonne à l'objet statistique au lieu de recalculer elle-même, car les définitions dupliquées divergent : deux classes ont déjà donné 4 et 4,57 pour une variance. source(s'ouvre dans un nouvel onglet)
One enormous unified class, 2,517 methods with eleven sibling caps merged into a single stzTable, with engine-backed sort, aggregates, calculated columns, describe and pivot, plus a distinctive multi-table TableX pattern-query language. Measured against pandas, Polars and DuckDB it has three real holes: there is no join at all; group-by and filter run Haro-side even though engine bridges for both sit exported-but-unused; and the columnar engine is used per-operation, not as the live store.
Ce qu'un artisan en fait, et ce qui se distingue
- A multi-table TableX pattern-query language with no direct peer
- A copy-free index-permutation engine sort
- Engine-first calculated columns, compile-once over all rows, guarded at 50k rows
- Eleven sibling caps merged into one stzTable namespace
Ce qui est dû
- Add joins: there is no join anywhere in the tables lane
- Wire group-by and filter to the engine bridges already compiled and exported
- Finish the 11-to-1 fidelity grind (150 of 251 legacy tests error)
- Missing-data toolkit (fillna / dropna) and melt / unpivot
La manière Softanza, exécutée
Ce que Softanza fait autrement dans ce domaine, montré par du code tiré de ses narrations et de ses gardes, et exécuté pour cette page.
Une colonne est une liste : on peut la sommer ou y chercher avec une condition, comme dans toute liste.
oT = new stzTable([
[ :DISH, :PRICE, :ORDERS ],
[ "tea", 200, 6 ],
[ "rice", 500, 3 ],
[ "fish", 900, 2 ]
])
? StzListQ(oT.Col(:ORDERS)).Sum()
? @@( StzListQ(oT.Col(:PRICE)).FindW("{ @item > 400 }") )11 [ 2, 3 ]
exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/education/program/courses/elementary-introduction/chapters/10-when-code-meets-cells.en.md(s'ouvre dans un nouvel onglet)
Une table construite colonne par colonne donne la médiane ou le premier quartile grâce au moteur statistique commun.
oT = new stzTable([
[:age, [20, 25, 30, 35, 40]],
[:income, [30, 42, 51, 66, 80]],
[:city, ["a", "b", "c", "d", "e"]]
])
Then("MedianCol(age) is 30", oT.MedianCol(:age), 30)
Then("Q1Col(age) is 25", oT.Q1Col(:age), 25)THEN MedianCol(age) is 30 [PASS] THEN Q1Col(age) is 25 [PASS]
exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/table/table_statistics_narrated.ring(s'ouvre dans un nouvel onglet)
Les articles de ce domaine (2)
- "Code Meets Cells": The Spreadsheet Metaphor in Softanza's stzTable 2025
- stzDataSet: Statistics as a Language of Thought 2026
Les couloirs, un par un
Les couloirs et leurs notes sont cités tels qu'ils ont été lus à la source, le Read from the source on 2026-09-16.
Deux lectures. La carte de l'Atlas (v21, 2026-09-30) donne 2 Strong, 6 Solid, 3 Partial, 1 Emerging ; la page du groupe, lue le Read from the source on 2026-09-16, note ses couloirs 2, 7, 3, 0. Les couloirs ci-dessous sont ceux de la page du groupe ; la carte est la lecture la plus récente.

