DS / ML / AI

EDA on 11,000 Radiotherapy Patient Records: What the Data Reveals

Vineeth Muraleedharan Radiation Therapist · Aspiring Data Scientist 2026 5 min read
← Back to Blog
// Table of Contents
  1. Why I Built This
  2. From Six Years of Scan Lists to One Clean Table
  3. Dataset Overview and Data Quality
  4. Who's in the Data: Age, Sex, Site
  5. Recurrence Rates by Site Group
  6. Who Gets CECT, Breath-Hold, 4D-CT and Fiducials
  7. Six Years of Change: Technique Adoption and Seasonality
  8. A Small Cohort Worth Tracking: CUP/MUO Cases
  9. Turning the Analysis Into a Power BI Dashboard
  10. Limitations
  11. About This Project

Why I Built This

Every radiotherapy department generates a steady stream of operational data - who got simulated, on what machine, for what diagnosis, whether they'd been treated before - and most of it lives and dies in scan-list spreadsheets and PACS logs. Nobody ever goes back and asks what six years of that data actually says about the department's caseload, its technology mix, or its patients.

I did. This post walks through the exploratory data analysis (EDA) I ran on six years of radiotherapy patient simulation records (2020-2025) and the Power BI dashboard I built on top of it - what the dataset looks like, what statistically holds up and what doesn't, and how that turned into something a department could actually glance at and use.

Scope of this post: the EDA and the Power BI dashboard, both built on the same cleaned six-year dataset. I also tried rebuilding part of this in Tableau and ran into a Tableau Public live-connection issue that cost the work I'd done there - that's a separate story for another time, and it's not covered here.

From Six Years of Scan Lists to One Clean Table

The raw source was six years of CT simulation worklists, roughly 11,030 rows across six separate yearly sheets, each with its own quirks in how fields had been typed in over the years. Getting that into something analyzable took a full manual cleaning pass before any statistics touched it:

What came out the other end was Pt_Dataset_clean.csv: a 13-column table with one row per simulation record, ready for actual analysis. Two more rows with no diagnosis text at all got dropped at the start of the EDA itself, leaving a final analysis set of 10,739 records - which is the number everything in the next few sections is built on.

Dataset Overview and Data Quality

Before trusting any statistic that comes out of a dataset, I wanted to know how trustworthy the dataset itself was. The audit came back clean:

FieldMissing% of Rows
remarks3,41431.79%
technique1331.24%
age280.26%
sex270.25%
site240.22%
all other fields00.00%

remarks is a free-text field, so its 31.79% "missing" rate just means most records had nothing extra to note - not a data quality problem.

Duplicates

Zero duplicate rows and zero duplicate record IDs across the full 10,739-record table.

Age Sanity Check

Age range: 1-99 years. Zero implausible ages outside a 0-100 window.

One small internal mismatch worth noting: for 15 of 10,739 rows, the year parsed from the simulation date didn't match the standalone year column (almost certainly simulations logged in the last days of December but dated into the following January, or similar edge cases). It's a tiny fraction of the data and doesn't change any of the conclusions below.

Who's in the Data: Age, Sex, Site

The patient population: mean age 57.7 years (median 60, SD 15.1), ranging from 1 to 99. Sex split is close to even - 5,625 male (52.4%) and 5,087 female (47.4%), with 27 records missing sex.

Case Volume by Anatomical Site Group

// Case Volume by Site Group (n = 10,739)
CHEST
3,134
PELVIS
2,237
H&N
1,626
BRAIN
1,487
ABDOMEN
1,137
SPINE
458
OTHER
390
THORAX
124
TBI
85
EXTREMITY
38
HEMATOLOGIC
22
NECK
1
n ≥ 30 (reliable for group statistics)
n < 30 (exploratory only)

CHEST is the largest site group at 29.2% of all volume, followed by PELVIS (20.8%) and H&N (15.1%). At the other end, NECK (n=1) and HEMATOLOGIC (n=22) are too small for reliable group-level statistics and are flagged grey everywhere they appear below.

Simulation Pathway Breakdown

Most records are a standard first simulation, but a meaningful share reflect other points in a patient's pathway:

Procedure TypeCount%What It Means
SIMULATION9,65489.9%Standard initial planning CT
POST_FIDUCIAL4634.3%~3 days after fiducial placement; often doubles as the planning CT
RESIMULATION3152.9%Repeat planning CT (anatomy or plan change)
CHECK_SCAN1461.4%Interim verification scan mid-course
TREATMENT1371.3%RT delivered without a fresh CT (e.g. keloid, manual electron plans, TBI)
PET_SIM240.2%PET-CT based simulation

Technique Mix

Across the full six years, TomoTherapy (TOMO) is the single most-used technique (4,166 records, 38.8%), closely followed by 3D-conformal (3DCRT, 3,814 records, 35.5%) and CyberKnife (CK, 2,403 records, 22.4%). IMRT/VMAT and multi-machine combinations (e.g. TOMO|CK, meaning a patient had separate lesions treated on two different machines in the same course, not one lesion treated two ways) make up the remaining ~3%.

Recurrence Rates by Site Group

13.9%
Overall recurrence rate (95% Wilson CI: 13.3% - 14.6%)
1,492 recurrences out of 10,739 total records

Breaking that down by site group tells a more specific story. I used Wilson score confidence intervals rather than a plain proportion, since several site groups have small enough sample sizes that a naive CI would badly understate the uncertainty.

Site GroupnRecurrence Rate95% CI
SPINE45829.3%25.3% - 33.6%
BRAIN1,48722.9%20.8% - 25.1%
HEMATOLOGIC2218.2%7.3% - 38.5% (low n)
EXTREMITY3815.8%7.4% - 30.4%
OTHER39014.4%11.2% - 18.2%
CHEST3,13414.4%13.2% - 15.6%
PELVIS2,23711.1%9.9% - 12.5%
H&N1,6269.1%7.8% - 10.6%
ABDOMEN1,1379.1%7.5% - 10.9%
THORAX1241.6%0.4% - 5.7%
TBI851.2%0.2% - 6.4%
NECK10.0%0.0% - 79.3% (low n)

A chi-square test confirms recurrence risk genuinely differs by site group rather than this being noise: χ² = 286.94, p = 4.9 × 10⁻⁵⁵, dof = 11, Cramér's V = 0.163. A V of 0.163 is a real but modest effect size - statistically unambiguous at this sample size, but site group alone explains only part of what drives recurrence.

Age Differs Sharply by Site Group - Recurrence Doesn't Track It Simply

A Kruskal-Wallis test confirms patient age varies enormously by site group (H = 1,255.9, p = 1.3 × 10⁻²⁶³ - about as unambiguous a result as a p-value gets). That's intuitive: BRAIN and PELVIS skew the population toward older patients, SPINE includes a wider age spread from metastatic disease, and so on. But recurrence rate doesn't simply track age the way it tracks site group, which is part of why site-group-level analysis, not just age-adjustment, matters here.

Sex: No Recurrence Difference, But a Real Age Difference

Female recurrence sits at 14.3% (728/5,087, CI 13.4-15.3%) and male recurrence at 13.5% (762/5,625, CI 12.7-14.5%). The chi-square test for sex × recurrence comes back essentially null: χ² = 1.24, p = 0.265, Cramér's V = 0.011 - no meaningful difference. What is significantly different is age: median age 56 for women vs 63 for men (Mann-Whitney U = 10,061,356, p = 2.1 × 10⁻¹⁵⁵). That reflects a different case mix between the sexes (e.g. breast and gynaecological cases skewing younger), not a sex-based recurrence risk.

Prior-Year RT: A Sanity Check, Not a Discovery

Patients flagged as having had radiotherapy in the prior year show a recurrence rate of 96.4%, against 3.0% for everyone else (χ² = 8,042.09, p ≈ 0, Cramér's V = 0.865 - by far the strongest association in the whole dataset). I want to be upfront about what this is and isn't: it's close to a tautology. A patient logged as returning with prior-year RT who shows up again is, almost by definition, a recurrence case. I'm reporting it because it's a useful internal consistency check on the data (the two fields agree with each other the way they should), not because it's a novel clinical finding.

Who Gets CECT, Breath-Hold, 4D-CT and Fiducials

The remarks field, once parsed, yields four useful flags: whether a case used contrast-enhanced CT (CECT) co-simulation, the Active Breathing Coordinator (ABC, i.e. breath-hold), 4D-CT, or fiducial marker placement. One flag passed a clean internal sanity check - every single has_fiducial row matched a POST_FIDUCIAL procedure type (463/463, zero mismatches) - which gave me confidence the other three flags were extracted reliably too.

FlagRows% of Dataset
CECT co-simulation3,13529.2%
Fiducial / post-fiducial4634.3%
ABC (breath-hold)2432.3%
4D-CT1631.5%

Breaking each flag down by site group shows exactly the clinical pattern I'd expect to see, which is a good sign the data reflects real practice rather than data-entry noise:

Site GroupCECTABC4D-CTFiducial
BRAIN67.7%0.1%0.3%0.0%
H&N64.5%0.1%0.4%0.0%
ABDOMEN40.5%0.2%3.3%31.8%
SPINE13.8%0.0%0.2%0.0%
THORAX19.4%11.3%0.0%0.0%
CHEST9.3%7.0%2.8%0.3%
PELVIS5.8%0.1%0.9%4.1%

CECT co-simulation concentrates heavily in BRAIN and H&N - exactly where contrast helps delineate tumour from surrounding soft tissue. Breath-hold (ABC) usage is highest in THORAX and CHEST, where respiratory motion is the main concern. 4D-CT and fiducial tracking both concentrate in ABDOMEN, consistent with fiducial-guided liver/pancreas work. Chi-square tests confirm every one of these associations is statistically real: CECT (χ²=3,424.7, V=0.565), fiducial (χ²=2,386.8, V=0.471), ABC (χ²=515.8, V=0.219) and 4D-CT (χ²=106.1, V=0.099) all come back significant against site group, with CECT and fiducial usage showing the strongest associations of the four.

Six Years of Change: Technique Adoption and Seasonality

One question I wanted a real answer to, not a guess: is there a seasonal pattern to referral volume - a slow December, a busy September, anything like that? A Kruskal-Wallis test across calendar months, pooled across all six years, came back H = 9.36, p = 0.589 - no statistically significant seasonality. Whatever month-to-month variation shows up in a single year's chart is noise, not a reliable pattern worth planning staffing around.

What is a real, sustained trend is which machine treats most patients. Tracking technique mix year over year shows a clear multi-year shift:

// Technique Mix by Year (% of Cases)
TOMO
2020
33.1%
2025
44.3%
3DCRT
2020
48.5%
2025
27.6%
CK (CyberKnife)
2020
15.7%
2025
26.4%
TOMO
3DCRT
CK

Between 2020 and 2025, TomoTherapy's share rose from 33.1% to 44.3% of all cases, CyberKnife's share rose from 15.7% to 26.4%, and 3D-conformal's share fell from 48.5% to 27.6%. That's a real, steady multi-year shift toward TomoTherapy and CyberKnife and away from 3DCRT - not a one-year blip - and it tracks a department moving its caseload toward more image-guided, higher-precision techniques over time.

A Small Cohort Worth Tracking: CUP/MUO Cases

Cancer of unknown primary (CUP) and malignancy of unknown origin (MUO) - cases where no primary tumour site was ever identified - show up under a scattered mix of free-text labels in the diagnosis field (MUO, MUO NECK, CUP WITH ABDOMEN, UNKNOWN PRIMARY, and about two dozen other variants, most appearing only once). Matching these as whole words (to avoid, for example, a misspelled "tumour" false-matching on "muo") turns up 57 cases - 0.5% of the entire dataset.

It's a small cohort, so I'm reporting this with appropriate caution: recurrence rate within this group is 8.8% (5/57) and median age is 59. More interesting than either of those single numbers is the trend - case counts in this group have fallen from 16 in 2020 to 5 in 2025. That could be a real decline in how often a primary tumour goes unidentified (better imaging and work-up over the years, plausibly), or it could simply be caseload variation in a group this small. With n this low, I'd want another year or two of data before reading much into the direction.

Turning the Analysis Into a Power BI Dashboard

An EDA notebook is great for answering a specific statistical question once. It's the wrong tool for a department that wants to glance at "how are we doing this year" without re-running Python. So the same cleaned dataset also feeds a two-page Power BI dashboard, built for ongoing monitoring rather than one-off analysis - dark indigo background, a teal/neon accent palette, KPI tiles with trend indicators on the overview page, and a second "story" page for the drill-down detail (site-group breakdowns, year-over-year technique mix, the imaging-flag patterns above).

// Overview Page - KPI Tiles
Total Records
10,739
2020 - 2025
Recurrence Rate
13.9%
varies by site group
Top Site Group
CHEST
29.2% of volume
Leading Technique
TOMO
↑ 33.1% → 44.3%
CyberKnife Share
22.4%
↑ 15.7% → 26.4%
3DCRT Share
35.5%
↓ 48.5% → 27.6%

Every number on these tiles is the same figure derived in the EDA above - the dashboard's job is to surface it live, not to recompute it differently.

The point of building this as a dashboard rather than leaving it as a one-off notebook is simple: a department head doesn't want to ask a data person to re-run an analysis every quarter. They want to open a page and see whether the CyberKnife share is still climbing, whether a site group's recurrence rate has drifted, or whether this year's caseload is tracking last year's - without anyone writing a line of code. The EDA answers "what does the data say"; the dashboard answers "what does the data say today, and will it keep answering that question next month."

I also built a parallel version of this in Tableau, but ran into a live-connection-to-extract issue on Tableau Public that cost that work - so for now, Power BI is the one that's live and maintained. That's its own story, for another post.

Limitations

About This Project

◆ Original Work

This is my own project end to end: pulling and manually cleaning six years of simulation worklists, writing the EDA notebook, and building the Power BI dashboard on top of it, all drawn from my time working as a radiation therapist. Unlike some of the other posts on this site, there's no third-party research being summarized here - the design choices, the statistics, and any mistakes in either are mine.

VM

Written By

Vineeth Muraleedharan

Radiation Therapist · Aspiring Data Scientist
Built this EDA and dashboard from six years of radiotherapy patient simulation data, drawing on direct clinical experience with the patient pathways the data describes.