DataSummarizer: Vinniga lokaldataprofilering (Svenska (Swedish))

DataSummarizer: Vinniga lokaldataprofilering

Monday, 22 December 2025

//

5 minute read

De flesta system gör samma misstag, de behandlar LLM som om det var en databas.

De kastar rader i sammanhanget. ,, lägger in bitar, ,, eller väljer representativa prover,” och hoppas att modellen kan dra slutsatser om strukturen, ,, kvalitet, M SK5, och sanning från anekdoter. . Det fungerar tillräckligt bra för att demonstrera, Mska7, och sen kollapsar det under skalan, M Ska8, integritetsbegränsningar, MSKA9, eller grundläggande frågor som: Är den här kolumnen skräp? ,

DataSummarizer tar den motsatta vägen.

Den räknar en deterministisk statistikprofil av din datauppsättning genom att använda DuckDB, optionellt lager ett lokala LLM överhuvudtaget för att kunna tolka dessa fakta.,; föreslå säkert läsbarhet.-; endast SQL.

Resultatet är:

  • fast, privat profilering
  • tillförlitlig automatisering (tool JSON)
  • byggt-in drift-detektor
  • och något som de flesta system inte kan göra alls PII- fria syntetiska datasamlingar som bevarar statistisk form

Allt utan att skicka rå rader till en modell.

Det bygger direkt på Hur man analyserar stora CSV-Dater med Lokala LLM i C#, som introducerade grundidén

LLMs borde generera frågor , inte konsumera data.

Detta artikel driver den tanken vidare.

  • don’ inte mata LLM-raden
  • inte till och med mata den.
  • föda den statistisk form
  • låta DuckDB bearbeta fakta
  • låter LLM resonera över dessa fakta - och fråga efter mer

GitHub-utsläpp

Den kompletta dokumentationen finns i DataSummarizer README verktyget ser enkelt ut. is’t skickad till modellen.

Nota: Det här är inte "’". 1.0", än. ".", det är avsiktligt. "M SK4" Interfejsen är stabil, ; Kanterna blir fortfarande skarpare.


Problemet med “Chat med dina data”

När lag ger en LLM in i dataanalys, gör de vanligtvis en av tre saker:

  1. kasta rader i sammanhanget (faller över snabbtM SK1 lektar data)
  2. bädda in stycken och hämta dem ( ända rad - nivå
  3. gå igenom “representativa mönster ” | | ( | ofta orepresentativa | , | fortfarande riskfyllda

Även med 200k token kontextfenster

LLMs är inte konstruerade för att bearbeta agregater , upptäcka motsägelser, eller att trovärdigt resonera om fördelningseigenheter genom att läsa rader

Det korrekta splittret är fortfarande:

LLM skäl. Databasberäkningar.

Men man kan ta ett steg längre genom att ändra vad LLM-motsägelserna över


Nyckeluppgraderingen: Statistiker som gränssnitt

Istället för att ge modellen data profil.

Ett profil är en kompakt, deterministisk sammanfattning av ett dataset.

  • schema + delat typer
  • noll hastighet , unikhet, cardinalitet
  • min / max / kvantiteter, skewM SK3 utvikelser
  • toppvärden för säkra kategorier
  • PII risksignaler (regex
  • tid-serienstruktur (längdM SK2 luckor , granularitet
  • optional drift deltas vs en basnivå

Profilet blir gränssnitt mellan resonemang och beräkning.

Modelet kan nu

  • bestämma vad som är intressant
  • föresla vettiga efterfrågan
  • tolka resultat
  • detektera drift

…oför att någonsin se rå rader

Arkitektur

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

Detta bevarar den välkända LLM → SQL → DuckDB loop, men ancorar den i faktaM SK1

  • profilering är deterministiskt
  • LLM arbetar på bevis, inte anekdoter.

Varför är profilet användbart? ( Även utan LLM

Ett profil besvarar tråkiga frågor omedelbart

  • Vilka kolumner är skräp? (all -nullM SK2 konstant, näraMSC4konstantMST5
  • Vilka pelare är risker för utsvämningar ( nära-unique identifiserM SK2
  • Vilka kolumner är höga-null eller uteslutandeM SK1svåra ?
  • Vilka är de dominerande kategorierna?
  • Är denna tidsserie sammanhängande eller fylld av luckor?
  • Är fördelningarna skiftade eller noll?

Det här är de frågor som du vanligtvis upptäcker 30 minuter i kalkylblads arkeologi

Profilet ger dem i sekunder.


Varför Profilet gör LLM faktiskt användbar

Om du göra aktivera LLM, profilet är det som hindrar det från att vara performativt

Med profilen- endast kontexten , kan modellen

  • fokuserar på höga-entropi eller höga≥-skew kolumner
  • föreslå en vettig grupp
  • undvika skräp SQL ( inga grupperingar på ♫ 95%- ♫ unika kolumner ♫ МSK2 ♫
  • notice distributional drift
  • fråga riktade följa "-" -statistiker istället för att be om mer data

Du behöver inte en större modell

Du behöver bättre bevis


verktyget: DataSummarizer

Jag gjorde detta till en CLI så att jag kunde köra den på godtyckliga plier, inklusive cron och CI.

GitHub-utsläpp

Vinnig start

Windows: draga en file på datasummarizer.exe

CLI:

datasummarizer mydata.csv

verktygsmöjlighet (JSON utgång )

datasummarizer tool -f mydata.csv > profile.json

Det profile.json är företaget:

  • konsumerade av agenter
  • lagd för driftdetektorer
  • som används för syntetisk data generering

Operationella standard (Explicit

  • Ollama slutpunkt: http://localhost:11434 (konfigurerbar)

  • Standardmodell: qwen2.5-coder:7b (överrider med --model)

  • Standardregistrer DB: .datasummarizer.vss.duckdb

  • SQL säkerhetsbegränsningar:

    • max 20 rader återkom till LLM
    • förbjudet: COPY, ATTACH, INSTALL, CREATE, DROP, INSERT, UPDATE, DELETE, osäkra PRAGMA

Dom standarden är avsiktligt konservativa. Du kan frigöra dem - men du måste välja in


Deterministisk profilering (Example )

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

utgång (974 patientregistrer med PII ):

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

Alerter Flaggläckarisker, högM SK1 tomma kolumner , konstanta fält , och misstänkta ID-identifisatorer - alla räknade av DuckDB

Ingen gissning . Inga hallucinationer.


verktyg JSON för automatisering

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

Förkortad utgång:

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

Den är designad för att differas, lagras och kontrolleras.


Automatisk driftdetektion (Cron-FriendlyM SK2

När profiler existerar, blir drift billig.

datasummarizer tool -f daily_export.csv --auto-drift --store
  • KS avstånd för numeriska kolumner
  • Jensen–Shannons skillnad för kategoriska
  • schema-fingerprinted baselines

Det är den tråkiga infrastrukturen som är precis vad du vill ha.


Killer Feature: Syntetiska kloner från form

När du har en statistisk form, kan du göra något verkligt användbart.

Generera syntetiska datasamlingar som

  • innefatta inga ursprungliga värden
  • innefatta ingen PII
  • bevara fördelning , cardinalitet, och sparsitetseffekter

Det är idealt för demos, CI, support repros , och delabara prover

Tillförlitlighetsrapporten kvantifierar hur nära den syntetiska datan är - snarare än hand


Tillitmodell

  • Deterministiskt: alla statistiker, kvantiteter , driftscoresM SK2 och varningar är beräknade av DuckDB
  • Optionell LLM: berättelse , resonemang, och bara SQL-suggestioner
  • Hermetisk mode: --no-llm producerar fullt reviderade produkter som är lämpliga för CI eller reglerade miljöer.

LLM uppfinner aldrig fakta, det reagerar på dem.


Ta det

Repo: https://github.comM SK2scottgal/motillucidweb /treeMST5mainMstlylucidM ST7DataSummarizer

Benötningar:

  • .NET 10
  • DuckDB (
  • optional: Ollama

Related:

Finding related posts...
logo

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