# DataSummarizer: Profilage rapide des données locales

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

La plupart des systèmes “chat avec vos données” font le même blâme : ils traitent un LLM comme s’il s’agissait d’une base de données

Ils mettent des lignes dans le contexte, , emplacent des morceaux, , ou choisissent des échantillons représentatifs, M SK3 et espérons que le modèle peut déduire la structure, ±, la qualité, , et la vérité à partir d’anecdotes.

**DataSummarizer adopte l’approche opposée.**

Il calcule un **Profil statistique déterministe** de votre ensemble de données à l’aide du DuckDB, persiste ce profilM SK1 et *optionnel* les couches a **LLM local** en plus d’interpréter ces faits, proposer une lecture sûre-seulement SQL , et suivre les lignes directrices M SK3analyse de suiviMSC4 La levage lourd est numériqueMST5 vérifiableM ST6 et rapideM st7 Le LLM est délibérément restreint au raisonnement et à la narration

Le résultat est:

* rapid, profilage privé
* automatisation fiable (`tool` JSON)
* construction-détection de la dérive
* et quelque chose que la plupart des systèmes ne peuvent pas faire **PII-sets de données synthétiques libres qui préservent la forme statistique**

Tous sans envoyer des lignes brutes à un modèle.

Il s'appuie directement sur **[Comment analyser les grands fichiers CSV avec des LLM locaux en C#](/blog/analysing-large-csv-files-with-local-llms)**, qui a introduit l’idée de base :

> **Les LLM devraient générer des demandes, ne consomment pas de données.**

Cet article fait avancer cette idée.

* don’t alimenter les lignes LLM
* Ne le nourrissez même pas “échantillons ” sauf si vous devez
* les aliments nutritifs **de la forme statistique**
* laisser DuckDB calculer les faits
* laisser le LLM se justifier sur ces faits - et demander plus

---


[![Mise à jour de GitHub](https://img.shields.io/github/v/release/scottgal/mostlylucidweb?filter=datasummarizer*&label=datasummarizer)](https://github.com/scottgal/mostlylucidweb/releases?q=datasummarizer)

> La documentation complète se trouve dans le
> **[README de DataSummarizer](https://github.com/scottgal/mostlylucidweb/blob/main/Mostlylucid.DataSummarizer/README.md)**
> L’outil semble simple. Il n’est pas’tM SK2 La plupart du travail est dans ce *est’t* envoyé au modèle.

> **Note:** Il s’agit d’une interface stable, les bords sont encore affinés.

---


## Le problème avec “Chat avec vos données”

Lorsque les équipes mettent un LLM sur l’analyse de données, elles font habituellement une des trois choses suivantes :

1. Mettre les lignes dans le contexte (débordement rapideM SK1 fuite de données)
2. embed chunks and retrieve them (still row -levelM SK2 still leaky)
3. Passer “échantillons représentatifsM SK1 ( fréquemment non représenttifs

Même avec 200k, les fenêtres contextuelles de token , il s'agit d'une abstraction erronée

Les LLM ne sont pas conçus pour calculer des agrégats, détecter les écarts , ou expliquer de façon fiable les propriétés de distribution en lisant des rangéesM SK2 Ils hallucinaient parce qu’ils’ont été invités à travailler dans une base de donnéesMSC4

La répartition correcte est toujours:

**Motifs de LLM. Computes de base de données.**

Mais vous pouvez aller un pas plus loin en modifiant *Ce qui suit :* Les raisons de la LLM sur.

---


## La mise à niveau clé: Statistiques en tant qu’interface

Au lieu de donner les données du modèle,, donnez un **Profil**.

Un profil est un sommaire déterministe compact d’un ensemble de données.

* schéma + types déduits
* taux nul, uniquetéM SK1 cardinalité
* min / max / quantilesM SK2 skew, outliers
* valeurs supérieures pour les catégories sécuritaires
* Signales de risque PII (regex + classificateur
* temps-structure de la série M SK1étendue ,écarts, granularitéMSC4
* Deltas de dérive facultatifs contre une ligne de base

Ce profil devient le *interface* entre le raisonnement et la computation.

Le modèle peut maintenant:

* décider ce qui est intéressant
* proposer des questions de suivi raisonnables
* interpréter les résultats
* détecter la dérive

…sans jamais voir des lignes brutesM SK1

### Architecture

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

Cela préserve la familiarité **LLM → SQL → DuckDB** loop, mais l’ancrage dans les faitsM SK1

* Le profilage est déterministe.
* LLM s’appuie sur des éléments de preuve, non pas sur des anecdotes.

---


## Pourquoi le profil est utile (Even Without an LLM)

Un profil répond aux questions acharantes-maisM SK1immédiatement à des questions urgentes:

* Quelles sont les colonnes junk ?
* Quelles sont les colonnes qui présentent des risques de fuite (à proximitéM SK1identifiants uniques)?
* Quelles colonnes sont élevées-nulle ou exceptionnelleM SK1 lourde?
* Quelles sont les catégories dominantes?
* Cette série de temps est-elle contiguë ou remplie d’écarts?
* Les distributions sont-elles skevées ou nulles?

Voici les questions que vous découvrirez habituellement 30 minutes dans l'archéologie des feuilles de calcul .

Le profil vous les donne en secondes.

---


## Pourquoi le profil fait de la LLM réellement utile

Si vous *effectuer* activer le LLM, le profil est ce qui l’empêche d’être performatif

Avec le profil-contexte seulement,le modèle peutM SK2

* concentrer sur les colonnes de haute-entropie ou de grandeM SK1skew
* Suggérer un groupe sensé-pars M SK1moyenne -catégories de cardionalité)
* Évitez le garbage SQL (pas de groupement sur 95%-columnes uniques)
* avis de la dérive de distribution
* demander *cible* Suivre les statistiques suivies- au lieu de demander plus de données

Vous n’avez pas besoin d’un modèle plus grand’

Vous avez besoin d’une meilleure preuve.

---


## L’outil: DataSummarizer

J’ai transformé cela en CLI afin de pouvoir le faire fonctionner sur des fichiers arbitraires - y compris dans cron et CI - sans main

[![Mise à jour de GitHub](https://img.shields.io/github/v/release/scottgal/mostlylucidweb?filter=datasummarizer*&label=datasummarizer)](https://github.com/scottgal/mostlylucidweb/releases?q=datasummarizer)

### Démarrage rapide

**Windows:** traîner un fichier sur `datasummarizer.exe`

**CLI:**

```bash
datasummarizer mydata.csv
```

### Mode d'outils (Outil JSON)

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

Que `profile.json` est le contrat:

* d'agents
* stockés pour détecter les déplacements
* utilisé pour la production de données synthétiques

---


## Défaults opérationnels (ExplicitM SK1

* Point final Ollama: `http://localhost:11434` (configurable)

* Modèle par défaut: `qwen2.5-coder:7b` (accélérer avec `--model`)

* Registre par défaut DB: `.datasummarizer.vss.duckdb`

* Constraints de sécurité SQL:
  
  * max 20 lignes retournées au LLM
  * interdit: `COPY`, `ATTACH`, `INSTALL`, `CREATE`, `DROP`, `INSERT`, `UPDATE`, `DELETE`, instable `PRAGMA`

Les valeurs par défaut sont intentionnellement conservatrices. Vous pouvez les assouplir - mais vous devez opter pour l’option .

---


## Profilage déterministe (ExempleM SK1

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

Résultat (974 dossiers de patients avec PIIM SK1

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

Alertes Risques de fuite des drapeaux, élevésM SK1 colonnes nulles, champs constants , et identificateurs soupçonnés MST4 tous calculés par DuckDBMSC5

Aucune hypothèse. Aucune hallucinationM SK1

---


## Outil JSON pour l'automatisation

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

Résultats réduits:

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

Ce dispositif est conçu pour être différé, stocké et vérifié.

---


## Détection automatique de la dérive (CronM SK1Friendly)

Une fois les profils existants, la dérive devient peu coûteuseM SK1

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

* Distance KS pour les colonnes numériques
* Jensen–Divergence de Shannon pour les catégories
* schéma-lignes de base imprimées par les doigts

L’infrastructure borne de ’ - est exactement ce que vous voulez.

---


## The Killer Feature: Clones synthétiques à partir de formes

Une fois que vous avez une forme statistique, vous pouvez faire quelque chose vraiment utile.

Générer des ensembles de données synthétiques qui:

* contenir **Aucune valeur originale**
* contenir **Il n'y a pas de PII**
* préserver **distribution, cardinalitéM SK1 et effets de dispersion**

Il est idéal pour les repros de démonstration , CI , support repros \, et des échantillons partagés |.

Le rapport de fidélité quantifie l’étendue des données synthétiques - plutôt que manuellementM SK1waving “realistique”.

---


## Modèle de confiance

* **Deterministe:** toutes les statistiques, quantilesM SK1 scores de dérive , et les alertes sont calculées par DuckDB.
* **Optionnel LLM:** narration, raisonnementM SK1 et suggestions SQL seulement.
* **Mode hermétique:** `--no-llm` produit des produits entièrement vérifiables, adaptés à la CI ou aux environnements réglementés.

Le LLM n’invente jamais les faits; il réagit à ceux-ci.

---


## Obtenez-le

**Repo:**
[https://githubMSC1comM SK2scottgal/mostlylucidwebMNK4treeMEK5mainMRK6Mostly LucidMMK7DataSummarizer](https://github.com/scottgal/mostlylucidweb/tree/main/Mostlylucid.DataSummarizer)

**Exigences:**

* .NET  10
* DuckDB (embedded)
* optionnel: Ollama

**Connexe:**

* [Analyse des grands fichiers CSV avec les LLM locaux](/blog/analysing-large-csv-files-with-local-llms)
* [DocSummarizer](/blog/building-a-document-summarizer-with-rag)
* [Modèle de fuzziness restreint](/blog/constrained-fuzziness-pattern) - La philosophie sous-jacente : calculs du déterminisme M SK2 propose la probabilité
* [Sommaire de l'image](/blog/constrained-fuzzy-image-intelligence) - Le même modèle appliqué à la compréhension de l'image