studiesData = {
const rows = await d3.csv("/studies/studies.csv");
return rows.map(d => ({
...d,
yearNum: +d.year || null,
stageList: (d.stages || "").split("|").filter(s => s),
recNum: +d.top_rec || 0
}));
}
stageMeta = ({
DM: {label: "Data management", chapters: "Ch. 3–4", note: "dm_note", accent: "#1f6feb"},
CR: {label: "Concept representation", chapters: "Ch. 5–6", note: "cr_note", accent: "#8250df"},
DA: {label: "Computational analysis", chapters: "Ch. 7–8", note: "da_note", accent: "#bc4c00"},
SC: {label: "Scientific communication", chapters: "Ch. 9–10", note: "sc_note", accent: "#1a7f37"}
})
// A lens is either fixed by the hub page or chosen by the reader. When fixed,
// show plain text instead of a disabled dropdown: a disabled control announces
// as "unavailable" to screen readers, which misdescribes a deliberate setting.
viewof chosenLens = stageLens === null
? Inputs.select(
new Map([
["All design stages", "ALL"],
...Object.entries(stageMeta).map(([k, v]) => [`${v.label} (${v.chapters})`, k])
]),
{label: "Design stage", value: "ALL"}
)
: Inputs.input(stageLens);
activeLens = stageLens === null ? chosenLens : stageLens
inScope = activeLens === "ALL"
? studiesData
: studiesData.filter(d => d.stageList.includes(activeLens))
viewof queryText = Inputs.text({
label: "Search",
placeholder: "title, journal, abstract, annotation…",
width: 320,
submit: false
})
viewof disciplinePick = Inputs.select(
["All disciplines", ...new Set(inScope.map(d => d.discipline).filter(x => x))].sort(
(a, b) => (a === "All disciplines" ? -1 : b === "All disciplines" ? 1 : a.localeCompare(b))
),
{label: "Discipline", value: "All disciplines"}
)
viewof recommendedOnly = Inputs.toggle({
label: "Recommended for at least one stage",
value: false
})
filtered = {
const q = (queryText || "").trim().toLowerCase();
return inScope
.filter(d => disciplinePick === "All disciplines" || d.discipline === disciplinePick)
.filter(d => !recommendedOnly || d.recNum >= 4)
.filter(d => {
if (!q) return true;
return [d.title, d.journal, d.abstract, d.discipline, d.theme,
d.dm_note, d.cr_note, d.da_note, d.sc_note]
.some(v => (v || "").toLowerCase().includes(q));
})
.sort((a, b) => (b.recNum - a.recNum) || (b.yearNum - a.yearNum));
}Chapter 9 — Communicating research
Materials for the scientific-communication Practice section
Materials for Chapter 9’s practice: what makes a computational pipeline inspectable, its results reproducible, and its findings interpretable.
Chapter 9 asks how other researchers can examine a computational study: its pipeline should be inspectable, its results reproducible, and its findings interpretable.
The Practice assignment. Write a one-page analysis of a published computational study. Assess its inspectability (preregistration, shared data and code, documented prompts and model versions) and its reproducibility using the four-category framework. Read one visualization through Kirk’s four-stage design process, examine how the study communicates uncertainty, and explain what you would change.
The studies, filtered to scientific communication
Forty-four studies carry an annotation on how they reported their work. This is the smallest annotated set in the database. That describes the collection’s coverage; it does not establish how often researchers document communication practices across the field.
What another reader can check
Begin with a specific result and ask whether you can trace it to the data, code, and decisions that produced it. If something is unavailable, explain which check you cannot perform. Consider the publication context and any access restrictions when proposing a change.
In the Twitter election-forecasting episode (§9.1), access to the original data allowed others to identify an error. What do your study’s shared materials let you question?