Day 5 · 09:30 · 150 min

Your data, your visualisations

A visualiz-athon across eight sectors

Day 5 · 09:30

A visualiz-athon. Eight sector extracts. You pick one that smells like your P&L. You make one chart you would sign, and one you would refuse.

You will leave able to

  • Choose a dataset whose shape matches a decision you actually own.
  • Produce one board-ready chart with a title that does not over-claim.
  • Critique a neighbour’s chart in five minutes using the week’s checklist.

The original Friday-equivalent threw people between public datasets (crime, prizes, lyrics). You get anonymised commercial extracts that span the functions in the room. Work in threes. Forty minutes to a first chart. Then we rotate.

The brief, for every table

  1. What decision does this chart change if it is true?
  2. What is the unit of observation? (lane-week, employee, campaign-week)
  3. What would a bar-of-means hide?
  4. What lurking variable would make the title a lie?
  5. Where is the file, and what is the extract date?

Pick your P&L

1. Supply chain — OTIF versus lead time

supplier-otif.csv. Four logistics partners, 24 weeks, lanes across Lagos, Kano, Onne, Abuja. Gulf Freight sits on the efficient frontier. Sahel Haulage is late and unreliable. Is that a sourcing decision or a lane decision?

OTIF versus lead time. Gulf Freight is the efficient frontier; Sahel Haulage is paying for unreliability in both dimensions.
R
otif <- read_csv("supplier-otif.csv")
otif %>%
ggplot(aes(lead_days, otif_pct, colour = supplier)) +
geom_point(alpha = 0.7) +
facet_wrap(~lane) +
labs(
title = "Reliability is a lane, not a logo",
subtitle = "OTIF vs lead time, 24 weeks",
x = "Lead time (days)", y = "OTIF %"
)

2. HR — attrition, tenure, engagement

hr-attrition.csv. Role family, band, tenure, engagement, regretted-exit flag. The CHRO question is not ‘is attrition high’. It is where regretted attrition clusters — usually early tenure, specific families, not a company-wide story.

R
hr <- read_csv("hr-attrition.csv")
hr %>%
ggplot(aes(tenure_years, engagement, colour = factor(attrition_flag))) +
geom_point(alpha = 0.7) +
labs(
title = "Engagement and tenure",
colour = "Exited"
)

3. Marketing — ROAS by channel

campaign-roas.csv. TV will lose a ROAS league table to Search. That is not a reason to cut TV. Rank channels against the job (reach, conversion, retention), not against one ratio.

Mean ROAS by channel. TV is not 'not working' — it is working at a different job (reach) than Search (conversion). Do not rank them on one number.

4–8. The rest of the shelf

Exercise 5.1

The chart you would sign

Deliver: one ggplot, a title, a subtitle that names the window and the unit, and one sentence on what the chart is not allowed to claim. Hang it (laptop or print) for the walk-around clinic.