Data Analysis
Profile datasets, check for errors, and compute reliable metrics with full traceability.
Installation
- Make sure Claude is on your device and in your terminal.
Skills load from
~/.claude/skills/when Claude Code starts up — so you need it on your machine first. If you don't have it yet, install it once with the command below, then runclaudein any terminal to verify.One-time setupnpm i -g @anthropic-ai/claude-codeAlready have it? Skip ahead.
- Paste into Claude Code or into your terminal.
This copies the whole skill folder into
~/.claude/skills/data-analysis-damianvtran/— the SKILL.md plus any scripts, reference docs, or templates the skill ships with. Safe default: works for every skill.Faster alternative (instruction-only skills)
Skips the clone and grabs only the SKILL.md file. Don't use this if the skill ships Python scripts, reference markdowns, or asset templates — they won't be downloaded and the skill will fail when it tries to load them.
Quick install (SKILL.md only)Sign up to copy - Restart Claude Code.
Quit and reopen Claude Code (or any other agent that loads from
~/.claude/skills/). New skills are picked up on startup. - Just ask Claude.
Skills auto-activate when your request matches the skill's description — no slash command needed. Trigger phrases live in the skill's own frontmatter; you can read them in the “What this skill does” section above.
Prefer to read the source first? Open on GitHub.
When Claude uses it
Analysing data rigorously: profile before trust (keys, missingness), reproducible queries, provenance per number, units and sanity checks. Use when exploring datasets, computing metrics, or answering data questions.
What this skill does
Data analysis
Numbers that survive scrutiny: profile first, keep queries reproducible, carry provenance, sanity-check the result.
Profile before trust
| Check | Why it matters |
|---|---|
| Shape: rows, columns, time range | Know what you have before asking questions of it |
| Types and units per column | A text date, or cents read as dollars, corrupts every downstream number |
| Keys and duplicates | Duplicate keys silently change every aggregate |
| Missingness per column | Null-heavy columns change what a rate means |
| Distributions and ranges | Outliers and impossible values (negative ages, future dates) surface here |
| Timezone and calendar of timestamps | Day boundaries move with zones |
Keep the profile as a small set of queries you can rerun, not ad-hoc typing.
Reproducible queries
- Keep the exact query behind every number in the report. A number nobody can re-derive is a rumour.
- Deterministic: pin the snapshot or time window, make ordering explicit before any limit, and avoid "latest row" ambiguity.
- Work in steps; save intermediates. After changing an input, rerun the step rather than mentally adjusting its output.
Guard silent joins and filters
- Count rows before and after every join. An inner join on an incomplete key drops rows without an error.
- Check filter semantics: inclusive or exclusive bounds, null membership, timezone edges. Apply each filter once.
- State the population: "of the 4,210 rows matching X" beats "of the data".
Provenance and checks
- Every reported number carries its source (table, snapshot), filter, and derivation. Derive it, or say where it came from.
- Reconcile: totals equal the sum of their parts; an independent cut of the same data reproduces the number.
- Units on everything: counts, rates, currency. Percentages name their denominator. Magnitudes are checked against expectation; a 1000x jump is a units or join error until proven otherwise.
- Small n: below your stated threshold, report the count, not a rate. "60% (n=5)" misleads; "3 of 5" does not.
Output
- Separate raw from summary: show the summary and keep the raw one step away so the reader can drill down.
- State assumptions in the report: time window, definitions, exclusions, null handling.
Red flags
- Answering from the first query without looking at the data's shape.
- A join with no row count before and after.
- A percentage with no denominator; a total with no source.
- Dropping rows to "clean" data without recording the rule.
- A distribution treated as stable when it trends over time.
Related skills
Investor Board Deck Builder
alirezarezvani
Build compelling board decks that weave metrics and narratives into cohesive investor updates.
Quick Stats
marketcalls
Generate backtest statistics for a stock symbol using an EMA crossover strategy.
Grafana Best Practice
wquguru
Review, optimize, and deploy Grafana dashboards and alerting rules.
Content Experimentation Guide
sanity-io
Design and analyze A/B tests to optimize content performance and user engagement.