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
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
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
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.
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.
Copenhagen Property Explorer
Geospatial dashboard using Datashader for server-side rasterization. Visualizes 200k+ transactions with sub-second latency.
Google Cloud Run • Web Mercator
Malmö 2026: Wealth Simulator
Financial trajectory model proving the superiority of capital compounding over dividends. Simulates liquidation values vs. tax drag.
JavaScript • Financial Modeling
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
Geospatial visualization of the 2025 Copenhagen municipal election, mapping hyper-local political shifts across districts.
Leaflet • GeoJSON
Novo Nordisk Analytics
Interactive stock and market share modeling for the GLP-1 pharmaceutical sector.
Plotly • Financial Data
PubMed Overlap UtilityStreamlit tool for clinical research. Performs set-intersection analysis between custom cohorts and live PubMed queries.
Streamlit • NCBI API
Data Journalism & Archival Work
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: Great Recession
Interactive exploration of the 2008 liquidity crisis, visualizing the collapse of banking giants through contemporary reporting.
Bokeh • Visualization
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 (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 Video Archive
Large-scale video scraping and metadata indexing project preserving historical digital artifacts.
Web Scraping • Metadata Indexing
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
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
Molecules in BrickPDB2LEGO 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
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
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
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.
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.