A duplicate is a clue, not an automatic deletion
Why a cleaning script should flag suspicious records before deciding what to remove.
An interactive lab that turns everyday questions into small experiments. Anyone can begin by playing. Learners can then inspect the data and edit real runnable code. Professional visitors can examine the research logic, design choices and potential impact.
Nathalie Lab is a testing ground for learning, research communication and programming. A visitor starts with a familiar problem rather than jargon. They make a choice, see a consequence, inspect the data created by that choice, and can then reproduce the logic in code.
Curious young people, beginners, students, researchers, educators and professional visitors can enter at different depths without needing separate websites.
Learn scarcity, trade-offs, uncertainty and how choices become data.
Investigate strange values, missing information and possible duplicates.
Test claims by asking about samples, selection and sources.
This editor runs real Python (via Pyodide) and real R (via webR) directly in your browser — genuine language engines, not a simulation. Stata is shown as a read-only reference, since Stata has no browser runtime anywhere. Pick a lesson and a language, edit the code, press Run, break it, fix it and try again.
For researchers, employers and collaborators: Nathalie Lab is an applied research portfolio built around working experiments. The public-facing activities are the entry point; underneath them are research questions, analytical decisions, programming logic, assumptions, limitations and opportunities for evaluation.
These aren't abstract labels: the Money Simulation lab is a simplified Monte Carlo model with a decision tree and probability shocks, and Data Detective mirrors the validation step of an actual hedonic pricing study — the same range checks, missingness review, and duplicate provenance logic used before a regression is ever run. See the applied version in the research portfolio.
The beginner version earlier on this page has three fairly obvious issues. This dataset has five subtler ones — the kind that survive a first pass and only surface under real scrutiny.
| ID | Name | Age | Enrolled | Spending |
|---|---|---|---|---|
| 1001 | Chanda | 24 | 2023-05-01 | K130 |
| 1002 | Mary | -31 | 2023-05-02 | K200 |
| 1003 | Brian | 29 | 2031-01-15 | K170 |
| 1004 | Ruth | 19 | 2023-05-04 | 200 kwacha |
| 1005 | Joseph | 34 | 2023-05-05 | K9800 |
| 1001 | Chanda M. | 41 | 2023-06-11 | K90 |
Notice these needed different responses: some are correctable (parse the unit), some need a source check (the future date), and one is a genuine identity conflict — a reused ID with a different name, age and date is not the same thing as an exact duplicate row.
A single run of the Money Simulation model gives you one outcome — that could just be luck. Run it 2,000 times instead and you get a distribution: a mean, a spread, a worst case and a best case. This runs the real Python engine live, right here.
Do people understand a concept better after interacting with it? Do they retry after an error? Can they transfer the idea to a new example?
Current examples use synthetic demonstration data. They do not claim to represent national statistics or actual population behaviour.
Real Python (Pyodide) and R (webR) execution are live. Accessibility/audio modes, user testing, learning analytics and documented research experiments can be added incrementally next.
A research-notebook style blog for showing the process behind Nathalie Lab. Instead of publishing only polished results, each note can document a question, a test, a failure or surprise, what it taught me, and what I would change next.
Why a cleaning script should flag suspicious records before deciding what to remove.
Using a small simulation to make model sensitivity and uncertainty visible.
Keeping the research concept constant while changing the route into it.