# DataSummarizer: Nopeiden paikallisten tietojen profilointi

<!--category-- Data Analysis, DuckDB, C#, LLM -->
<datetime class="hidden">2025-12-22T18:30</datetime>

Useimmat “chat-järjestelmät tekevät samaa virhettä tietojen kanssa ”järjestelmät kohtelevat LLM:tä kuin se olisi tietokanta

Ne siirtävät rivit kontekstiin, sijoittaa osia, tai valitsee M SK2 esikuvaesimerkkejä ” ja toivoo, että malli voi päätellä rakenteestaMSC4 laatuaMST5 ja totuutta naamioiden perusteellaMSV6 Se toimii riittävän hyvin demonstrointiin SSK7 ja sitten romahtaa mittakaavan alapuolellaMSP8 yksityisyyden suojaan kohdistuvat rajoituksetMSR9 tai peruskysymykset, kuten “ on tämä pilari jäteMSL11

**DataSummarizer käyttää päinvastaista lähestymistapaa.**

Se laskee **deterministinen tilastollinen profiili** DuckDB, käyttämästänne tietokokonaisesta säilyy se profiili, *valinnaisesti* vaiheet a **paikallinen LLM** ensiksi tulkita näitä tosiasioita, ehdottaa turvallista lukemista-onnistaan SQLM SK2 ja opastaa seurantaanMSC3 analysoida uudelleenMST4 raskaan nostamisen on oltava numeroista MST5 tilintarkastettavaaMTS6 ja nopeaa MTS7 LLM on tarkoituksellisesti rajoitettu perusteluihin ja esittelyyn

Tulos on:

* Fast, yksityiset profiilit
* luotettava automaatti (`tool` JSON)
* rakennettu-in ajotunnistus
* ja se, mitä suurin osa järjestelmistä ei voi tehdä **PII-vapaat synteettiset dataset, jotka säilyttävät tilastollisen muodon**

Kaikki ilman raaka-arvojen lähettämistä malliin.

Tämä perustuu suoraan **[Miten analysoida suuria CSV-ファイルjä paikallisten LLM:ien avulla C#](/blog/analysing-large-csv-files-with-local-llms)**,, jossa otettiin esille keskeinen ajatus

> **LLM:iden pitäisi tuottaa kysymyksiä, ei kuluttaa tietoja.**

Tämä artikkeli vie tätä ajatusta eteenpäin:

* don’ ei syö LLM-reikiä
* Älkää syökö sitä edes “esimerkitM SK2 ellei teidän tarvitse
* ruokkimaan **tilastollinen muoto**
* antakaa DuckDB:n arvioida tosiasioita
* antakaa LLM:n perustella näitä tosiseikkoja - ja pyytää lisää

---


[![GitHubin julkilausuma](https://img.shields.io/github/v/release/scottgal/mostlylucidweb?filter=datasummarizer*&label=datasummarizer)](https://github.com/scottgal/mostlylucidweb/releases?q=datasummarizer)

> Täsmällinen asiakirja on
> **[DataSummarizerin README](https://github.com/scottgal/mostlylucidweb/blob/main/Mostlylucid.DataSummarizer/README.md)**
> Työkalu näyttää yksinkertaiselta. Se ei ole’tM SK2 Suurin osa työstä on *on’t* lähetetään mallille.

> **Huomautus:** Tämä ei ole’t M SK1 vielä . Se’ on tarkoituksenmukainenMSC4 Interfejs on vakaaMST5 reunaa on edelleen syvennettyMSV6

---


## Ongelma “Chatin kanssa tietojenne kanssa”

Kun ryhmät panevat LLM:n tietoanalyysiin, ne tekevät yleensä yhden kolmesta asiasta.

1. liittää rivit kontekstiin ( putoaa nopeammin , vuotaa tietojaM SK2
2. sijoittaa osia ja saada ne takaisin (käynnissä oleva rivi-tasoM SK2 vielä puutteellinen
3. edellytetään “representatiiviset näytteet” ( usein epärepresentatiivisiaM SK3 edelleen riskialttiita

Jopa 200k token konteksti-ohjelmien kanssa, tämä on väärä abstraktioM SK2

LLM:iden tarkoituksena ei ole laskea agregaatioita, havaita epäjohdonmukaisuutta , tai perustella luotettavasti jakeluominaisuuksia lukemalla ryhmiäM SK2 He hallucinaoivat, koska heitä pyydetään tekemään tietokannan työtä.

Oikea jakautuminen on edelleen:

**LLM-syyt. Tietokantakomputit*.**

Voimme kuitenkin mennä vielä pidemmälle muuttamalla *mitä* LLM:n syyt yli .

---


## Keskeinen parannus: Tilastot liitteenä

Sen sijaan, että annetaan mallia koskevat tiedot, antakaan sille **profiili**.

Profili on compact, tietokokonaisuuden deterministisen yhteenvedon tiivistelmä

* schema + johdetut tyypit
* null-aste, ainutlaatuisuusM SK1 cardinality
* min / max / määrät
* turvallisten kategorioiden enimmäisarvot
* PII-riskisignaalit (regex
* aika-sarjarakenne (laajuusM SK2 aukot, granulaarisuusMSC4
* valinnaiset drift deltas ja pohjalinja

Tästä profiilista tulee *yhteys* johdonmukaisuuden ja laskennan välille.

Malli voi nyt:

* päättää, mikä on kiinnostava
* ehdottaa järkeviä seurantapyyntöjä
* tulosten tulkinta
* havaita virta

…ilman, että olisi koskaan nähty raaka-aita

### Rakennus

```mermaid
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
```

Tämä säilyttää tuttun **LLM → SQL → DuckDB** loop, mutta ankkuroi sen tosiasioihin

* profilointi on deterministista
* LLM:n toiminta perustuu todisteisiin, ei anekdootteihin.

---


## Miksi profiili on hyödyllinen? (Even ilman LLM:tä

Profili vastaa viivytteleviin kysymyksiin.

* Mitkä pilarit ovat tuhlattuja? (kaikkiM SK1null , pysyvät,läheiset
* Mitkä pilarit ovat vuodatusriskejä (lähempänäM SK1yksiklliset tunnistajat)?
* Mitkä pilarit ovat korkeita-null tai ulkopuolisia -heavyM SK2
* Mitkä ovat hallitsevat ryhmät?
* Onko tämä aikasarja samansuuntainen vai täynnä puutteita?
* Onko jakautuminen epäsuhtaista tai nollaa-flatedM SK1

Nämä ovat kysymykset, joita tavallisesti löydetään.

profiili antaa ne teille sekunnissa.

---


## Miksi profiili tekee LLM:stä todella hyödyllisen

Jos te *lopettaa* salli LLM, profiili on se, mikä estää sen toimivuuden

--profiilien ja ainoastaan kontekstin avulla malli voi

* keskittyminen korkean-entropian tai korkean–-skew-pilaisiin
* ehdottaa järkevää ryhmää-kysymysten mukaan M SK1vähien, -kardiaalisuusluokitusten mukaan
* välttää jätteitä SQL (ei ryhmittymiä 95%-yksiklliset pilarit)
* huomautus jakeluvirrat
* kysyä *kohdennettu* follow--tilastot lisätietojen pyytämisen sijasta

Ette tarvitse suurempia malleja

Tarvitaan parempia todisteita.

---


## DataSummarizer -väline

Muutin tämän CLIksi, jotta voisin käyttää sitä mielivaltaisissa asiakirjoissa - mukaan lukien cron- ja CI-ohjelmien yhteydessä.

[![GitHubin julkilausuma](https://img.shields.io/github/v/release/scottgal/mostlylucidweb?filter=datasummarizer*&label=datasummarizer)](https://github.com/scottgal/mostlylucidweb/releases?q=datasummarizer)

### Nopea alku

**Windows-järjestelmä** liittää asiakirjan `datasummarizer.exe`

**:**

```bash
datasummarizer mydata.csv
```

### Ohjelmien käyttö (JSON-tulos

```bash
datasummarizer tool -f mydata.csv > profile.json
```

Se `profile.json` on sopimus

* toimeksiantajien kuluttamat
* varastoidaan ajotarkastukseen
* käytetään synteettisten tietojen tuottamiseen

---


## Operaatiota koskevat perusedellytykset (ExplicitM SK1

* Ollaman loppupiste: `http://localhost:11434` (configurable)

* Standardimalli: `qwen2.5-coder:7b` (override with `--model`)

* Tavallinen rekisteri DB: `.datasummarizer.vss.duckdb`

* SQL:n turvallisuusrajoitukset:
  
  * max 20 rivit palautetaan LLM:lle
  * kielletty: `COPY`, `ATTACH`, `INSTALL`, `CREATE`, `DROP`, `INSERT`, `UPDATE`, `DELETE`, turvaton `PRAGMA`

Standardit ovat tarkoituksellisesti konservatiivisia.

---


## Deterministinen profilointi (esimerkkiM SK1

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

Tulos (974 PII-potilaiden rekisterit

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

Alarmit lippulaivavuodatusriskejä, korkeatM SK1null-säiliöt, pysyvät kentät , ja epäilyttävät tunnistajat MSC4 kaikki lasketut DuckDB:n tietojen perusteella

Ei arvausta. Ei hallucinaatiotaM SK1

---


## Ohjelmointiväline JSON

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

Lyhyempi output:

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

Tämä on suunniteltu diffeerimaksi, talletettavaksiM SK1 ja tarkastettavaksi .

---


## automaattinen Drift Detection (Cron-FriendlyM SK2

Kun profiilit ovat olemassa, driftistä tulee halpa

```bash
datasummarizer tool -f daily_export.csv --auto-drift --store
```

* KS:n etäisyydellä lukucolumneille
* Jensen–Shannonin ero kategorioiden osalta
* schema-silmäjäljitetyt perustalinjat

Se”’” on tuskallinen infrastruktuuri, ”-”, mikä on juuri se, mitä haluatte“.”

---


## The Killer Feature: Synteettiset kloonaukset muodosta

Kun teillä on tilastollinen muoto, voitte tehdä jotain todella hyödyllistä.

Synteettiset dataset, jotka:

* sisällyttää **ei alkuperäisiä arvoja**
* sisällyttää **ei PII**
* säilyttää **jakelu, cardinality , ja epämääräiset vaikutukset**

Tämä on ihanteellinen malli demoille, CIM SK1 tukevien reprojen, ja yhteisiä näytteitä varten

Todenmukaisuuden raportissa mitataan, kuinka lähellä synteettiset tiedot ovat - sen sijaan, että ne olisivat käsillisiäM SK1valokas “realistinen”.

---


## Luottamusmalli

* **Deterministinen:** kaikki tilastot, quantiles , drift scoresM SK2 ja hälytystuloksia laskee DuckDB
* **Vaihtoehtoinen LLM:** selvitys, johdonmukaisuusM SK1 ja ainoastaan SQL-ehdotukset.
* **Hermetinen järjestelmä:** `--no-llm` tuottaa täysin tilintarkastuskelpoisia tuloksia, jotka soveltuvat CI- tai säänneltyihin ympäristöihin.

LLM ei koskaan keksi tosiasioita, vaan reagoi niihin.

---


## Ottakaa se

**Repo:**
[https://~github~.~com~M SK2~scottgal~/~mostlylucidweb~MST4~tree~MSSK5~main~MSC6~Mostly Lucid~MSS7~DataSummarizer](https://github.com/scottgal/mostlylucidweb/tree/main/Mostlylucid.DataSummarizer)

**Vaatimukset:**

* .NET  10
* DuckDB (embeddedM SK1
* valinnainen: Ollama

**Related:**

* [Laajojen CSV-tiedostojen analysointi paikallisten LLM:ien avulla](/blog/analysing-large-csv-files-with-local-llms)
* [DocSummarizer](/blog/building-a-document-summarizer-with-rag)
* [Rajoitettu epäselvyysmalli](/blog/constrained-fuzziness-pattern) - Perusajatuksena on, että
* [Kuvan yhteenveto](/blog/constrained-fuzzy-image-intelligence) - Sama malli sovelletaan kuvaamiseen