Back to "DataSummarizer: Vinnige lokale dataprofielen"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

C# Data Analysis DuckDB LLM

DataSummarizer: Vinnige lokale dataprofielen

Monday, 22 December 2025

De meeste “chat met je data”systemen maken dezelfde foutenM SK2 ze behandelen een LLM alsof het een database is.

Ze schuiven rijtjes in context.,, ze inbedden stukjes, ,, of ze kiezen representatieve voorbeelden en hopen dat het model de structuur kan infereren,,, kwaliteit,,, en waarheid uit anekdotes,M SK6 Het werkt goed genoeg om te demonstreren, -, en dan ineenstort, onder de schaal.,, privacybeperkingen,MSC9, of fundamentele vragen zoals: "Is deze kolom afval?"

DataSummarizer gebruikt de tegenovergestelde aanpak.

Het berekent een deterministische statistisch profiel. van je dataset met DuckDB, blijft dat profiel, en optioneel. Laaders een Lokale LLM Bovenop om die feiten te interpreteren, voorstellen veilig te lezen- alleen SQL , en leidend te volgenM SK3 analyse nagaanMSC4 De zware lifting is numeriekMST5 auditeerbaarM ST6 en snelM st7 De LLM is bewust beperkt tot redeneren en verhaallijnenMst8

Het resultaat is:

  • fast, private profiling
  • betrouwbare automatisering (tool JSON)
  • Gebouwd-in drift-detectie
  • En iets wat de meeste systemen niet kunnen doen. PII-free synthetische datasets die statistische vorm behouden

Alles zonder ruwe rijtjes naar een model te sturen.

Dit bouwt rechtstreeks op Hoe analyseer je grote CSV-bestanden met lokale LLMs in C#, die het kernidee invoerde:

LLMs moeten vragen genereren, geen gegevens verbruiken.

Dit artikel duwt dat idee verder.

  • don’feed de LLM-rijen niet
  • don’doe het zelfs niet aan te voeden “samplesM SK2 tenslotte moet je dat doen.
  • Je moet het voeden. Statistische vorm.
  • Laat DuckDB feiten berekenen.
  • Laat de LLM over deze feiten redeneren - en meer vragen.

Release van GitHub

De volledige dokumentatie leeft in de DataSummarizer README Het werktuig ziet er eenvoudig uit. is’t gestuurd naar het model.

Nota: Dit is nog niet.


Het probleem met “Chat met je gegevens”

Als teams een LLM op de dataanalyse zetten, doen ze meestal één van drie dingen.

  1. Voeg rijen in de context. (val over snel.
  2. Inbed stukjes en haal ze terug. (nog steeds rij-niveauM SK2 nog steeds leekbaar )
  3. Passen “representatieve monsters” ( vaak onrepresentatiefM SK3 nog steeds risicovolMSC4

Zelfs met 200k token context vensters, is dit de verkeerde abstractie

LLM's zijn niet ontworpen om agregaten te berekenen, scheuringen te detecteren, of om verspreidingseigenschappen betrouwbaar te verklaren door rijen te lezen.

De correcte split is nog steeds:

LLM redenen. Databasiscomputes.

Maar je kunt een stap verder gaan door te veranderen. Wat? De redenen voor LLM over.


De sleutelopgradering: Statistieken als interface

In plaats van de modelgegevens te geven, geef het een Profiel.

Een profiel is een compacte, deterministische samenvatting van een dataset.

  • schema + afgeleide types
  • Null-ratio, uniekheid, cardinaliteit
  • min / max / quantielen, skewM SK3 uitwijkingen
  • Bovenste waarden voor veilige categorieën
  • PII-risicosignalen (regex
  • tijd-seriesstructuur (spanningM SK2 gaten , granulariteit
  • Opsionele drift deltas tegen een basislijn.

Dit profiel wordt de interface. tussen redeneren en berekeningen.

Het model kan nu:

  • We moeten beslissen wat interessant is.
  • Voorstellen van verstandige follow-up-vragen
  • interpreteren van resultaten.
  • detecteren drift

… zonder ooit ruwe rijtjes te zien

Architectuur

flowchart LR
    A[Data file] --> B[DuckDB profiles]
    B --> C[Statistical Profile JSON]
    C --> D[LLM reasoning step]
    D --> E[SQL/tool calls]
    E --> F[DuckDB executes locally]
    F --> G[Aggregate results]
    G --> H[LLM synthesis]

    style B stroke:#333,stroke-width:4px
    style D stroke:#333,stroke-width:4px
    style F stroke:#333,stroke-width:4px

Dit bewaart het bekende. LLM → SQL → DuckDB loop, maar aankert het in feiten.

  • Profiling is deterministisch.
  • De LLM werkt op bewijsmateriaal, niet anekdotes.

Waarom het profiel nuttig is ( Zelfs zonder LLM)

Een profiel beantwoordt de saaie vragen.

  • Welke kolommen zijn junk (alle-nulM SK2 konstante , dichtbijMska4constanteM Ska5
  • Welke kolommen zijn lekkenrisico's (naar-unieke identificatorenM SK2
  • Welke kolommen zijn hoog?
  • Wat zijn de dominante categorieën?
  • Is deze tijdsserie aaneenlopend of vol gaten?
  • Zijn de distributies skewed of nul-inflated?

Dit zijn de vragen die je normaal ontdekt. 30 minuten in een spreadsheet archeologie.

Het profiel geeft ze in seconden.


Waarom het profiel de LLM eigenlijk nuttig maakt

Als je Doe Aktiveer de LLM, het profiel is wat het performatief stopt.

Met het profiel-onzeer context, kan het modelM SK2

  • concentreren op hoge-entropie of hoge -skew kolommen.
  • Ze suggereren een gevoelige groep-doorsteken (zwaarM SK2cardinaliteit categorisches )
  • Vermijden van vuilnis SQL ( geen groepering op 95%- unieke kolommen)
  • let op de distributiedreef.
  • vragen doelgericht. We volgen statistieken in plaats van meer gegevens te vragen.

Je hebt geen groter model nodig.

Je hebt beter bewijs nodig.


Het Tool: DataSummarizer

Ik veranderde dit in een CLI zodat ik het kon runnen op willekeurige lêers - inclusief in cron en CI - zonder hand te gebruiken

Release van GitHub

Vinnige start

Windows: Trek een lêer op. datasummarizer.exe

CLI:

datasummarizer mydata.csv

gereedschapsmodus (JSON uitvoer)

datasummarizer tool -f mydata.csv > profile.json

Dat profile.json is het contract:

  • Verbruikt door de agenten.
  • opgeslagen voor drift-detectie.
  • gebruikt voor synthetische datageneratie.

Operatieverschillen (Explicit)

  • Ollama-endpunt: http://localhost:11434 (configureerbaar)

  • Verstek model: qwen2.5-coder:7b (overskryf met --model)

  • Default registry DB: .datasummarizer.vss.duckdb

  • SQL-veiligheids beperkingen:

    • max 20 rijen teruggestuurd naar de LLM
    • verboden: COPY, ATTACH, INSTALL, CREATE, DROP, INSERT, UPDATE, DELETE, onveilig PRAGMA

De verstek is opzettelijk conservatief. Je kunt ze lossen - maar je moet kiezen inM SK2


Deterministische Profiling (Beeld)

datasummarizer -f patients.csv --no-llm --fast

Uitgang (974 patiëntenbestand met PII):

── Summary ────────────────────────────────────────────────
974 rows, 20 columns. 4 columns have >10% nulls. 8 warnings.

Alerts vlaggieukenrisico's, hoogM SK1nul kolommen , constante velden, en vermoedelijke identificeerders MSC4 allemaal berekend door DuckDBMSL5

Geen gok. Geen hallucinatie.


gereedschap JSON voor automatisering

datasummarizer tool -f patients.csv --store > profile.json

Verkortde output:

{
  "Profile": {
    "RowCount": 974,
    "ColumnCount": 20,
    "ExecutiveSummary": "974 rows, 20 columns. 18 alerts."
  },
  "Metadata": {
    "ProfileId": "0ae8dcc4d79b",
    "SchemaHash": "44d9ad8af68c1c62"
  }
}

Dit is ontworpen om te differen, te bewaren, en te auditeren .


Automatische Drift-Detektie (Cron-FriendlyM SK2

Zodra profielen bestaan, zal drift goedkoper worden.

datasummarizer tool -f daily_export.csv --auto-drift --store
  • KS afstand voor numerieke kolommen
  • Jensen–Shannon-verschil voor categorieën
  • schema-fingerprinted basislijnen

Het is een saaie infrastructuur, precies wat je wilt.


De Killer Feature: Synthetische klonen van vorm

Zodra je een statistische vorm hebt, kan je iets echt nuttigs doen.

Genereer synthetische datasets die:

  • Bevatten Geen oorspronkelijke waardes.
  • Bevatten Geen PII
  • bewaren Verspreiding, cardinaliteit , en sparsiteiteffecten

Dit is ideaal voor demo's, CI, support repros , en gedeelde monsters.

De betrouwbaarheidsrapport kwantificeert hoe dicht de synthetische data zijn - in plaats van handM SK1waving “realistisch”.


vertrouwensmodel

  • Deterministische: Alle statistieken, quantielenM SK1 driftscores, en waarschuwingen worden berekend door DuckDB .
  • Opsionele LLM: Verteller, redenering, en SQL-suggestionen alleenM SK2
  • Hermetische modus: --no-llm produceert volledig auditeerbare outputs geschikt voor CI of gereguleerde omgevingen.

De LLM uitvindt nooit feiten.


Zie het.

Repo: https://githubM SK1com/scottgalMSC3mostlylucidwebMST4treeMSP5mainMSV6Mostly LucidMSS7DataSummarizer

Benodigheden:

  • .NET 10
  • DuckDB (embedded)
  • optioneel: Ollama

Verwant:

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.