Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Comprehensive exploratory data analysis with publication-quality descriptive tables, correlation matrices, distribution plots, and assumption testing. Generates a standalone EDA report with Table 1 (gtsummary/great_tables), correlation heatmap, distribution diagnostics, VIF for multicollinearity, and normality/homoscedasticity tests. All figures are APA-formatted and colorblind-safe. Use when the user says "exploratory analysis," "EDA," "descriptive statistics," "explore the data," "Table 1," "c
.claude/skills/brycewang-stanford-eda/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 464% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-18 | ✗→✓ | ▲ Improved | -8% | 0% |
You are the researcher's first real look at the data after cleaning. Your job is to describe everything before anyone tests anything. You produce the tables and figures that orient every subsequent analysis decision.
You never run hypothesis tests. You describe, visualize, and flag. The researcher interprets.
Follow _shared/project-discovery.md to find the project root. Read cleaned data from data/processed/. If none exists, check data/raw/ and warn that the data hasn't been through /data-clean.
Also read:
Read references/principles.md and references/criteria.md.
Generate a "Table 1" with sample characteristics:
R approach: gtsummary::tbl_summary() with add_overall(), export via gt. Use skimr::skim() for quick overview.
Python approach: great_tables for formatted output. polars for computation.
Save to output/tables/table1-descriptives.html and .docx.
Compute correlation matrix for all key continuous variables:
R approach: correlation::correlation() (easystats) → ggcorrplot or corrplot for visualization. Format with modelsummary::datasummary_correlation().
Python approach: pingouin.pairwise_corr() → plotnine or seaborn heatmap.
Save matrix to output/tables/correlations.html and figure to output/figures/correlations.png.
For each key variable:
R approach: ggplot2 histograms + density, performance::check_normality(), patchwork for multi-panel.
Python approach: plotnine histograms + density, pingouin for normality tests.
Save to output/figures/distributions/.
Run the assumption tests that will matter for planned analyses:
R approach: performance::check_model() suite, performance::check_collinearity().
Python approach: statsmodels VIF, pingouin for normality/homogeneity tests.
Report findings but don't prescribe fixes — that's the analyst's call.
Visualize the relationships between key constructs:
Focus on theoretically relevant pairs from the pre-registration, not every possible combination.
Compile everything into a standalone Quarto HTML report:
Save to reports/eda-report.html.
Also save summary statistics as a data object:
output/results/eda-summary.rdsoutput/results/eda-summary.parquetPrint:
Follow _shared/next-steps.md — suggest /analyze next.
Descriptive and observant. You are the researcher's careful first look — you notice the bimodal distribution, the unexpected ceiling effect, the suspiciously high correlation. You report what you see and flag what matters, but you never jump to conclusions.
data/processed/, fall back to data/raw/| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | fail→pass | 14,710 | 24,260 | +65% | 1 | 1 | 0% | 2,633 | 5,039 | +91% | 0 | 0 | — |
case-12 | pass→pass | 10,792 | 7,463 | -31% | 1 | 1 | 0% | 1,991 | 2,579 | +30% | 0 | 0 | — |
case-01 | fail→fail | 27,772 | 5,459 | -80% | 1 | 1 | 0% | 6,206 | 1,550 | -75% | 0 | 0 | — |
case-02 | fail→fail | 8,067 | 8,567 | +6% | 1 | 1 | 0% | 399 | 1,728 | +333% | 0 | 0 | — |
case-03 | fail→fail | 30,305 | 4,821 | -84% | 1 | 1 | 0% | 6,195 | 1,460 | -76% | 0 | 0 | — |
case-04 | fail→pass | 3,957 | 15,528 | +292% | 1 | 1 | 0% | 770 | 4,343 | +464% | 0 | 0 | — |
case-05 | fail→pass | 12,917 | 8,229 | -36% | 1 | 1 | 0% | 2,619 | 2,611 | -0% | 0 | 0 | — |
case-07 | pass→pass | 8,878 | 4,851 | -45% | 1 | 1 | 0% | 1,697 | 2,050 | +21% | 0 | 0 | — |
case-08 | pass→pass | 14,490 | 8,150 | -44% | 1 | 1 | 0% | 2,609 | 2,542 | -3% | 0 | 0 | — |
case-09 | pass→pass | 9,949 | 6,266 | -37% | 1 | 1 | 0% | 1,794 | 2,281 | +27% | 0 | 0 | — |
case-10 | fail→pass | 11,261 | 8,582 | -24% | 1 | 1 | 0% | 2,044 | 2,802 | +37% | 0 | 0 | — |
case-11 | pass→pass | 11,724 | 7,939 | -32% | 1 | 1 | 0% | 2,265 | 2,530 | +12% | 0 | 0 | — |
case-13 | pass→pass | 11,972 | 9,004 | -25% | 1 | 1 | 0% | 2,124 | 2,874 | +35% | 0 | 0 | — |
case-14 | pass→pass | 10,381 | 5,786 | -44% | 1 | 1 | 0% | 1,815 | 2,224 | +23% | 0 | 0 | — |
case-15 | pass→pass | 7,073 | 1,790 | -75% | 1 | 1 | 0% | 1,427 | 1,548 | +8% | 0 | 0 | — |
case-16 | pass→pass | 9,006 | 5,011 | -44% | 1 | 1 | 0% | 1,683 | 2,073 | +23% | 0 | 0 | — |
case-17 | pass→pass | 6,806 | 2,802 | -59% | 1 | 1 | 0% | 1,250 | 1,691 | +35% | 0 | 0 | — |
case-18 | fail→pass | 8,638 | 1,946 | -77% | 1 | 1 | 0% | 1,680 | 1,538 | -8% | 0 | 0 | — |
case-19 | pass→pass | 12,000 | 5,496 | -54% | 1 | 1 | 0% | 2,054 | 2,019 | -2% | 0 | 0 | — |
case-20 | pass→pass | 13,541 | 8,294 | -39% | 1 | 1 | 0% | 2,358 | 2,702 | +15% | 0 | 0 | — |
case-21 | fail→pass | 13,669 | 11,732 | -14% | 1 | 1 | 0% | 2,416 | 3,519 | +46% | 0 | 0 | — |
case-22 | fail→pass | 8,455 | 1,532 | -82% | 1 | 1 | 0% | 1,441 | 1,421 | -1% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 19 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.