account-research
Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM.…
Chọn đúng biểu đồ, kể chuyện với số liệu, và tránh误导 — dựa trên nguyên tắc từ Kieran Healy (Data Visualization, Princeton 2019) và taxonomy từ AntV chart-visualization-skills. Dùng khi cần quyết định loại chart, trình bày insight cho stakeholder, hoặc kiểm tra xem figure có gây
$ npx -y skills add charlieviettq/awesome-agent-skill --skill data-viz-storytelling-healy --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/data-viz-storytelling-healyContext preview
The summary Claude sees to decide when to auto-load this skill.
Chọn đúng biểu đồ, kể chuyện với số liệu, và tránh误导 — dựa trên nguyên tắc từ Kieran Healy (Data Visualization, Princeton 2019) và taxonomy từ AntV chart-visualization-skills. Dùng khi cần quyết định loại chart, trình bày insight cho stakeholder, hoặc kiểm tra xem figure có gây
name: data-viz-storytelling-healy description: "Chọn đúng biểu đồ, kể chuyện với số liệu, và tránh误导 — dựa trên nguyên tắc từ Kieran Healy (Data Visualization, Princeton 2019) và taxonomy từ AntV chart-visualization-skills. Dùng khi cần quyết định loại chart, trình bày insight cho stakeholder, hoặc kiểm tra xem figure có gây hiểu lầm không. Để vẽ Python thực tế, chuyển sang matplotlib / seaborn / scientific-visualization." allowed-tools: Read, Glob, Grep
> "The tools you use can help you live up to the right standards. > But they cannot make you do the right thing." > — Kieran Healy, *Data Visualization*, Ch. 1
**For actual plotting code** → use `matplotlib`, `seaborn`, or `scientific-visualization`.
---
Before choosing colors or chart types, verify the figure does not mislead.
| Check | Why it matters | |-------|----------------| | Baseline / zero start | Bar charts starting above zero exaggerate differences. Line charts may omit zero legitimately if the focus is trend, not level. | | Dual axes | Two Y-axes on one plot invite false correlation. Prefer faceted panels or indexed series. | | Cherry-picked window | Short time windows can hide long-term patterns. Always show context. | | Aggregation level | Averages can hide distribution shape. Consider showing raw data, box plots, or density. | | Proportional vs absolute | Normalize when comparing groups of different size; keep raw counts available. | | Color encoding | Do not use rainbow/palette that implies order for categorical data. Use colorblind-safe palettes. | | Uncertainty | Show CI, prediction bands, or error bars when presenting estimates. | | Axis labels & units | Every axis must state what it measures and in what unit. |
**Rule of thumb:** If removing context (time range, N, CI) changes the takeaway, the figure is misleading as-is.
Humans perceive some encodings more accurately than others:
1. **Position on common scale** — most accurate (scatter, line) 2. **Position on different scale** — good (grouped bar, faceted) 3. **Length / direction** — moderate 4. **Angle / area** — poor (avoid pie charts for comparison) 5. **Color intensity / shape** — worst for magnitude; OK for categories
**Implication:** Prefer dot plots or bar charts over pie/bubble for quantitative comparison.
---
Ask: **"What is the analytical question?"** then pick the chart family.
| Question family | Chart types | Python (seaborn/matplotlib) | |-----------------|-------------|-----------------------------| | **Trend over time** | Line, area, step | `sns.lineplot`, `ax.plot`, `ax.fill_between` | | **Comparison (categories)** | Bar (grouped/stacked), lollipop | `sns.barplot`, `ax.barh` | | **Part-to-whole** | Stacked bar, waffle, pie (sparingly) | `ax.bar(stacked)`, avoid pie for >3 slices | | **Distribution** | Histogram, KDE, box, violin, ridgeline | `sns.histplot`, `sns.kdeplot`, `sns.boxplot`, `sns.violinplot` | | **Relationship (2+ vars)** | Scatter, bubble, hexbin, 2D density | `sns.scatterplot`, `ax.hexbin`, `sns.jointplot` | | **Ranking** | Lollipop, horizontal bar (sorted) | `ax.barh` (sorted) | | **Deviation / contrast** | Diverging bar, slope chart, dumbbell | Custom `ax.barh` with center baseline | | **Geography** | Choropleth, bubble map | `geopandas` + matplotlib; or Folium | | **Hierarchy / flow** | Treemap, sankey, dendrogram | `squarify`, `matplotlib-sankey` | | **Multi-variate summary** | Parallel coordinates, radar, heatmap | `pd.plotting.parallel_coordinates`, `sns.heatmap` | | **Model diagnostics** | Residual plot, calibration curve, lift/gains | `sns.residplot`, custom calibration, KS plot |
1. How many variables? → 1 (distribution) | 2 (relationship) | 3+ (multivariate) 2. Is there a time component? → Yes: line/area trend 3. Am I comparing groups? → Yes: bar/lollipop 4. Am I showing composition? → Yes: stacked bar > pie 5. Am I showing uncertainty? → Always add CI/bands 6. Audience? → Expert: detail plot | Executive: annotated summary + callout
---
Healy teaches the **grammar of graphics**: data → mapping → geom → stat → coord → facet → theme.
Mapped to matplotlib/seaborn:
| Grammar layer | ggplot concept | matplotlib / seaborn equivalent | |---------------|----------------|--------------------------------| | Data | `ggplot(df)` | Pass DataFrame to seaborn or plot columns | | Aesthetic mapping | `aes(x=, y=, color=)` | `x=`, `y=`, `hue=` params in seaborn; manual in matplotlib | | Geometry | `geom_point`, `geom_line` | `ax.scatter`, `ax.plot`, `sns.scatterplot` | | Statistical transform | `stat_summary`, `geom_smooth` | `sns.regplot`, `sns.aggplot`-like via groupby + plot | | Coordinate system | `coord_flip`, `coord_polar` | `ax.invert_yaxis()`, projection='polar' | | Facet | `facet_wrap(~var)` | `sns.FacetGrid` / `sns.relplot(col=)` | | Theme / labels | `labs()`, `theme_minimal()` | `ax.set_title/labels`, spine removal, style sheets |
**Workflow in Python:**
import seaborn as sns
import matplotlib.pyplot as plt
# Layer 1: data + mapping + geom
g = sns.relplot(
data=df,
x="feature_date", y="default_rate",
hue="segment", col="product",
kind="line", facet_kws={"sharey": False}
)
# Layer 2: annotation
g.fig.suptitle("Default Rate Trend by Segment & Product", y=1.02)
g.set_axis_lCurated skill pack for LLM agents in engineer and science workflow (Cursor & Claude ready).
Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM.…
Evaluate LLM agents and tool-using workflows—task success, tool accuracy, latency/cost, safety, and regression suites. Use when shipping agent features,…
Design agent tools and CLI surfaces—schemas, naming, errors, idempotency, and discoverability for LLM callers. Use when defining tools for agents, SDKs, or…
\"Implement and select ad bidding strategies from manual CPC to automated target-CPA and target-ROAS. Use this skill when the user needs to choose a bidding…
\"Optimize advertising budget allocation across campaigns using marginal returns analysis. Use this skill when the user needs to distribute budget across…
\"Build CTR prediction models for estimating ad click-through rates from features. Use this skill when the user needs to predict click probability, build an ad…