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 5 — From concepts to measures
Materials for the concept-representation Practice section
Materials for Chapter 5’s practice section: how computational measures encode epistemological commitments, deductively, inductively, or integratively.
Chapter 5 argues that computational choices encode epistemological commitments: the way a study turns a concept into a measure already contains a claim about what the concept is.
The Practice assignment. Select two empirical studies and write a one-page annotated bibliography on how each represents its core concepts computationally, along four dimensions: worldview alignment, measurement approach (deductive, inductive, or integrative), featurization and auxiliary instruments, and the evidence offered for validity and reliability.
The studies, filtered to concept representation
Forty-eight studies carry an annotation on how they built their measures. Use the notes to choose a study, then follow its measurement decisions through the paper and any appendices or codebooks.
Reading for the worldview
An article may leave its worldview implicit. Look at what its authors assume a measure can tell them: does a dictionary count stand in for an attitude, help discover a theme, or form one part of a broader interpretation? Explain what in the study supports your reading. A single choice, such as using a dictionary or triangulating measures, does not settle the worldview on its own.
Look at what the study does when its measure and its theory disagree. That is usually where the commitment becomes visible.