Data Explorer (CODAP-style) is part of Practice Tools. Sign in or create an account, then subscribe for โฆ4,000/month to unlock it.
Step-by-step exercises for Data Explorer (CODAP-style) - read them here, then practice live in the tool above.
A full walkthrough of CODAP's interface, importing a dataset, reading and editing a case table, and building your first graphs.
CODAP (the Common Online Data Analysis Platform) is a free, browser-based data analysis tool built by the Concord Consortium specifically for teaching statistical and data reasoning โ it runs at codap.concord.org with nothing to install and no account required to start working. It's simpler than full statistical software like R or Tableau, deliberately so: the entire interface is built around a small number of concepts (a case table, draggable attributes, and drop-zone graphs) that you can learn in one sitting and then reuse for any dataset. That simplicity is exactly why it's a strong lab environment for building real data-reasoning skills without fighting a complicated tool at the same time.
The beginner track gets you from "never opened CODAP" to comfortably importing a dataset, reading and editing it as a case table, and building basic graphs to answer simple questions about it.
| Area | What it does |
|---|---|
| Case table | The spreadsheet view of your data โ one row per case, one column per attribute. This is your starting point for every dataset. |
| Attribute | CODAP's word for a column/variable. Attributes can be dragged directly out of the case table header onto other objects. |
| Graph | A drop-zone visualization tool โ drag an attribute onto an axis and CODAP picks a sensible chart type automatically based on whether the attribute is categorical or numeric. |
| Component | CODAP's word for any object on the canvas โ a table, a graph, a map, a text box. You can have several open and arranged side by side. |
| Toolbar (top) | Buttons to add new components: Table, Graph, Map, Slider, Text, Calculator, and more. |
Try the same three-question exercise against the "Roller Coasters" example dataset instead of Mammals โ different attribute types (more numeric variables, fewer categories) will surface a slightly different mix of chart types and give you a second rep on the drag-and-drop workflow. Once building graphs and reading linked selections feels automatic, move to the Intermediate track, which covers formulas, hierarchical/grouped data, and multiple linked datasets.
Where drag-and-drop graphing stops being enough. This guide covers formulas, hierarchical/grouped data, working with multiple linked datasets, and simple simulation with sliders.
Beginner work uses attributes exactly as they exist in the imported data. Intermediate work is about creating new attributes with formulas, working with data that has natural groups or nested structure (like students within classrooms, or measurements repeated per subject), and combining more than one dataset in a single document. This is also where CODAP starts to feel less like "exploring a static dataset" and more like a lightweight modeling environment, especially once sliders enter the picture.
Right-click any attribute's column header and choose Edit Formula (or use the + button to create a new attribute, then edit its formula) to define a value computed from other attributes in the same case.
// Basic arithmetic referencing other attribute names directly
Speed / Lifespan
// Conditional logic
if(Speed >= 60, "Fast", "Slow")
// Built-in functions โ CODAP supports a fairly full formula language
round(mean(Speed), 1)
sqrt(Height^2 + Weight^2)
// String functions
concat(Genus, " ", Species)
// The mean of an attribute across every case in the collection โ
// useful for building a "distance from average" attribute
Speed - mean(Speed)
// Count of cases matching a condition
count(Diet = "Carnivore")
Real datasets often have natural nesting โ repeated measurements per subject, students within a class, trials within an experiment. CODAP handles this with hierarchical case tables: two or more linked tables where each row in a "parent" collection can expand to show its related "child" cases.
You can have more than one case table (from separate imports) open in the same document. Two attributes with matching values across tables can be linked so that selecting a case in one highlights the related case(s) in the other โ useful for comparing, say, a "Countries" dataset against a separately-imported "Continents" reference table.
The Slider component (toolbar) creates a single adjustable numeric value you can reference inside formulas โ this is CODAP's entry point into simulation and "what-if" modeling.
v1) to something descriptive, e.g. threshold.if(Speed >= threshold, "Above", "Below").Speed - mean(Speed) to show each mammal's deviation from the average speed.speedCutoff, then add a second formula attribute: if(Speed >= speedCutoff, "Fast", "Slow").The Data Interactive Plugin API, building a custom plugin, programmatic/API-driven data import, simulation design, and packaging a document as a shareable teaching activity.
Intermediate work stays entirely inside CODAP's own UI โ formulas, sliders, hierarchical tables. Expert work steps outside that boundary: CODAP exposes a full Data Interactive Plugin API that lets an external web page (a "plugin," running in an iframe embedded in a CODAP document) programmatically read and write case data, create components, and react to selection events. This is how CODAP's own built-in tools like the sampler and the graph itself are actually built, and it's the same API you use to build a custom simulation, a game, or a custom data-collection interface that talks to a live CODAP document. This track assumes basic JavaScript comfort โ you're writing real code here, not just formulas.
A CODAP plugin is just a web page, loaded inside CODAP as an iframe component, that communicates with the parent CODAP document using postMessage under the hood โ wrapped by an official helper library so you rarely touch postMessage directly. The two building blocks:
| Concept | What it means |
|---|---|
| Resource | A path string identifying something in the CODAP document โ a data context, a collection, a case, an attribute, a component. E.g. dataContext[Mammals].collection[Cases].case |
| Action | What you're doing to that resource: create, get, update, delete, or notify |
Every API call is an object with an action and a resource, sent through the helper library's codapInterface.sendRequest() method.
iframe-phone plus the CODAP plugin API wrapper, depending on which starter you use).// Create a new data context (a fresh dataset) from the plugin
codapInterface.sendRequest({
action: "create",
resource: "dataContext",
values: {
name: "SimResults",
collections: [{
name: "Trials",
attrs: [
{ name: "trial" },
{ name: "outcome" }
]
}]
}
});
// Add a new case (row) to that dataset
codapInterface.sendRequest({
action: "create",
resource: "dataContext[SimResults].collection[Trials].case",
values: [{ values: { trial: 1, outcome: "heads" } }]
});
// Read all current cases back
codapInterface.sendRequest({
action: "get",
resource: "dataContext[SimResults].collection[Trials].caseSearch[*]"
});
Plugins can also react to what happens inside CODAP itself โ useful for building a plugin that responds when a user selects a case or changes an attribute.
codapInterface.on("notify", "dataContextChangeNotice", function(notification) {
// fires when data in the connected context changes
console.log(notification);
});
codapInterface.on("notify", "component", function(notification) {
// fires on component-level events, e.g. selection changes
});
Beyond CSV import, expert-level CODAP work often means pulling data from an external source programmatically rather than by hand:
create action shown above โ this is how you connect CODAP to a live external data source that a plain URL import can't handle (auth, pagination, JSON reshaping).A well-designed CODAP simulation plugin follows a consistent shape: a control (button, slider, or repeated trigger) that runs one trial of a random or rule-based process, pushes the result as a new case, and lets CODAP's own graphing tools do the analysis rather than trying to visualize results inside the plugin itself.
.codap document, or Share to generate a public link others can open directly, depending on whether you want a downloadable file or a live shareable URL..codap file โ only a reference to load it from.