# Data

> Analýza tabulkových dat (CSV, XLSX, JSON, Parquet, i gzip) přes DuckDB CLI. Na přirozený dotaz udělá nad datovým souborem agregace, přehledy, srovnání nebo hledání anomálií — data se nenačítají do kontextu, počítá DuckDB. Finální SQL ukládá vedle dat, takže opakovaná analýza = spuštění hotového skriptu. Trigger: "/data", "analyzuj data", "analyzuj soubor/CSV/excel", "udělej přehled z", "spočítej z dat", "co je v souboru", "najdi anomálie v datech", "agreguj".

- Skill: `jmech-pepa/data` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jmech-pepa/data`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jmech-pepa/data/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: jmech-pepa (https://skillmd.com/u/jmech-pepa)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jmech-pepa/data

---


# Data — analýza tabulkových dat přes DuckDB v1.0

## Kdy použít
- Ad-hoc analýza datového souboru: agregace, přehledy po období/kategorii, top-N, anomálie, srovnání.
- Opakované spuštění dříve uložené analýzy nad novým exportem stejné struktury.
- Kdy NEpoužít:
  - Tvorba/editace sešitu jako výstupního dokumentu (formátování, vzorce, grafy) → skill na Excel/xlsx.
  - Data v datovém skladu (BigQuery apod.) → dotazuj přímo tam, DuckDB je na lokální soubory.
  - Nesourodé finanční modely (merged cells, hlavičky uprostřed listu) → openpyxl/Read, DuckDB čeká tabulku.

## Vstup
- Cesta k souboru + co chceš zjistit. Bez souboru: `Glob` na *.csv/*.xlsx/*.json v CWD a zeptej se, který.

## Workflow
1. **Hledej uložený dotaz.** `Glob` na `analyzy/*.sql` vedle datového souboru. Pokud existuje dotaz odpovídající zadání, spusť ho (`duckdb -c ".read <file>.sql"`) a nepiš nový. Změnu chtěného výstupu řeš úpravou uloženého souboru, ne novým od nuly.
2. **Inspekce před dotazem.** Nikdy nehádej názvy ani typy sloupců:
   ```bash
   duckdb -c "SUMMARIZE FROM '<soubor>'"   # schéma + statistiky
   duckdb -c "FROM '<soubor>' LIMIT 5"     # ukázka dat
   ```
3. **Sémantika sloupců.** Když z názvů a ukázky není jednoznačné, co sloupec znamená (např. „Částka" — cena za kus, nebo součet řádku?), zeptej se přes `AskUserQuestion`. Nehádej — špatná domněnka = správně spočítaný nesmysl.
4. **Dotaz piš do souboru, ne inline.** Založ `analyzy/<slug>.sql` vedle dat (hlavička: účel, zdrojový soubor, datum, jak spustit) a spusť přes `.read`. SQL vzniká rovnou reprodukovatelně, ne jako jednorázový `-c` string.
5. **Sanity check výsledku.** Než výsledek odevzdáš, zkontroluj řádové nesmysly (marže přes 100 %, záporné počty, tržba nižší než kusy). Nesedí → upozorni a vrať se ke kroku 3, neodevzdávej „správně spočítaný" nesmysl.
6. **Výstup.** Malý výsledek (do ~20 řádků) jako tabulku do chatu + 1–2 věty interpretace. Větší → `COPY (...) TO 'analyzy/<slug>.csv'` a do chatu jen shrnutí a cestu.

## DuckDB kuchařka (ověřené gotchas)
- **XLSX:** extension `excel` (jednou `INSTALL excel`, pak se autoloaduje). Čtení: `FROM 'soubor.xlsx'` nebo `read_xlsx('soubor.xlsx', ...)`.
- **Chyba „Could not convert string … to DOUBLE":** typ odvozen z prvních řádků, dál v souboru je jiný obsah → `read_xlsx('...', all_varchar = true)` + explicitní `CAST` jen u sloupců, které dotaz potřebuje. Padá na to i `SUMMARIZE` z kroku 2 — pak `SUMMARIZE FROM read_xlsx('...', all_varchar = true)`.
- **Datum při `all_varchar`:** excelové sériové číslo → `DATE '1899-12-30' + CAST(sloupec AS INT)`.
- **České názvy sloupců** (diakritika, mezery): v SQL do uvozovek — `"Stav zásoby"`.
- **CSV/JSON/Parquet/gzip** čte DuckDB přímo (`FROM 'soubor.csv'`), u CSV s nestandardním oddělovačem `read_csv('...', delim=';')`.
- Syntaxe: duckdb.org/docs/stable/sql/introduction — při nejistotě ověř, nevymýšlej funkce.

## Fixní pravidla (non-negotiables)
- **Nikdy nepočítej agregace „z hlavy"** ani Pythonem ad-hoc — vždy DuckDB. Důvod: reprodukovatelnost a konzistence.
- **Nikdy nesypej surová data do kontextu** (žádný `cat`/`Read` datového souboru) — do kontextu patří jen schéma, ukázka (LIMIT 5) a výsledky. Důvod: tokeny.
- **Nikdy nepřepisuj datový soubor.** DuckDB pouze čte; výstupy jen do `analyzy/`.
- **Nehádej sémantiku sloupců** — viz krok 3.

## Output checklist
- [ ] Finální SQL uložené v `analyzy/<slug>.sql` s hlavičkou (účel, zdroj, datum, jak spustit)
- [ ] Výsledek prošel sanity checkem, případné podezřelosti explicitně flagnuté
- [ ] V odpovědi: výsledek (tabulka/cesta k CSV) + interpretace + cesta k .sql

## Changelog
- **2026-07-23** — Vznik skillu (inspirace: LinkedIn post o DuckDB skillu). Oproti postu přidáno: ukládání SQL do `analyzy/` (reprodukovatelnost), sanity check výsledků a gotchas z testování na reálném XLSX exportu se smíšenými typy sloupců (all_varchar, excelová sériová data, české sloupce).

