Tommy Carstensen

Bioinformatician and Data Scientist specializing in EHR data engineering, high-performance visual analytics, and reproducible ML pipelines. I focus on building research tooling designed to transform raw clinical events and complex datasets into actionable insights.

Azure ML • Python • Dask • Parquet • Bokeh • Datashader • Plotly • PyTorch • Google Cloud

Open-Source Software & AI Tools

PlotPick's benchmark: a heatmap of numeric F1 by model and chart type on ChartX PlotPick: Numbers Back from Figures Recovers the data behind published charts: Claude Vision reads box plots, bar charts and line plots from images and PDFs back into tables. Benchmarked on ChartX and PlotQA against GPT, Gemini, Mistral and DePlot, with the code and per-item results public.
Claude API • Streamlit • PDF Figure Detection
Memory against fit time for Cox regression: coxstream stays flat as the rows grow while survival::coxph and lifelines climb coxstream: Out-of-Core Cox Regression Exact Cox proportional hazards regression on tables larger than memory. Each Newton–Raphson step is a sum over parquet row groups, so memory stays flat as the rows grow, and the coefficients agree with R's survival::coxph to 2e-14 at two million rows. On PyPI and CRAN.
Python • R • Cython • Survival Analysis
Memory against wall time for generalized linear models: renew-glm uses a fraction of the memory of statsmodels and R's glm renew-glm: Streaming GLMs Generalized linear models in bounded memory, implementing the renewable estimation of Luo and Song (2020): the streaming path holds one chunk plus O(p²) state, however many rows there are. Gaussian, binomial and Poisson, checked against statsmodels. On PyPI, with a Zenodo DOI.
Python • NumPy • SciPy

Upstream: a polars bug reported with a 200-million-row reproducer and labelled accepted, and merged fixes to bcftools and biopython. More at tommycarstensen.github.io.

EHR Research & Publications

Presentations: Advanced Deep Learning for Health Technical talks covering sequence modeling for Electronic Health Records (EHR), 3D molecule generation, and medical image analysis architectures.
Talk: RAM- and CPU-Efficient Data Processing Where memory actually goes: streaming engines against pandas, parquet against CSV, and what the wrong dtype costs, at 50 to 800 million rows of synthetic registry-shaped data.

Peer-Reviewed Publications

Interactive Dashboards & Simulations

Copenhagen Property Map Copenhagen Property Explorer Geospatial dashboard using Datashader for server-side rasterization. Visualizes 200k+ transactions with sub-second latency.
Google Cloud Run • Web Mercator
Malmö Wealth Simulator Malmö 2026: Wealth Simulator Financial trajectory model proving the superiority of capital compounding over dividends. Simulates liquidation values vs. tax drag.
JavaScript • Financial Modeling
Epstein Archive EFTA: Public Records & Evidence Archive for the Epstein Files Transparency Act. Features an automated gallery using OpenCV for facial recognition in archival media.
OpenCV • Python • Graph Theory
KV2025 Election Map KV2025: Election Map Geospatial visualization of the 2025 Copenhagen municipal election, mapping hyper-local political shifts across districts.
Leaflet • GeoJSON
Novo Nordisk Chart Novo Nordisk Analytics Interactive stock and market share modeling for the GLP-1 pharmaceutical sector.
Plotly • Financial Data
PubMed Tool PubMed Overlap Utility Streamlit tool for clinical research. Performs set-intersection analysis between custom cohorts and live PubMed queries.
Streamlit • NCBI API

Data Journalism & Archival Work

DJIA 1929 Chart DJIA 1929: Great Depression Interlinks time-series market data with qualitative history, mapping price markers directly to archival newspaper front pages.
Bokeh • Time-Series
DJIA 2008 Chart DJIA 2008: Great Recession Interactive exploration of the 2008 liquidity crisis, visualizing the collapse of banking giants through contemporary reporting.
Bokeh • Visualization
COVID-19 Tracker COVID-19 Tracker Aligned time-series analysis and choropleth mapping of pandemic metrics across Europe and the US.
Choropleth Maps • Data Alignment
Jan 6 Attack Jan 6 Attack (Crowd-Sourced) Crowd-sourced archival project using Google Forms with a Human-in-the-loop (HITL) verification layer for data integrity.
Google Forms • Verification Pipeline
Jan 6 Archive Jan 6 Video Archive Large-scale video scraping and metadata indexing project preserving historical digital artifacts.
Web Scraping • Metadata Indexing
An ancestor fan chart: four family lines in four colours radiating from an empty centre Family History Explorer Danish and Spanish parish registers, censuses and military files reconciled into one tree. An interactive SVG fan chart in which every claim carries an evidence tier derived from its sources rather than asserted by hand. Password-protected.
SVG • GEDCOM • Python • Playwright

Physical Data Visualization (LEGO)

A LEGO brain cut down the midline, each region built in a different color A LEGO Brain A human brain in bricks, every region its own color, cut open to show the hippocampus, amygdala, striatum and thalamus buried in the middle. Voxelized from FreeSurfer surface meshes.
FreeSurfer • Mesh Voxelization • LDraw
Semaglutide built in LEGO as a space-filling model in CPK colors Molecules in Brick PDB2LEGO reads a structure from the Protein Data Bank and packs bricks into its atoms: semaglutide, insulin, hemoglobin, GFP and a DNA double helix, one brick per atom.
Python • PDB Parsing • CPK Colors
A LEGO map of Africa, colored by ethnolinguistic group Map of Africa Colored by ethnolinguistic group and raised brick by brick into the third dimension by population density. Gridded population data and vector borders, straight to studs.
NASA2LEGO • Population Grids • GIS
Two LEGO hands, one of fire and one of ice, reaching toward each other but never touching Fire & Ice Two hands of transparent brick, one burning and one frozen, reaching for each other and never touching. A mesh sculpture voxelized into bricks, after Andersen's The Snowman.
STL Voxelization • Transparent Bricks
Fred Sanger, and a Molecule of DNA Two pictures in one panel of bricks. A field of 18,432 cheese slopes, half turned a quarter to the left and half to the right, so Sanger becomes the molecule he found a way to read as you walk past.
Lenticular Mosaic • Cheese Slopes
The LEGO Search tool, showing catalogue results for a query BrickLink Catalogue Search Full-text search over more than 130,000 parts, minifigures and sets, for tracking down the bricks a build needs. Server-side SQLite FTS5, so the browser downloads no catalog; refreshed daily by cron.
PHP • SQLite FTS5 • Cron

All of it, with build notes and photographs, at tommycarstensen.com/lego.

Photography

The words TOMMY PHOTOS cut out of a wall of the gallery's photographs Photo Gallery The most striking of my photographs, chosen from an archive of tens of thousands, on pages from mountains and night to insects and fungi. Candidates were judged by panels of Claude reviewers under neutral IDs, with my own cuts and picks on top.
Claude Sonnet & Haiku • Face Detection • Python

Professional Presence